Lines Matching refs:devip

1053 static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)  in clear_luns_changed_on_target()  argument
1061 if ((devip->sdbg_host == dp->sdbg_host) && in clear_luns_changed_on_target()
1062 (devip->target == dp->target)) in clear_luns_changed_on_target()
1069 static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in make_ua() argument
1073 k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS); in make_ua()
1126 clear_luns_changed_on_target(devip); in make_ua()
1139 clear_bit(k, devip->uas_bm); in make_ua()
1504 static int inquiry_vpd_b1(struct sdebug_dev_info *devip, unsigned char *arr) in inquiry_vpd_b1() argument
1511 if (devip->zmodel == BLK_ZONED_HA) in inquiry_vpd_b1()
1537 static int inquiry_vpd_b6(struct sdebug_dev_info *devip, unsigned char *arr) in inquiry_vpd_b6() argument
1549 if (sdeb_zbc_model == BLK_ZONED_HM && devip->max_open) in inquiry_vpd_b6()
1550 put_unaligned_be32(devip->max_open, &arr[12]); in inquiry_vpd_b6()
1559 static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_inquiry() argument
1572 is_zbc = (devip->zmodel != BLK_ZONED_NONE); in resp_inquiry()
1577 else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL)) in resp_inquiry()
1589 int host_no = devip->sdbg_host->shost->host_no; in resp_inquiry()
1592 (devip->channel & 0x7f); in resp_inquiry()
1596 (devip->target * 1000) + devip->lun); in resp_inquiry()
1598 (devip->target * 1000) - 3; in resp_inquiry()
1630 &devip->lu_name); in resp_inquiry()
1666 arr[3] = inquiry_vpd_b1(devip, &arr[4]); in resp_inquiry()
1672 arr[3] = inquiry_vpd_b6(devip, &arr[4]); in resp_inquiry()
1726 struct sdebug_dev_info *devip) in resp_requests() argument
1733 int stopped_state = atomic_read(&devip->stopped); in resp_requests()
1779 static int resp_start_stop(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_start_stop() argument
1791 stopped_state = atomic_read(&devip->stopped); in resp_start_stop()
1795 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) { in resp_start_stop()
1796 u64 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts)); in resp_start_stop()
1800 atomic_set(&devip->stopped, 0); in resp_start_stop()
1815 atomic_xchg(&devip->stopped, want_stop); in resp_start_stop()
1835 struct sdebug_dev_info *devip) in resp_readcap() argument
1854 struct sdebug_dev_info *devip) in resp_readcap16() argument
1893 struct sdebug_dev_info *devip) in resp_report_tgtpgs() argument
1897 int host_no = devip->sdbg_host->shost->host_no; in resp_report_tgtpgs()
1914 (devip->channel & 0x7f); in resp_report_tgtpgs()
1916 (devip->channel & 0x7f) + 0x80; in resp_report_tgtpgs()
1969 struct sdebug_dev_info *devip) in resp_rsup_opcodes() argument
2120 struct sdebug_dev_info *devip) in resp_rsup_tmfs() argument
2309 struct sdebug_dev_info *devip) in resp_mode_sense() argument
2327 is_zbc = (devip->zmodel != BLK_ZONED_NONE); in resp_mode_sense()
2338 target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) + in resp_mode_sense()
2339 (devip->target * 1000) - 3; in resp_mode_sense()
2475 struct sdebug_dev_info *devip) in resp_mode_select() argument
2552 set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm); in resp_mode_select()
2582 struct sdebug_dev_info *devip) in resp_log_sense() argument
2659 static inline bool sdebug_dev_is_zoned(struct sdebug_dev_info *devip) in sdebug_dev_is_zoned() argument
2661 return devip->nr_zones != 0; in sdebug_dev_is_zoned()
2664 static struct sdeb_zone_state *zbc_zone(struct sdebug_dev_info *devip, in zbc_zone() argument
2667 return &devip->zstate[lba >> devip->zsize_shift]; in zbc_zone()
2675 static void zbc_close_zone(struct sdebug_dev_info *devip, in zbc_close_zone() argument
2688 devip->nr_imp_open--; in zbc_close_zone()
2690 devip->nr_exp_open--; in zbc_close_zone()
2696 devip->nr_closed++; in zbc_close_zone()
2700 static void zbc_close_imp_open_zone(struct sdebug_dev_info *devip) in zbc_close_imp_open_zone() argument
2702 struct sdeb_zone_state *zsp = &devip->zstate[0]; in zbc_close_imp_open_zone()
2705 for (i = 0; i < devip->nr_zones; i++, zsp++) { in zbc_close_imp_open_zone()
2707 zbc_close_zone(devip, zsp); in zbc_close_imp_open_zone()
2713 static void zbc_open_zone(struct sdebug_dev_info *devip, in zbc_open_zone() argument
2728 zbc_close_zone(devip, zsp); in zbc_open_zone()
2729 else if (devip->max_open && in zbc_open_zone()
2730 devip->nr_imp_open + devip->nr_exp_open >= devip->max_open) in zbc_open_zone()
2731 zbc_close_imp_open_zone(devip); in zbc_open_zone()
2734 devip->nr_closed--; in zbc_open_zone()
2737 devip->nr_exp_open++; in zbc_open_zone()
2740 devip->nr_imp_open++; in zbc_open_zone()
2744 static void zbc_inc_wp(struct sdebug_dev_info *devip, in zbc_inc_wp() argument
2747 struct sdeb_zone_state *zsp = zbc_zone(devip, lba); in zbc_inc_wp()
2790 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata; in check_zbc_access_params() local
2791 struct sdeb_zone_state *zsp = zbc_zone(devip, lba); in check_zbc_access_params()
2792 struct sdeb_zone_state *zsp_end = zbc_zone(devip, lba + num - 1); in check_zbc_access_params()
2795 if (devip->zmodel == BLK_ZONED_HA) in check_zbc_access_params()
2845 if (devip->max_open && in check_zbc_access_params()
2846 devip->nr_exp_open >= devip->max_open) { in check_zbc_access_params()
2852 zbc_open_zone(devip, zsp, false); in check_zbc_access_params()
2863 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata; in check_device_access_params() local
2879 if (sdebug_dev_is_zoned(devip)) in check_device_access_params()
2891 static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip, in devip2sip() argument
2898 return xa_load(per_store_ap, devip->sdbg_host->si_idx); in devip2sip()
3107 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_read_dt0() argument
3114 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_read_dt0()
3410 static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_write_dt0() argument
3417 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_write_dt0()
3495 if (sdebug_dev_is_zoned(devip)) in resp_write_dt0()
3496 zbc_inc_wp(devip, lba, num); in resp_write_dt0()
3531 struct sdebug_dev_info *devip) in resp_write_scat() argument
3536 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_write_scat()
3650 if (sdebug_dev_is_zoned(devip)) in resp_write_scat()
3651 zbc_inc_wp(devip, lba, num); in resp_write_scat()
3697 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata; in resp_write_same() local
3748 if (sdebug_dev_is_zoned(devip)) in resp_write_same()
3749 zbc_inc_wp(devip, lba, num); in resp_write_same()
3757 struct sdebug_dev_info *devip) in resp_write_same_10() argument
3782 struct sdebug_dev_info *devip) in resp_write_same_16() argument
3813 struct sdebug_dev_info *devip) in resp_write_buffer() argument
3824 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in resp_write_buffer()
3825 set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm); in resp_write_buffer()
3828 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm); in resp_write_buffer()
3833 &devip->sdbg_host->dev_info_list, in resp_write_buffer()
3837 if (devip != dp) in resp_write_buffer()
3845 &devip->sdbg_host->dev_info_list, in resp_write_buffer()
3859 struct sdebug_dev_info *devip) in resp_comp_write() argument
3863 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_comp_write()
3926 static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_unmap() argument
3930 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_unmap()
3985 struct sdebug_dev_info *devip) in resp_get_lba_status() argument
4004 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_get_lba_status()
4027 struct sdebug_dev_info *devip) in resp_sync_cache() argument
4060 struct sdebug_dev_info *devip) in resp_pre_fetch() argument
4067 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_pre_fetch()
4113 struct sdebug_dev_info *devip) in resp_report_luns() argument
4129 clear_luns_changed_on_target(devip); in resp_report_luns()
4205 static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_verify() argument
4215 struct sdeb_store_info *sip = devip2sip(devip, true); in resp_verify()
4284 struct sdebug_dev_info *devip) in resp_report_zones() argument
4294 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_report_zones()
4297 if (!sdebug_dev_is_zoned(devip)) { in resp_report_zones()
4311 max_zones = devip->nr_zones - (zs_lba >> devip->zsize_shift); in resp_report_zones()
4326 lba = zs_lba + devip->zsize * i; in resp_report_zones()
4329 zsp = zbc_zone(devip, lba); in resp_report_zones()
4416 static void zbc_open_all(struct sdebug_dev_info *devip) in zbc_open_all() argument
4418 struct sdeb_zone_state *zsp = &devip->zstate[0]; in zbc_open_all()
4421 for (i = 0; i < devip->nr_zones; i++, zsp++) { in zbc_open_all()
4423 zbc_open_zone(devip, &devip->zstate[i], true); in zbc_open_all()
4427 static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_open_zone() argument
4435 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_open_zone()
4438 if (!sdebug_dev_is_zoned(devip)) { in resp_open_zone()
4447 if (devip->max_open && in resp_open_zone()
4448 devip->nr_exp_open + devip->nr_closed > devip->max_open) { in resp_open_zone()
4455 zbc_open_all(devip); in resp_open_zone()
4467 zsp = zbc_zone(devip, z_id); in resp_open_zone()
4483 if (devip->max_open && devip->nr_exp_open >= devip->max_open) { in resp_open_zone()
4490 zbc_open_zone(devip, zsp, true); in resp_open_zone()
4496 static void zbc_close_all(struct sdebug_dev_info *devip) in zbc_close_all() argument
4500 for (i = 0; i < devip->nr_zones; i++) in zbc_close_all()
4501 zbc_close_zone(devip, &devip->zstate[i]); in zbc_close_all()
4505 struct sdebug_dev_info *devip) in resp_close_zone() argument
4512 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_close_zone()
4515 if (!sdebug_dev_is_zoned(devip)) { in resp_close_zone()
4523 zbc_close_all(devip); in resp_close_zone()
4535 zsp = zbc_zone(devip, z_id); in resp_close_zone()
4547 zbc_close_zone(devip, zsp); in resp_close_zone()
4553 static void zbc_finish_zone(struct sdebug_dev_info *devip, in zbc_finish_zone() argument
4561 zbc_close_zone(devip, zsp); in zbc_finish_zone()
4563 devip->nr_closed--; in zbc_finish_zone()
4569 static void zbc_finish_all(struct sdebug_dev_info *devip) in zbc_finish_all() argument
4573 for (i = 0; i < devip->nr_zones; i++) in zbc_finish_all()
4574 zbc_finish_zone(devip, &devip->zstate[i], false); in zbc_finish_all()
4578 struct sdebug_dev_info *devip) in resp_finish_zone() argument
4585 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_finish_zone()
4588 if (!sdebug_dev_is_zoned(devip)) { in resp_finish_zone()
4596 zbc_finish_all(devip); in resp_finish_zone()
4608 zsp = zbc_zone(devip, z_id); in resp_finish_zone()
4620 zbc_finish_zone(devip, zsp, true); in resp_finish_zone()
4626 static void zbc_rwp_zone(struct sdebug_dev_info *devip, in zbc_rwp_zone() argument
4636 zbc_close_zone(devip, zsp); in zbc_rwp_zone()
4639 devip->nr_closed--; in zbc_rwp_zone()
4646 static void zbc_rwp_all(struct sdebug_dev_info *devip) in zbc_rwp_all() argument
4650 for (i = 0; i < devip->nr_zones; i++) in zbc_rwp_all()
4651 zbc_rwp_zone(devip, &devip->zstate[i]); in zbc_rwp_all()
4654 static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_rwp_zone() argument
4661 struct sdeb_store_info *sip = devip2sip(devip, false); in resp_rwp_zone()
4664 if (!sdebug_dev_is_zoned(devip)) { in resp_rwp_zone()
4672 zbc_rwp_all(devip); in resp_rwp_zone()
4683 zsp = zbc_zone(devip, z_id); in resp_rwp_zone()
4695 zbc_rwp_zone(devip, zsp); in resp_rwp_zone()
4730 struct sdebug_dev_info *devip; in sdebug_q_cmd_complete() local
4755 devip = (struct sdebug_dev_info *)scp->device->hostdata; in sdebug_q_cmd_complete()
4756 if (likely(devip)) in sdebug_q_cmd_complete()
4757 atomic_dec(&devip->num_in_q); in sdebug_q_cmd_complete()
4814 static int sdebug_device_create_zones(struct sdebug_dev_info *devip) in sdebug_device_create_zones() argument
4828 devip->zsize = (DEF_ZBC_ZONE_SIZE_MB * SZ_1M) in sdebug_device_create_zones()
4830 while (capacity < devip->zsize << 2 && devip->zsize >= 2) in sdebug_device_create_zones()
4831 devip->zsize >>= 1; in sdebug_device_create_zones()
4832 if (devip->zsize < 2) { in sdebug_device_create_zones()
4841 devip->zsize = (sdeb_zbc_zone_size_mb * SZ_1M) in sdebug_device_create_zones()
4843 if (devip->zsize >= capacity) { in sdebug_device_create_zones()
4849 devip->zsize_shift = ilog2(devip->zsize); in sdebug_device_create_zones()
4850 devip->nr_zones = (capacity + devip->zsize - 1) >> devip->zsize_shift; in sdebug_device_create_zones()
4852 if (sdeb_zbc_nr_conv >= devip->nr_zones) { in sdebug_device_create_zones()
4856 devip->nr_conv_zones = sdeb_zbc_nr_conv; in sdebug_device_create_zones()
4858 if (devip->zmodel == BLK_ZONED_HM) { in sdebug_device_create_zones()
4860 if (sdeb_zbc_max_open >= devip->nr_zones - 1) in sdebug_device_create_zones()
4861 devip->max_open = (devip->nr_zones - 1) / 2; in sdebug_device_create_zones()
4863 devip->max_open = sdeb_zbc_max_open; in sdebug_device_create_zones()
4866 devip->zstate = kcalloc(devip->nr_zones, in sdebug_device_create_zones()
4868 if (!devip->zstate) in sdebug_device_create_zones()
4871 for (i = 0; i < devip->nr_zones; i++) { in sdebug_device_create_zones()
4872 zsp = &devip->zstate[i]; in sdebug_device_create_zones()
4876 if (i < devip->nr_conv_zones) { in sdebug_device_create_zones()
4881 if (devip->zmodel == BLK_ZONED_HM) in sdebug_device_create_zones()
4889 if (zsp->z_start + devip->zsize < capacity) in sdebug_device_create_zones()
4890 zsp->z_size = devip->zsize; in sdebug_device_create_zones()
4903 struct sdebug_dev_info *devip; in sdebug_device_create() local
4905 devip = kzalloc(sizeof(*devip), flags); in sdebug_device_create()
4906 if (devip) { in sdebug_device_create()
4908 uuid_gen(&devip->lu_name); in sdebug_device_create()
4911 devip->lu_name = shared_uuid; in sdebug_device_create()
4915 devip->lu_name = shared_uuid; in sdebug_device_create()
4918 devip->sdbg_host = sdbg_host; in sdebug_device_create()
4920 devip->zmodel = sdeb_zbc_model; in sdebug_device_create()
4921 if (sdebug_device_create_zones(devip)) { in sdebug_device_create()
4922 kfree(devip); in sdebug_device_create()
4926 devip->zmodel = BLK_ZONED_NONE; in sdebug_device_create()
4928 devip->sdbg_host = sdbg_host; in sdebug_device_create()
4929 devip->create_ts = ktime_get_boottime(); in sdebug_device_create()
4930 atomic_set(&devip->stopped, (sdeb_tur_ms_to_ready > 0 ? 2 : 0)); in sdebug_device_create()
4931 list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list); in sdebug_device_create()
4933 return devip; in sdebug_device_create()
4940 struct sdebug_dev_info *devip; in find_build_dev_info() local
4948 list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) { in find_build_dev_info()
4949 if ((devip->used) && (devip->channel == sdev->channel) && in find_build_dev_info()
4950 (devip->target == sdev->id) && in find_build_dev_info()
4951 (devip->lun == sdev->lun)) in find_build_dev_info()
4952 return devip; in find_build_dev_info()
4954 if ((!devip->used) && (!open_devip)) in find_build_dev_info()
4955 open_devip = devip; in find_build_dev_info()
4986 struct sdebug_dev_info *devip = in scsi_debug_slave_configure() local
4994 if (devip == NULL) { in scsi_debug_slave_configure()
4995 devip = find_build_dev_info(sdp); in scsi_debug_slave_configure()
4996 if (devip == NULL) in scsi_debug_slave_configure()
4999 sdp->hostdata = devip; in scsi_debug_slave_configure()
5008 struct sdebug_dev_info *devip = in scsi_debug_slave_destroy() local
5014 if (devip) { in scsi_debug_slave_destroy()
5016 devip->used = false; in scsi_debug_slave_destroy()
5041 struct sdebug_dev_info *devip; in stop_queued_cmnd() local
5056 devip = (struct sdebug_dev_info *) in stop_queued_cmnd()
5058 if (devip) in stop_queued_cmnd()
5059 atomic_dec(&devip->num_in_q); in stop_queued_cmnd()
5086 struct sdebug_dev_info *devip; in stop_all_queued() local
5096 devip = (struct sdebug_dev_info *) in stop_all_queued()
5098 if (devip) in stop_all_queued()
5099 atomic_dec(&devip->num_in_q); in stop_all_queued()
5153 struct sdebug_dev_info *devip = in scsi_debug_device_reset() local
5158 if (devip) in scsi_debug_device_reset()
5159 set_bit(SDEBUG_UA_POR, devip->uas_bm); in scsi_debug_device_reset()
5167 struct sdebug_dev_info *devip; in scsi_debug_target_reset() local
5185 list_for_each_entry(devip, in scsi_debug_target_reset()
5188 if (devip->target == sdp->id) { in scsi_debug_target_reset()
5189 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in scsi_debug_target_reset()
5203 struct sdebug_dev_info *devip; in scsi_debug_bus_reset() local
5218 list_for_each_entry(devip, in scsi_debug_bus_reset()
5221 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in scsi_debug_bus_reset()
5236 struct sdebug_dev_info *devip; in scsi_debug_host_reset() local
5244 list_for_each_entry(devip, &sdbg_host->dev_info_list, in scsi_debug_host_reset()
5246 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm); in scsi_debug_host_reset()
5358 static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip, in schedule_resp() argument
5374 if (unlikely(devip == NULL)) { in schedule_resp()
5390 num_in_q = atomic_read(&devip->num_in_q); in schedule_resp()
5429 atomic_inc(&devip->num_in_q); in schedule_resp()
5438 atomic_dec(&devip->num_in_q); in schedule_resp()
5455 cmnd->result = pfp ? pfp(cmnd, devip) : 0; in schedule_resp()
5498 atomic_dec(&devip->num_in_q); in schedule_resp()
5553 cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0; in schedule_resp()
7121 struct sdebug_dev_info *devip; in sdebug_change_qdepth() local
7124 devip = (struct sdebug_dev_info *)sdev->hostdata; in sdebug_change_qdepth()
7125 if (NULL == devip) { in sdebug_change_qdepth()
7129 num_in_q = atomic_read(&devip->num_in_q); in sdebug_change_qdepth()
7161 static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip) in resp_not_ready() argument
7168 stopped_state = atomic_read(&devip->stopped); in resp_not_ready()
7170 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) { in resp_not_ready()
7171 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts)); in resp_not_ready()
7174 atomic_set(&devip->stopped, 0); in resp_not_ready()
7210 struct sdebug_dev_info *devip; in scsi_debug_queuecommand() local
7255 devip = (struct sdebug_dev_info *)sdp->hostdata; in scsi_debug_queuecommand()
7256 if (unlikely(!devip)) { in scsi_debug_queuecommand()
7257 devip = find_build_dev_info(sdp); in scsi_debug_queuecommand()
7258 if (NULL == devip) in scsi_debug_queuecommand()
7322 find_first_bit(devip->uas_bm, in scsi_debug_queuecommand()
7324 errsts = make_ua(scp, devip); in scsi_debug_queuecommand()
7329 atomic_read(&devip->stopped))) { in scsi_debug_queuecommand()
7330 errsts = resp_not_ready(scp, devip); in scsi_debug_queuecommand()
7347 return schedule_resp(scp, devip, errsts, pfp, 0, 0); in scsi_debug_queuecommand()
7360 return schedule_resp(scp, devip, errsts, pfp, jdelay, 0); in scsi_debug_queuecommand()
7362 return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay, in scsi_debug_queuecommand()
7365 return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0); in scsi_debug_queuecommand()