Lines Matching refs:devip
1055 static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
1057 struct sdebug_host_info *sdhp = devip->sdbg_host;
1061 if ((devip->sdbg_host == dp->sdbg_host) &&
1062 (devip->target == dp->target)) {
1068 static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1072 k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
1131 clear_luns_changed_on_target(devip);
1144 clear_bit(k, devip->uas_bm);
1507 static int inquiry_vpd_b1(struct sdebug_dev_info *devip, unsigned char *arr)
1514 if (devip->zmodel == BLK_ZONED_HA)
1540 static int inquiry_vpd_b6(struct sdebug_dev_info *devip, unsigned char *arr)
1552 if (sdeb_zbc_model == BLK_ZONED_HM && devip->max_open)
1553 put_unaligned_be32(devip->max_open, &arr[12]);
1556 if (devip->zcap < devip->zsize) {
1558 put_unaligned_be64(devip->zsize, &arr[20]);
1568 static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1582 is_zbc = (devip->zmodel != BLK_ZONED_NONE);
1587 else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL))
1600 int host_no = devip->sdbg_host->shost->host_no;
1603 (devip->channel & 0x7f);
1607 (devip->target * 1000) + devip->lun);
1609 (devip->target * 1000) - 3;
1641 &devip->lu_name);
1677 arr[3] = inquiry_vpd_b1(devip, &arr[4]);
1683 arr[3] = inquiry_vpd_b6(devip, &arr[4]);
1737 struct sdebug_dev_info *devip)
1744 int stopped_state = atomic_read(&devip->stopped);
1790 static int resp_start_stop(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1802 stopped_state = atomic_read(&devip->stopped);
1806 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
1807 u64 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
1811 atomic_set(&devip->stopped, 0);
1826 atomic_xchg(&devip->stopped, want_stop);
1846 struct sdebug_dev_info *devip)
1865 struct sdebug_dev_info *devip)
1894 if (devip->zmodel == BLK_ZONED_HM)
1911 struct sdebug_dev_info *devip)
1915 int host_no = devip->sdbg_host->shost->host_no;
1933 (devip->channel & 0x7f);
1935 (devip->channel & 0x7f) + 0x80;
1988 struct sdebug_dev_info *devip)
2139 struct sdebug_dev_info *devip)
2328 struct sdebug_dev_info *devip)
2347 is_zbc = (devip->zmodel != BLK_ZONED_NONE);
2358 target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2359 (devip->target * 1000) - 3;
2495 struct sdebug_dev_info *devip)
2572 set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2614 struct sdebug_dev_info *devip)
2713 static inline bool sdebug_dev_is_zoned(struct sdebug_dev_info *devip)
2715 return devip->nr_zones != 0;
2718 static struct sdeb_zone_state *zbc_zone(struct sdebug_dev_info *devip,
2721 u32 zno = lba >> devip->zsize_shift;
2724 if (devip->zcap == devip->zsize || zno < devip->nr_conv_zones)
2725 return &devip->zstate[zno];
2731 zno = 2 * zno - devip->nr_conv_zones;
2732 WARN_ONCE(zno >= devip->nr_zones, "%u > %u\n", zno, devip->nr_zones);
2733 zsp = &devip->zstate[zno];
2755 static void zbc_close_zone(struct sdebug_dev_info *devip,
2768 devip->nr_imp_open--;
2770 devip->nr_exp_open--;
2776 devip->nr_closed++;
2780 static void zbc_close_imp_open_zone(struct sdebug_dev_info *devip)
2782 struct sdeb_zone_state *zsp = &devip->zstate[0];
2785 for (i = 0; i < devip->nr_zones; i++, zsp++) {
2787 zbc_close_zone(devip, zsp);
2793 static void zbc_open_zone(struct sdebug_dev_info *devip,
2808 zbc_close_zone(devip, zsp);
2809 else if (devip->max_open &&
2810 devip->nr_imp_open + devip->nr_exp_open >= devip->max_open)
2811 zbc_close_imp_open_zone(devip);
2814 devip->nr_closed--;
2817 devip->nr_exp_open++;
2820 devip->nr_imp_open++;
2824 static inline void zbc_set_zone_full(struct sdebug_dev_info *devip,
2829 devip->nr_imp_open--;
2832 devip->nr_exp_open--;
2842 static void zbc_inc_wp(struct sdebug_dev_info *devip,
2845 struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
2854 zbc_set_zone_full(devip, zsp);
2873 zbc_set_zone_full(devip, zsp);
2888 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
2889 struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
2890 struct sdeb_zone_state *zsp_end = zbc_zone(devip, lba + num - 1);
2893 if (devip->zmodel == BLK_ZONED_HA)
2948 if (devip->max_open &&
2949 devip->nr_exp_open >= devip->max_open) {
2955 zbc_open_zone(devip, zsp, false);
2966 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
2982 if (sdebug_dev_is_zoned(devip))
2994 static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip,
3001 return xa_load(per_store_ap, devip->sdbg_host->si_idx);
3282 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3289 struct sdeb_store_info *sip = devip2sip(devip, true);
3579 static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3586 struct sdeb_store_info *sip = devip2sip(devip, true);
3680 if (sdebug_dev_is_zoned(devip))
3681 zbc_inc_wp(devip, lba, num);
3716 struct sdebug_dev_info *devip)
3721 struct sdeb_store_info *sip = devip2sip(devip, true);
3834 if (sdebug_dev_is_zoned(devip))
3835 zbc_inc_wp(devip, lba, num);
3881 struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
3931 if (sdebug_dev_is_zoned(devip))
3932 zbc_inc_wp(devip, lba, num);
3940 struct sdebug_dev_info *devip)
3965 struct sdebug_dev_info *devip)
3996 struct sdebug_dev_info *devip)
4007 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
4008 set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
4011 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
4016 &devip->sdbg_host->dev_info_list,
4020 if (devip != dp)
4028 &devip->sdbg_host->dev_info_list,
4042 struct sdebug_dev_info *devip)
4046 struct sdeb_store_info *sip = devip2sip(devip, true);
4108 static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4112 struct sdeb_store_info *sip = devip2sip(devip, true);
4166 struct sdebug_dev_info *devip)
4185 struct sdeb_store_info *sip = devip2sip(devip, true);
4208 struct sdebug_dev_info *devip)
4241 struct sdebug_dev_info *devip)
4248 struct sdeb_store_info *sip = devip2sip(devip, true);
4293 struct sdebug_dev_info *devip)
4309 clear_luns_changed_on_target(devip);
4385 static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4395 struct sdeb_store_info *sip = devip2sip(devip, true);
4465 struct sdebug_dev_info *devip)
4475 struct sdeb_store_info *sip = devip2sip(devip, false);
4477 if (!sdebug_dev_is_zoned(devip)) {
4507 if (WARN_ONCE(zbc_zone(devip, lba) == zsp, "lba = %llu\n", lba))
4509 zsp = zbc_zone(devip, lba);
4593 if (devip->zcap < devip->zsize)
4594 put_unaligned_be64(devip->zsize, arr + 16);
4606 static void zbc_open_all(struct sdebug_dev_info *devip)
4608 struct sdeb_zone_state *zsp = &devip->zstate[0];
4611 for (i = 0; i < devip->nr_zones; i++, zsp++) {
4613 zbc_open_zone(devip, &devip->zstate[i], true);
4617 static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4625 struct sdeb_store_info *sip = devip2sip(devip, false);
4627 if (!sdebug_dev_is_zoned(devip)) {
4636 if (devip->max_open &&
4637 devip->nr_exp_open + devip->nr_closed > devip->max_open) {
4644 zbc_open_all(devip);
4656 zsp = zbc_zone(devip, z_id);
4672 if (devip->max_open && devip->nr_exp_open >= devip->max_open) {
4679 zbc_open_zone(devip, zsp, true);
4685 static void zbc_close_all(struct sdebug_dev_info *devip)
4689 for (i = 0; i < devip->nr_zones; i++)
4690 zbc_close_zone(devip, &devip->zstate[i]);
4694 struct sdebug_dev_info *devip)
4701 struct sdeb_store_info *sip = devip2sip(devip, false);
4703 if (!sdebug_dev_is_zoned(devip)) {
4711 zbc_close_all(devip);
4723 zsp = zbc_zone(devip, z_id);
4735 zbc_close_zone(devip, zsp);
4741 static void zbc_finish_zone(struct sdebug_dev_info *devip,
4749 zbc_close_zone(devip, zsp);
4751 devip->nr_closed--;
4757 static void zbc_finish_all(struct sdebug_dev_info *devip)
4761 for (i = 0; i < devip->nr_zones; i++)
4762 zbc_finish_zone(devip, &devip->zstate[i], false);
4766 struct sdebug_dev_info *devip)
4773 struct sdeb_store_info *sip = devip2sip(devip, false);
4775 if (!sdebug_dev_is_zoned(devip)) {
4783 zbc_finish_all(devip);
4795 zsp = zbc_zone(devip, z_id);
4807 zbc_finish_zone(devip, zsp, true);
4813 static void zbc_rwp_zone(struct sdebug_dev_info *devip,
4817 struct sdeb_store_info *sip = devip2sip(devip, false);
4824 zbc_close_zone(devip, zsp);
4827 devip->nr_closed--;
4838 static void zbc_rwp_all(struct sdebug_dev_info *devip)
4842 for (i = 0; i < devip->nr_zones; i++)
4843 zbc_rwp_zone(devip, &devip->zstate[i]);
4846 static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4853 struct sdeb_store_info *sip = devip2sip(devip, false);
4855 if (!sdebug_dev_is_zoned(devip)) {
4863 zbc_rwp_all(devip);
4874 zsp = zbc_zone(devip, z_id);
4886 zbc_rwp_zone(devip, zsp);
4957 static int sdebug_device_create_zones(struct sdebug_dev_info *devip)
4972 devip->zsize = (DEF_ZBC_ZONE_SIZE_MB * SZ_1M)
4974 while (capacity < devip->zsize << 2 && devip->zsize >= 2)
4975 devip->zsize >>= 1;
4976 if (devip->zsize < 2) {
4985 devip->zsize = (sdeb_zbc_zone_size_mb * SZ_1M)
4987 if (devip->zsize >= capacity) {
4993 devip->zsize_shift = ilog2(devip->zsize);
4994 devip->nr_zones = (capacity + devip->zsize - 1) >> devip->zsize_shift;
4997 devip->zcap = devip->zsize;
4999 devip->zcap = (sdeb_zbc_zone_cap_mb * SZ_1M) >>
5001 if (devip->zcap > devip->zsize) {
5007 conv_capacity = (sector_t)sdeb_zbc_nr_conv << devip->zsize_shift;
5012 devip->nr_conv_zones = sdeb_zbc_nr_conv;
5013 devip->nr_seq_zones = ALIGN(capacity - conv_capacity, devip->zsize) >>
5014 devip->zsize_shift;
5015 devip->nr_zones = devip->nr_conv_zones + devip->nr_seq_zones;
5018 if (devip->zcap < devip->zsize)
5019 devip->nr_zones += devip->nr_seq_zones;
5021 if (devip->zmodel == BLK_ZONED_HM) {
5023 if (sdeb_zbc_max_open >= devip->nr_zones - 1)
5024 devip->max_open = (devip->nr_zones - 1) / 2;
5026 devip->max_open = sdeb_zbc_max_open;
5029 devip->zstate = kcalloc(devip->nr_zones,
5031 if (!devip->zstate)
5034 for (i = 0; i < devip->nr_zones; i++) {
5035 zsp = &devip->zstate[i];
5039 if (i < devip->nr_conv_zones) {
5044 min_t(u64, devip->zsize, capacity - zstart);
5045 } else if ((zstart & (devip->zsize - 1)) == 0) {
5046 if (devip->zmodel == BLK_ZONED_HM)
5053 min_t(u64, devip->zcap, capacity - zstart);
5058 zsp->z_size = min_t(u64, devip->zsize - devip->zcap,
5072 struct sdebug_dev_info *devip;
5074 devip = kzalloc(sizeof(*devip), flags);
5075 if (devip) {
5077 uuid_gen(&devip->lu_name);
5080 devip->lu_name = shared_uuid;
5084 devip->lu_name = shared_uuid;
5087 devip->sdbg_host = sdbg_host;
5089 devip->zmodel = sdeb_zbc_model;
5090 if (sdebug_device_create_zones(devip)) {
5091 kfree(devip);
5095 devip->zmodel = BLK_ZONED_NONE;
5097 devip->create_ts = ktime_get_boottime();
5098 atomic_set(&devip->stopped, (sdeb_tur_ms_to_ready > 0 ? 2 : 0));
5099 list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
5101 return devip;
5108 struct sdebug_dev_info *devip;
5112 list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5113 if ((devip->used) && (devip->channel == sdev->channel) &&
5114 (devip->target == sdev->id) &&
5115 (devip->lun == sdev->lun))
5116 return devip;
5118 if ((!devip->used) && (!open_devip))
5119 open_devip = devip;
5149 struct sdebug_dev_info *devip =
5157 if (devip == NULL) {
5158 devip = find_build_dev_info(sdp);
5159 if (devip == NULL)
5162 sdp->hostdata = devip;
5171 struct sdebug_dev_info *devip =
5177 if (devip) {
5179 devip->used = false;
5312 struct sdebug_dev_info *devip = sdp->hostdata;
5320 if (devip)
5321 set_bit(SDEBUG_UA_POR, devip->uas_bm);
5330 struct sdebug_dev_info *devip;
5337 list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5338 if (devip->target == sdp->id) {
5339 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5355 struct sdebug_dev_info *devip;
5363 list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5364 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5377 struct sdebug_dev_info *devip;
5385 list_for_each_entry(devip, &sdbg_host->dev_info_list,
5387 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5536 static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
5551 if (unlikely(devip == NULL)) {
5590 cmnd->result = pfp ? pfp(cmnd, devip) : 0;
5691 cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
7304 struct sdebug_dev_info *devip = sdev->hostdata;
7306 if (!devip)
7346 static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
7353 stopped_state = atomic_read(&devip->stopped);
7355 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
7356 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
7359 atomic_set(&devip->stopped, 0);
7506 struct sdebug_dev_info *devip;
7551 devip = (struct sdebug_dev_info *)sdp->hostdata;
7552 if (unlikely(!devip)) {
7553 devip = find_build_dev_info(sdp);
7554 if (NULL == devip)
7618 find_first_bit(devip->uas_bm,
7620 errsts = make_ua(scp, devip);
7625 atomic_read(&devip->stopped))) {
7626 errsts = resp_not_ready(scp, devip);
7643 return schedule_resp(scp, devip, errsts, pfp, 0, 0);
7656 return schedule_resp(scp, devip, errsts, pfp, jdelay, 0);
7658 return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay,
7661 return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0);