Lines Matching refs:devip
1054 static void clear_luns_changed_on_target(struct sdebug_dev_info *devip) in clear_luns_changed_on_target() argument
1062 if ((devip->sdbg_host == dp->sdbg_host) && in clear_luns_changed_on_target()
1063 (devip->target == dp->target)) in clear_luns_changed_on_target()
1070 static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in make_ua() argument
1074 k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS); in make_ua()
1127 clear_luns_changed_on_target(devip); in make_ua()
1140 clear_bit(k, devip->uas_bm); in make_ua()
1505 static int inquiry_vpd_b1(struct sdebug_dev_info *devip, unsigned char *arr) in inquiry_vpd_b1() argument
1512 if (devip->zmodel == BLK_ZONED_HA) in inquiry_vpd_b1()
1538 static int inquiry_vpd_b6(struct sdebug_dev_info *devip, unsigned char *arr) in inquiry_vpd_b6() argument
1550 if (sdeb_zbc_model == BLK_ZONED_HM && devip->max_open) in inquiry_vpd_b6()
1551 put_unaligned_be32(devip->max_open, &arr[12]); in inquiry_vpd_b6()
1560 static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_inquiry() argument
1573 is_zbc = (devip->zmodel != BLK_ZONED_NONE); in resp_inquiry()
1578 else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL)) in resp_inquiry()
1590 int host_no = devip->sdbg_host->shost->host_no; in resp_inquiry()
1593 (devip->channel & 0x7f); in resp_inquiry()
1597 (devip->target * 1000) + devip->lun); in resp_inquiry()
1599 (devip->target * 1000) - 3; in resp_inquiry()
1631 &devip->lu_name); in resp_inquiry()
1667 arr[3] = inquiry_vpd_b1(devip, &arr[4]); in resp_inquiry()
1673 arr[3] = inquiry_vpd_b6(devip, &arr[4]); in resp_inquiry()
1727 struct sdebug_dev_info *devip) in resp_requests() argument
1734 int stopped_state = atomic_read(&devip->stopped); in resp_requests()
1780 static int resp_start_stop(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_start_stop() argument
1792 stopped_state = atomic_read(&devip->stopped); in resp_start_stop()
1796 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) { in resp_start_stop()
1797 u64 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts)); in resp_start_stop()
1801 atomic_set(&devip->stopped, 0); in resp_start_stop()
1816 atomic_xchg(&devip->stopped, want_stop); in resp_start_stop()
1836 struct sdebug_dev_info *devip) in resp_readcap() argument
1855 struct sdebug_dev_info *devip) in resp_readcap16() argument
1894 struct sdebug_dev_info *devip) in resp_report_tgtpgs() argument
1898 int host_no = devip->sdbg_host->shost->host_no; in resp_report_tgtpgs()
1915 (devip->channel & 0x7f); in resp_report_tgtpgs()
1917 (devip->channel & 0x7f) + 0x80; in resp_report_tgtpgs()
1970 struct sdebug_dev_info *devip) in resp_rsup_opcodes() argument
2121 struct sdebug_dev_info *devip) in resp_rsup_tmfs() argument
2310 struct sdebug_dev_info *devip) in resp_mode_sense() argument
2328 is_zbc = (devip->zmodel != BLK_ZONED_NONE); in resp_mode_sense()
2339 target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) + in resp_mode_sense()
2340 (devip->target * 1000) - 3; in resp_mode_sense()
2476 struct sdebug_dev_info *devip) in resp_mode_select() argument
2553 set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm); in resp_mode_select()
2583 struct sdebug_dev_info *devip) in resp_log_sense() argument
2660 static inline bool sdebug_dev_is_zoned(struct sdebug_dev_info *devip) in sdebug_dev_is_zoned() argument
2662 return devip->nr_zones != 0; in sdebug_dev_is_zoned()
2665 static struct sdeb_zone_state *zbc_zone(struct sdebug_dev_info *devip, in zbc_zone() argument
2668 return &devip->zstate[lba >> devip->zsize_shift]; in zbc_zone()
2676 static void zbc_close_zone(struct sdebug_dev_info *devip, in zbc_close_zone() argument
2689 devip->nr_imp_open--; in zbc_close_zone()
2691 devip->nr_exp_open--; in zbc_close_zone()
2697 devip->nr_closed++; in zbc_close_zone()
2701 static void zbc_close_imp_open_zone(struct sdebug_dev_info *devip) in zbc_close_imp_open_zone() argument
2703 struct sdeb_zone_state *zsp = &devip->zstate[0]; in zbc_close_imp_open_zone()
2706 for (i = 0; i < devip->nr_zones; i++, zsp++) { in zbc_close_imp_open_zone()
2708 zbc_close_zone(devip, zsp); in zbc_close_imp_open_zone()
2714 static void zbc_open_zone(struct sdebug_dev_info *devip, in zbc_open_zone() argument
2729 zbc_close_zone(devip, zsp); in zbc_open_zone()
2730 else if (devip->max_open && in zbc_open_zone()
2731 devip->nr_imp_open + devip->nr_exp_open >= devip->max_open) in zbc_open_zone()
2732 zbc_close_imp_open_zone(devip); in zbc_open_zone()
2735 devip->nr_closed--; in zbc_open_zone()
2738 devip->nr_exp_open++; in zbc_open_zone()
2741 devip->nr_imp_open++; in zbc_open_zone()
2745 static void zbc_inc_wp(struct sdebug_dev_info *devip, in zbc_inc_wp() argument
2748 struct sdeb_zone_state *zsp = zbc_zone(devip, lba); in zbc_inc_wp()
2791 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata; in check_zbc_access_params() local
2792 struct sdeb_zone_state *zsp = zbc_zone(devip, lba); in check_zbc_access_params()
2793 struct sdeb_zone_state *zsp_end = zbc_zone(devip, lba + num - 1); in check_zbc_access_params()
2796 if (devip->zmodel == BLK_ZONED_HA) in check_zbc_access_params()
2846 if (devip->max_open && in check_zbc_access_params()
2847 devip->nr_exp_open >= devip->max_open) { in check_zbc_access_params()
2853 zbc_open_zone(devip, zsp, false); in check_zbc_access_params()
2864 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata; in check_device_access_params() local
2880 if (sdebug_dev_is_zoned(devip)) in check_device_access_params()
2892 static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip, in devip2sip() argument
2899 return xa_load(per_store_ap, devip->sdbg_host->si_idx); in devip2sip()
3116 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_read_dt0() argument
3123 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_read_dt0()
3414 static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_write_dt0() argument
3421 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_write_dt0()
3516 if (sdebug_dev_is_zoned(devip)) in resp_write_dt0()
3517 zbc_inc_wp(devip, lba, num); in resp_write_dt0()
3552 struct sdebug_dev_info *devip) in resp_write_scat() argument
3557 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_write_scat()
3671 if (sdebug_dev_is_zoned(devip)) in resp_write_scat()
3672 zbc_inc_wp(devip, lba, num); in resp_write_scat()
3718 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata; in resp_write_same() local
3769 if (sdebug_dev_is_zoned(devip)) in resp_write_same()
3770 zbc_inc_wp(devip, lba, num); in resp_write_same()
3778 struct sdebug_dev_info *devip) in resp_write_same_10() argument
3803 struct sdebug_dev_info *devip) in resp_write_same_16() argument
3834 struct sdebug_dev_info *devip) in resp_write_buffer() argument
3845 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in resp_write_buffer()
3846 set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm); in resp_write_buffer()
3849 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm); in resp_write_buffer()
3854 &devip->sdbg_host->dev_info_list, in resp_write_buffer()
3858 if (devip != dp) in resp_write_buffer()
3866 &devip->sdbg_host->dev_info_list, in resp_write_buffer()
3880 struct sdebug_dev_info *devip) in resp_comp_write() argument
3884 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_comp_write()
3947 static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_unmap() argument
3951 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_unmap()
4006 struct sdebug_dev_info *devip) in resp_get_lba_status() argument
4025 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_get_lba_status()
4048 struct sdebug_dev_info *devip) in resp_sync_cache() argument
4081 struct sdebug_dev_info *devip) in resp_pre_fetch() argument
4088 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_pre_fetch()
4134 struct sdebug_dev_info *devip) in resp_report_luns() argument
4150 clear_luns_changed_on_target(devip); in resp_report_luns()
4226 static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_verify() argument
4236 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_verify()
4305 struct sdebug_dev_info *devip) in resp_report_zones() argument
4315 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_report_zones()
4318 if (!sdebug_dev_is_zoned(devip)) { in resp_report_zones()
4332 max_zones = devip->nr_zones - (zs_lba >> devip->zsize_shift); in resp_report_zones()
4347 lba = zs_lba + devip->zsize * i; in resp_report_zones()
4350 zsp = zbc_zone(devip, lba); in resp_report_zones()
4437 static void zbc_open_all(struct sdebug_dev_info *devip) in zbc_open_all() argument
4439 struct sdeb_zone_state *zsp = &devip->zstate[0]; in zbc_open_all()
4442 for (i = 0; i < devip->nr_zones; i++, zsp++) { in zbc_open_all()
4444 zbc_open_zone(devip, &devip->zstate[i], true); in zbc_open_all()
4448 static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_open_zone() argument
4456 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_open_zone()
4459 if (!sdebug_dev_is_zoned(devip)) { in resp_open_zone()
4468 if (devip->max_open && in resp_open_zone()
4469 devip->nr_exp_open + devip->nr_closed > devip->max_open) { in resp_open_zone()
4476 zbc_open_all(devip); in resp_open_zone()
4488 zsp = zbc_zone(devip, z_id); in resp_open_zone()
4504 if (devip->max_open && devip->nr_exp_open >= devip->max_open) { in resp_open_zone()
4511 zbc_open_zone(devip, zsp, true); in resp_open_zone()
4517 static void zbc_close_all(struct sdebug_dev_info *devip) in zbc_close_all() argument
4521 for (i = 0; i < devip->nr_zones; i++) in zbc_close_all()
4522 zbc_close_zone(devip, &devip->zstate[i]); in zbc_close_all()
4526 struct sdebug_dev_info *devip) in resp_close_zone() argument
4533 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_close_zone()
4536 if (!sdebug_dev_is_zoned(devip)) { in resp_close_zone()
4544 zbc_close_all(devip); in resp_close_zone()
4556 zsp = zbc_zone(devip, z_id); in resp_close_zone()
4568 zbc_close_zone(devip, zsp); in resp_close_zone()
4574 static void zbc_finish_zone(struct sdebug_dev_info *devip, in zbc_finish_zone() argument
4582 zbc_close_zone(devip, zsp); in zbc_finish_zone()
4584 devip->nr_closed--; in zbc_finish_zone()
4590 static void zbc_finish_all(struct sdebug_dev_info *devip) in zbc_finish_all() argument
4594 for (i = 0; i < devip->nr_zones; i++) in zbc_finish_all()
4595 zbc_finish_zone(devip, &devip->zstate[i], false); in zbc_finish_all()
4599 struct sdebug_dev_info *devip) in resp_finish_zone() argument
4606 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_finish_zone()
4609 if (!sdebug_dev_is_zoned(devip)) { in resp_finish_zone()
4617 zbc_finish_all(devip); in resp_finish_zone()
4629 zsp = zbc_zone(devip, z_id); in resp_finish_zone()
4641 zbc_finish_zone(devip, zsp, true); in resp_finish_zone()
4647 static void zbc_rwp_zone(struct sdebug_dev_info *devip, in zbc_rwp_zone() argument
4657 zbc_close_zone(devip, zsp); in zbc_rwp_zone()
4660 devip->nr_closed--; in zbc_rwp_zone()
4667 static void zbc_rwp_all(struct sdebug_dev_info *devip) in zbc_rwp_all() argument
4671 for (i = 0; i < devip->nr_zones; i++) in zbc_rwp_all()
4672 zbc_rwp_zone(devip, &devip->zstate[i]); in zbc_rwp_all()
4675 static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_rwp_zone() argument
4682 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_rwp_zone()
4685 if (!sdebug_dev_is_zoned(devip)) { in resp_rwp_zone()
4693 zbc_rwp_all(devip); in resp_rwp_zone()
4704 zsp = zbc_zone(devip, z_id); in resp_rwp_zone()
4716 zbc_rwp_zone(devip, zsp); in resp_rwp_zone()
4751 struct sdebug_dev_info *devip; in sdebug_q_cmd_complete() local
4776 devip = (struct sdebug_dev_info *)scp->device->hostdata; in sdebug_q_cmd_complete()
4777 if (likely(devip)) in sdebug_q_cmd_complete()
4778 atomic_dec(&devip->num_in_q); in sdebug_q_cmd_complete()
4835 static int sdebug_device_create_zones(struct sdebug_dev_info *devip) in sdebug_device_create_zones() argument
4849 devip->zsize = (DEF_ZBC_ZONE_SIZE_MB * SZ_1M) in sdebug_device_create_zones()
4851 while (capacity < devip->zsize << 2 && devip->zsize >= 2) in sdebug_device_create_zones()
4852 devip->zsize >>= 1; in sdebug_device_create_zones()
4853 if (devip->zsize < 2) { in sdebug_device_create_zones()
4862 devip->zsize = (sdeb_zbc_zone_size_mb * SZ_1M) in sdebug_device_create_zones()
4864 if (devip->zsize >= capacity) { in sdebug_device_create_zones()
4870 devip->zsize_shift = ilog2(devip->zsize); in sdebug_device_create_zones()
4871 devip->nr_zones = (capacity + devip->zsize - 1) >> devip->zsize_shift; in sdebug_device_create_zones()
4873 if (sdeb_zbc_nr_conv >= devip->nr_zones) { in sdebug_device_create_zones()
4877 devip->nr_conv_zones = sdeb_zbc_nr_conv; in sdebug_device_create_zones()
4879 if (devip->zmodel == BLK_ZONED_HM) { in sdebug_device_create_zones()
4881 if (sdeb_zbc_max_open >= devip->nr_zones - 1) in sdebug_device_create_zones()
4882 devip->max_open = (devip->nr_zones - 1) / 2; in sdebug_device_create_zones()
4884 devip->max_open = sdeb_zbc_max_open; in sdebug_device_create_zones()
4887 devip->zstate = kcalloc(devip->nr_zones, in sdebug_device_create_zones()
4889 if (!devip->zstate) in sdebug_device_create_zones()
4892 for (i = 0; i < devip->nr_zones; i++) { in sdebug_device_create_zones()
4893 zsp = &devip->zstate[i]; in sdebug_device_create_zones()
4897 if (i < devip->nr_conv_zones) { in sdebug_device_create_zones()
4902 if (devip->zmodel == BLK_ZONED_HM) in sdebug_device_create_zones()
4910 if (zsp->z_start + devip->zsize < capacity) in sdebug_device_create_zones()
4911 zsp->z_size = devip->zsize; in sdebug_device_create_zones()
4924 struct sdebug_dev_info *devip; in sdebug_device_create() local
4926 devip = kzalloc(sizeof(*devip), flags); in sdebug_device_create()
4927 if (devip) { in sdebug_device_create()
4929 uuid_gen(&devip->lu_name); in sdebug_device_create()
4932 devip->lu_name = shared_uuid; in sdebug_device_create()
4936 devip->lu_name = shared_uuid; in sdebug_device_create()
4939 devip->sdbg_host = sdbg_host; in sdebug_device_create()
4941 devip->zmodel = sdeb_zbc_model; in sdebug_device_create()
4942 if (sdebug_device_create_zones(devip)) { in sdebug_device_create()
4943 kfree(devip); in sdebug_device_create()
4947 devip->zmodel = BLK_ZONED_NONE; in sdebug_device_create()
4949 devip->sdbg_host = sdbg_host; in sdebug_device_create()
4950 devip->create_ts = ktime_get_boottime(); in sdebug_device_create()
4951 atomic_set(&devip->stopped, (sdeb_tur_ms_to_ready > 0 ? 2 : 0)); in sdebug_device_create()
4952 list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list); in sdebug_device_create()
4954 return devip; in sdebug_device_create()
4961 struct sdebug_dev_info *devip; in find_build_dev_info() local
4969 list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) { in find_build_dev_info()
4970 if ((devip->used) && (devip->channel == sdev->channel) && in find_build_dev_info()
4971 (devip->target == sdev->id) && in find_build_dev_info()
4972 (devip->lun == sdev->lun)) in find_build_dev_info()
4973 return devip; in find_build_dev_info()
4975 if ((!devip->used) && (!open_devip)) in find_build_dev_info()
4976 open_devip = devip; in find_build_dev_info()
5007 struct sdebug_dev_info *devip = in scsi_debug_slave_configure() local
5015 if (devip == NULL) { in scsi_debug_slave_configure()
5016 devip = find_build_dev_info(sdp); in scsi_debug_slave_configure()
5017 if (devip == NULL) in scsi_debug_slave_configure()
5020 sdp->hostdata = devip; in scsi_debug_slave_configure()
5029 struct sdebug_dev_info *devip = in scsi_debug_slave_destroy() local
5035 if (devip) { in scsi_debug_slave_destroy()
5037 devip->used = false; in scsi_debug_slave_destroy()
5062 struct sdebug_dev_info *devip; in stop_queued_cmnd() local
5077 devip = (struct sdebug_dev_info *) in stop_queued_cmnd()
5079 if (devip) in stop_queued_cmnd()
5080 atomic_dec(&devip->num_in_q); in stop_queued_cmnd()
5107 struct sdebug_dev_info *devip; in stop_all_queued() local
5117 devip = (struct sdebug_dev_info *) in stop_all_queued()
5119 if (devip) in stop_all_queued()
5120 atomic_dec(&devip->num_in_q); in stop_all_queued()
5174 struct sdebug_dev_info *devip = in scsi_debug_device_reset() local
5179 if (devip) in scsi_debug_device_reset()
5180 set_bit(SDEBUG_UA_POR, devip->uas_bm); in scsi_debug_device_reset()
5188 struct sdebug_dev_info *devip; in scsi_debug_target_reset() local
5206 list_for_each_entry(devip, in scsi_debug_target_reset()
5209 if (devip->target == sdp->id) { in scsi_debug_target_reset()
5210 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in scsi_debug_target_reset()
5224 struct sdebug_dev_info *devip; in scsi_debug_bus_reset() local
5239 list_for_each_entry(devip, in scsi_debug_bus_reset()
5242 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in scsi_debug_bus_reset()
5257 struct sdebug_dev_info *devip; in scsi_debug_host_reset() local
5265 list_for_each_entry(devip, &sdbg_host->dev_info_list, in scsi_debug_host_reset()
5267 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in scsi_debug_host_reset()
5379 static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip, in schedule_resp() argument
5396 if (unlikely(devip == NULL)) { in schedule_resp()
5412 num_in_q = atomic_read(&devip->num_in_q); in schedule_resp()
5451 atomic_inc(&devip->num_in_q); in schedule_resp()
5461 atomic_dec(&devip->num_in_q); in schedule_resp()
5478 cmnd->result = pfp ? pfp(cmnd, devip) : 0; in schedule_resp()
5521 atomic_dec(&devip->num_in_q); in schedule_resp()
5603 cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0; in schedule_resp()
7176 struct sdebug_dev_info *devip; in sdebug_change_qdepth() local
7179 devip = (struct sdebug_dev_info *)sdev->hostdata; in sdebug_change_qdepth()
7180 if (NULL == devip) { in sdebug_change_qdepth()
7184 num_in_q = atomic_read(&devip->num_in_q); in sdebug_change_qdepth()
7219 static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_not_ready() argument
7226 stopped_state = atomic_read(&devip->stopped); in resp_not_ready()
7228 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) { in resp_not_ready()
7229 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts)); in resp_not_ready()
7232 atomic_set(&devip->stopped, 0); in resp_not_ready()
7304 struct sdebug_dev_info *devip; in sdebug_blk_mq_poll() local
7336 devip = (struct sdebug_dev_info *)scp->device->hostdata; in sdebug_blk_mq_poll()
7337 if (likely(devip)) in sdebug_blk_mq_poll()
7338 atomic_dec(&devip->num_in_q); in sdebug_blk_mq_poll()
7383 struct sdebug_dev_info *devip; in scsi_debug_queuecommand() local
7428 devip = (struct sdebug_dev_info *)sdp->hostdata; in scsi_debug_queuecommand()
7429 if (unlikely(!devip)) { in scsi_debug_queuecommand()
7430 devip = find_build_dev_info(sdp); in scsi_debug_queuecommand()
7431 if (NULL == devip) in scsi_debug_queuecommand()
7495 find_first_bit(devip->uas_bm, in scsi_debug_queuecommand()
7497 errsts = make_ua(scp, devip); in scsi_debug_queuecommand()
7502 atomic_read(&devip->stopped))) { in scsi_debug_queuecommand()
7503 errsts = resp_not_ready(scp, devip); in scsi_debug_queuecommand()
7520 return schedule_resp(scp, devip, errsts, pfp, 0, 0); in scsi_debug_queuecommand()
7533 return schedule_resp(scp, devip, errsts, pfp, jdelay, 0); in scsi_debug_queuecommand()
7535 return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay, in scsi_debug_queuecommand()
7538 return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0); in scsi_debug_queuecommand()