Lines Matching refs:devip
1053 static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
1061 if ((devip->sdbg_host == dp->sdbg_host) &&
1062 (devip->target == dp->target))
1069 static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1073 k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
1126 clear_luns_changed_on_target(devip);
1139 clear_bit(k, devip->uas_bm);
1504 static int inquiry_vpd_b1(struct sdebug_dev_info *devip, unsigned char *arr)
1511 if (devip->zmodel == BLK_ZONED_HA)
1537 static int inquiry_vpd_b6(struct sdebug_dev_info *devip, unsigned char *arr)
1549 if (sdeb_zbc_model == BLK_ZONED_HM && devip->max_open)
1550 put_unaligned_be32(devip->max_open, &arr[12]);
1559 static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1573 is_zbc = (devip->zmodel != BLK_ZONED_NONE);
1578 else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL))
1591 int host_no = devip->sdbg_host->shost->host_no;
1594 (devip->channel & 0x7f);
1598 (devip->target * 1000) + devip->lun);
1600 (devip->target * 1000) - 3;
1632 &devip->lu_name);
1668 arr[3] = inquiry_vpd_b1(devip, &arr[4]);
1674 arr[3] = inquiry_vpd_b6(devip, &arr[4]);
1728 struct sdebug_dev_info *devip)
1735 int stopped_state = atomic_read(&devip->stopped);
1781 static int resp_start_stop(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1793 stopped_state = atomic_read(&devip->stopped);
1797 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
1798 u64 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
1802 atomic_set(&devip->stopped, 0);
1817 atomic_xchg(&devip->stopped, want_stop);
1837 struct sdebug_dev_info *devip)
1856 struct sdebug_dev_info *devip)
1885 if (devip->zmodel == BLK_ZONED_HM)
1902 struct sdebug_dev_info *devip)
1906 int host_no = devip->sdbg_host->shost->host_no;
1924 (devip->channel & 0x7f);
1926 (devip->channel & 0x7f) + 0x80;
1979 struct sdebug_dev_info *devip)
2130 struct sdebug_dev_info *devip)
2319 struct sdebug_dev_info *devip)
2338 is_zbc = (devip->zmodel != BLK_ZONED_NONE);
2349 target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2350 (devip->target * 1000) - 3;
2486 struct sdebug_dev_info *devip)
2563 set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2593 struct sdebug_dev_info *devip)
2671 static inline bool sdebug_dev_is_zoned(struct sdebug_dev_info *devip)
2673 return devip->nr_zones != 0;
2676 static struct sdeb_zone_state *zbc_zone(struct sdebug_dev_info *devip,
2679 return &devip->zstate[lba >> devip->zsize_shift];
2687 static void zbc_close_zone(struct sdebug_dev_info *devip,
2700 devip->nr_imp_open--;
2702 devip->nr_exp_open--;
2708 devip->nr_closed++;
2712 static void zbc_close_imp_open_zone(struct sdebug_dev_info *devip)
2714 struct sdeb_zone_state *zsp = &devip->zstate[0];
2717 for (i = 0; i < devip->nr_zones; i++, zsp++) {
2719 zbc_close_zone(devip, zsp);
2725 static void zbc_open_zone(struct sdebug_dev_info *devip,
2740 zbc_close_zone(devip, zsp);
2741 else if (devip->max_open &&
2742 devip->nr_imp_open + devip->nr_exp_open >= devip->max_open)
2743 zbc_close_imp_open_zone(devip);
2746 devip->nr_closed--;
2749 devip->nr_exp_open++;
2752 devip->nr_imp_open++;
2756 static inline void zbc_set_zone_full(struct sdebug_dev_info *devip,
2761 devip->nr_imp_open--;
2764 devip->nr_exp_open--;
2774 static void zbc_inc_wp(struct sdebug_dev_info *devip,
2777 struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
2786 zbc_set_zone_full(devip, zsp);
2805 zbc_set_zone_full(devip, zsp);
2820 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
2821 struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
2822 struct sdeb_zone_state *zsp_end = zbc_zone(devip, lba + num - 1);
2825 if (devip->zmodel == BLK_ZONED_HA)
2875 if (devip->max_open &&
2876 devip->nr_exp_open >= devip->max_open) {
2882 zbc_open_zone(devip, zsp, false);
2893 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
2909 if (sdebug_dev_is_zoned(devip))
2921 static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip,
2928 return xa_load(per_store_ap, devip->sdbg_host->si_idx);
3137 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3144 struct sdeb_store_info *sip = devip2sip(devip, true);
3440 static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3447 struct sdeb_store_info *sip = devip2sip(devip, true);
3525 if (sdebug_dev_is_zoned(devip))
3526 zbc_inc_wp(devip, lba, num);
3561 struct sdebug_dev_info *devip)
3566 struct sdeb_store_info *sip = devip2sip(devip, true);
3680 if (sdebug_dev_is_zoned(devip))
3681 zbc_inc_wp(devip, lba, num);
3727 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
3778 if (sdebug_dev_is_zoned(devip))
3779 zbc_inc_wp(devip, lba, num);
3787 struct sdebug_dev_info *devip)
3812 struct sdebug_dev_info *devip)
3843 struct sdebug_dev_info *devip)
3854 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3855 set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
3858 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
3863 &devip->sdbg_host->dev_info_list,
3867 if (devip != dp)
3875 &devip->sdbg_host->dev_info_list,
3889 struct sdebug_dev_info *devip)
3893 struct sdeb_store_info *sip = devip2sip(devip, true);
3956 static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3960 struct sdeb_store_info *sip = devip2sip(devip, true);
4015 struct sdebug_dev_info *devip)
4034 struct sdeb_store_info *sip = devip2sip(devip, true);
4057 struct sdebug_dev_info *devip)
4090 struct sdebug_dev_info *devip)
4097 struct sdeb_store_info *sip = devip2sip(devip, true);
4143 struct sdebug_dev_info *devip)
4159 clear_luns_changed_on_target(devip);
4235 static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4245 struct sdeb_store_info *sip = devip2sip(devip, true);
4316 struct sdebug_dev_info *devip)
4326 struct sdeb_store_info *sip = devip2sip(devip, false);
4329 if (!sdebug_dev_is_zoned(devip)) {
4345 max_zones = devip->nr_zones - (zs_lba >> devip->zsize_shift);
4360 lba = zs_lba + devip->zsize * i;
4363 zsp = zbc_zone(devip, lba);
4450 static void zbc_open_all(struct sdebug_dev_info *devip)
4452 struct sdeb_zone_state *zsp = &devip->zstate[0];
4455 for (i = 0; i < devip->nr_zones; i++, zsp++) {
4457 zbc_open_zone(devip, &devip->zstate[i], true);
4461 static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4469 struct sdeb_store_info *sip = devip2sip(devip, false);
4472 if (!sdebug_dev_is_zoned(devip)) {
4481 if (devip->max_open &&
4482 devip->nr_exp_open + devip->nr_closed > devip->max_open) {
4489 zbc_open_all(devip);
4501 zsp = zbc_zone(devip, z_id);
4517 if (devip->max_open && devip->nr_exp_open >= devip->max_open) {
4524 zbc_open_zone(devip, zsp, true);
4530 static void zbc_close_all(struct sdebug_dev_info *devip)
4534 for (i = 0; i < devip->nr_zones; i++)
4535 zbc_close_zone(devip, &devip->zstate[i]);
4539 struct sdebug_dev_info *devip)
4546 struct sdeb_store_info *sip = devip2sip(devip, false);
4549 if (!sdebug_dev_is_zoned(devip)) {
4557 zbc_close_all(devip);
4569 zsp = zbc_zone(devip, z_id);
4581 zbc_close_zone(devip, zsp);
4587 static void zbc_finish_zone(struct sdebug_dev_info *devip,
4595 zbc_close_zone(devip, zsp);
4597 devip->nr_closed--;
4603 static void zbc_finish_all(struct sdebug_dev_info *devip)
4607 for (i = 0; i < devip->nr_zones; i++)
4608 zbc_finish_zone(devip, &devip->zstate[i], false);
4612 struct sdebug_dev_info *devip)
4619 struct sdeb_store_info *sip = devip2sip(devip, false);
4622 if (!sdebug_dev_is_zoned(devip)) {
4630 zbc_finish_all(devip);
4642 zsp = zbc_zone(devip, z_id);
4654 zbc_finish_zone(devip, zsp, true);
4660 static void zbc_rwp_zone(struct sdebug_dev_info *devip,
4664 struct sdeb_store_info *sip = devip2sip(devip, false);
4671 zbc_close_zone(devip, zsp);
4674 devip->nr_closed--;
4685 static void zbc_rwp_all(struct sdebug_dev_info *devip)
4689 for (i = 0; i < devip->nr_zones; i++)
4690 zbc_rwp_zone(devip, &devip->zstate[i]);
4693 static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4700 struct sdeb_store_info *sip = devip2sip(devip, false);
4703 if (!sdebug_dev_is_zoned(devip)) {
4711 zbc_rwp_all(devip);
4722 zsp = zbc_zone(devip, z_id);
4734 zbc_rwp_zone(devip, zsp);
4769 struct sdebug_dev_info *devip;
4794 devip = (struct sdebug_dev_info *)scp->device->hostdata;
4795 if (likely(devip))
4796 atomic_dec(&devip->num_in_q);
4798 pr_err("devip=NULL\n");
4853 static int sdebug_device_create_zones(struct sdebug_dev_info *devip)
4867 devip->zsize = (DEF_ZBC_ZONE_SIZE_MB * SZ_1M)
4869 while (capacity < devip->zsize << 2 && devip->zsize >= 2)
4870 devip->zsize >>= 1;
4871 if (devip->zsize < 2) {
4880 devip->zsize = (sdeb_zbc_zone_size_mb * SZ_1M)
4882 if (devip->zsize >= capacity) {
4888 devip->zsize_shift = ilog2(devip->zsize);
4889 devip->nr_zones = (capacity + devip->zsize - 1) >> devip->zsize_shift;
4891 if (sdeb_zbc_nr_conv >= devip->nr_zones) {
4895 devip->nr_conv_zones = sdeb_zbc_nr_conv;
4897 if (devip->zmodel == BLK_ZONED_HM) {
4899 if (sdeb_zbc_max_open >= devip->nr_zones - 1)
4900 devip->max_open = (devip->nr_zones - 1) / 2;
4902 devip->max_open = sdeb_zbc_max_open;
4905 devip->zstate = kcalloc(devip->nr_zones,
4907 if (!devip->zstate)
4910 for (i = 0; i < devip->nr_zones; i++) {
4911 zsp = &devip->zstate[i];
4915 if (i < devip->nr_conv_zones) {
4920 if (devip->zmodel == BLK_ZONED_HM)
4928 if (zsp->z_start + devip->zsize < capacity)
4929 zsp->z_size = devip->zsize;
4942 struct sdebug_dev_info *devip;
4944 devip = kzalloc(sizeof(*devip), flags);
4945 if (devip) {
4947 uuid_gen(&devip->lu_name);
4950 devip->lu_name = shared_uuid;
4954 devip->lu_name = shared_uuid;
4957 devip->sdbg_host = sdbg_host;
4959 devip->zmodel = sdeb_zbc_model;
4960 if (sdebug_device_create_zones(devip)) {
4961 kfree(devip);
4965 devip->zmodel = BLK_ZONED_NONE;
4967 devip->sdbg_host = sdbg_host;
4968 devip->create_ts = ktime_get_boottime();
4969 atomic_set(&devip->stopped, (sdeb_tur_ms_to_ready > 0 ? 2 : 0));
4970 list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
4972 return devip;
4979 struct sdebug_dev_info *devip;
4987 list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
4988 if ((devip->used) && (devip->channel == sdev->channel) &&
4989 (devip->target == sdev->id) &&
4990 (devip->lun == sdev->lun))
4991 return devip;
4993 if ((!devip->used) && (!open_devip))
4994 open_devip = devip;
5025 struct sdebug_dev_info *devip =
5033 if (devip == NULL) {
5034 devip = find_build_dev_info(sdp);
5035 if (devip == NULL)
5038 sdp->hostdata = devip;
5047 struct sdebug_dev_info *devip =
5053 if (devip) {
5055 devip->used = false;
5080 struct sdebug_dev_info *devip;
5095 devip = (struct sdebug_dev_info *)
5097 if (devip)
5098 atomic_dec(&devip->num_in_q);
5125 struct sdebug_dev_info *devip;
5135 devip = (struct sdebug_dev_info *)
5137 if (devip)
5138 atomic_dec(&devip->num_in_q);
5192 struct sdebug_dev_info *devip =
5197 if (devip)
5198 set_bit(SDEBUG_UA_POR, devip->uas_bm);
5206 struct sdebug_dev_info *devip;
5224 list_for_each_entry(devip,
5227 if (devip->target == sdp->id) {
5228 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5242 struct sdebug_dev_info *devip;
5257 list_for_each_entry(devip,
5260 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5275 struct sdebug_dev_info *devip;
5283 list_for_each_entry(devip, &sdbg_host->dev_info_list,
5285 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5397 static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
5413 if (unlikely(devip == NULL)) {
5429 num_in_q = atomic_read(&devip->num_in_q);
5468 atomic_inc(&devip->num_in_q);
5477 atomic_dec(&devip->num_in_q);
5494 cmnd->result = pfp ? pfp(cmnd, devip) : 0;
5537 atomic_dec(&devip->num_in_q);
5592 cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
7169 struct sdebug_dev_info *devip;
7172 devip = (struct sdebug_dev_info *)sdev->hostdata;
7173 if (NULL == devip) {
7177 num_in_q = atomic_read(&devip->num_in_q);
7209 static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
7216 stopped_state = atomic_read(&devip->stopped);
7218 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
7219 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
7222 atomic_set(&devip->stopped, 0);
7258 struct sdebug_dev_info *devip;
7303 devip = (struct sdebug_dev_info *)sdp->hostdata;
7304 if (unlikely(!devip)) {
7305 devip = find_build_dev_info(sdp);
7306 if (NULL == devip)
7370 find_first_bit(devip->uas_bm,
7372 errsts = make_ua(scp, devip);
7377 atomic_read(&devip->stopped))) {
7378 errsts = resp_not_ready(scp, devip);
7395 return schedule_resp(scp, devip, errsts, pfp, 0, 0);
7408 return schedule_resp(scp, devip, errsts, pfp, jdelay, 0);
7410 return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay,
7413 return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0);