Merge branch '6.2/scsi-queue' into 6.2/scsi-fixes
[platform/kernel/linux-starfive.git] / drivers / scsi / scsi_debug.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
4  *  Copyright (C) 1992  Eric Youngdale
5  *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
6  *  to make sure that we are not getting blocks mixed up, and PANIC if
7  *  anything out of the ordinary is seen.
8  * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9  *
10  * Copyright (C) 2001 - 2021 Douglas Gilbert
11  *
12  *  For documentation see http://sg.danny.cz/sg/scsi_debug.html
13  */
14
15
16 #define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
17
18 #include <linux/module.h>
19 #include <linux/align.h>
20 #include <linux/kernel.h>
21 #include <linux/errno.h>
22 #include <linux/jiffies.h>
23 #include <linux/slab.h>
24 #include <linux/types.h>
25 #include <linux/string.h>
26 #include <linux/fs.h>
27 #include <linux/init.h>
28 #include <linux/proc_fs.h>
29 #include <linux/vmalloc.h>
30 #include <linux/moduleparam.h>
31 #include <linux/scatterlist.h>
32 #include <linux/blkdev.h>
33 #include <linux/crc-t10dif.h>
34 #include <linux/spinlock.h>
35 #include <linux/interrupt.h>
36 #include <linux/atomic.h>
37 #include <linux/hrtimer.h>
38 #include <linux/uuid.h>
39 #include <linux/t10-pi.h>
40 #include <linux/msdos_partition.h>
41 #include <linux/random.h>
42 #include <linux/xarray.h>
43 #include <linux/prefetch.h>
44
45 #include <net/checksum.h>
46
47 #include <asm/unaligned.h>
48
49 #include <scsi/scsi.h>
50 #include <scsi/scsi_cmnd.h>
51 #include <scsi/scsi_device.h>
52 #include <scsi/scsi_host.h>
53 #include <scsi/scsicam.h>
54 #include <scsi/scsi_eh.h>
55 #include <scsi/scsi_tcq.h>
56 #include <scsi/scsi_dbg.h>
57
58 #include "sd.h"
59 #include "scsi_logging.h"
60
61 /* make sure inq_product_rev string corresponds to this version */
62 #define SDEBUG_VERSION "0191"   /* format to fit INQUIRY revision field */
63 static const char *sdebug_version_date = "20210520";
64
65 #define MY_NAME "scsi_debug"
66
67 /* Additional Sense Code (ASC) */
68 #define NO_ADDITIONAL_SENSE 0x0
69 #define LOGICAL_UNIT_NOT_READY 0x4
70 #define LOGICAL_UNIT_COMMUNICATION_FAILURE 0x8
71 #define UNRECOVERED_READ_ERR 0x11
72 #define PARAMETER_LIST_LENGTH_ERR 0x1a
73 #define INVALID_OPCODE 0x20
74 #define LBA_OUT_OF_RANGE 0x21
75 #define INVALID_FIELD_IN_CDB 0x24
76 #define INVALID_FIELD_IN_PARAM_LIST 0x26
77 #define WRITE_PROTECTED 0x27
78 #define UA_RESET_ASC 0x29
79 #define UA_CHANGED_ASC 0x2a
80 #define TARGET_CHANGED_ASC 0x3f
81 #define LUNS_CHANGED_ASCQ 0x0e
82 #define INSUFF_RES_ASC 0x55
83 #define INSUFF_RES_ASCQ 0x3
84 #define POWER_ON_RESET_ASCQ 0x0
85 #define POWER_ON_OCCURRED_ASCQ 0x1
86 #define BUS_RESET_ASCQ 0x2      /* scsi bus reset occurred */
87 #define MODE_CHANGED_ASCQ 0x1   /* mode parameters changed */
88 #define CAPACITY_CHANGED_ASCQ 0x9
89 #define SAVING_PARAMS_UNSUP 0x39
90 #define TRANSPORT_PROBLEM 0x4b
91 #define THRESHOLD_EXCEEDED 0x5d
92 #define LOW_POWER_COND_ON 0x5e
93 #define MISCOMPARE_VERIFY_ASC 0x1d
94 #define MICROCODE_CHANGED_ASCQ 0x1      /* with TARGET_CHANGED_ASC */
95 #define MICROCODE_CHANGED_WO_RESET_ASCQ 0x16
96 #define WRITE_ERROR_ASC 0xc
97 #define UNALIGNED_WRITE_ASCQ 0x4
98 #define WRITE_BOUNDARY_ASCQ 0x5
99 #define READ_INVDATA_ASCQ 0x6
100 #define READ_BOUNDARY_ASCQ 0x7
101 #define ATTEMPT_ACCESS_GAP 0x9
102 #define INSUFF_ZONE_ASCQ 0xe
103
104 /* Additional Sense Code Qualifier (ASCQ) */
105 #define ACK_NAK_TO 0x3
106
107 /* Default values for driver parameters */
108 #define DEF_NUM_HOST   1
109 #define DEF_NUM_TGTS   1
110 #define DEF_MAX_LUNS   1
111 /* With these defaults, this driver will make 1 host with 1 target
112  * (id 0) containing 1 logical unit (lun 0). That is 1 device.
113  */
114 #define DEF_ATO 1
115 #define DEF_CDB_LEN 10
116 #define DEF_JDELAY   1          /* if > 0 unit is a jiffy */
117 #define DEF_DEV_SIZE_PRE_INIT   0
118 #define DEF_DEV_SIZE_MB   8
119 #define DEF_ZBC_DEV_SIZE_MB   128
120 #define DEF_DIF 0
121 #define DEF_DIX 0
122 #define DEF_PER_HOST_STORE false
123 #define DEF_D_SENSE   0
124 #define DEF_EVERY_NTH   0
125 #define DEF_FAKE_RW     0
126 #define DEF_GUARD 0
127 #define DEF_HOST_LOCK 0
128 #define DEF_LBPU 0
129 #define DEF_LBPWS 0
130 #define DEF_LBPWS10 0
131 #define DEF_LBPRZ 1
132 #define DEF_LOWEST_ALIGNED 0
133 #define DEF_NDELAY   0          /* if > 0 unit is a nanosecond */
134 #define DEF_NO_LUN_0   0
135 #define DEF_NUM_PARTS   0
136 #define DEF_OPTS   0
137 #define DEF_OPT_BLKS 1024
138 #define DEF_PHYSBLK_EXP 0
139 #define DEF_OPT_XFERLEN_EXP 0
140 #define DEF_PTYPE   TYPE_DISK
141 #define DEF_RANDOM false
142 #define DEF_REMOVABLE false
143 #define DEF_SCSI_LEVEL   7    /* INQUIRY, byte2 [6->SPC-4; 7->SPC-5] */
144 #define DEF_SECTOR_SIZE 512
145 #define DEF_UNMAP_ALIGNMENT 0
146 #define DEF_UNMAP_GRANULARITY 1
147 #define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
148 #define DEF_UNMAP_MAX_DESC 256
149 #define DEF_VIRTUAL_GB   0
150 #define DEF_VPD_USE_HOSTNO 1
151 #define DEF_WRITESAME_LENGTH 0xFFFF
152 #define DEF_STRICT 0
153 #define DEF_STATISTICS false
154 #define DEF_SUBMIT_QUEUES 1
155 #define DEF_TUR_MS_TO_READY 0
156 #define DEF_UUID_CTL 0
157 #define JDELAY_OVERRIDDEN -9999
158
159 /* Default parameters for ZBC drives */
160 #define DEF_ZBC_ZONE_SIZE_MB    128
161 #define DEF_ZBC_MAX_OPEN_ZONES  8
162 #define DEF_ZBC_NR_CONV_ZONES   1
163
164 #define SDEBUG_LUN_0_VAL 0
165
166 /* bit mask values for sdebug_opts */
167 #define SDEBUG_OPT_NOISE                1
168 #define SDEBUG_OPT_MEDIUM_ERR           2
169 #define SDEBUG_OPT_TIMEOUT              4
170 #define SDEBUG_OPT_RECOVERED_ERR        8
171 #define SDEBUG_OPT_TRANSPORT_ERR        16
172 #define SDEBUG_OPT_DIF_ERR              32
173 #define SDEBUG_OPT_DIX_ERR              64
174 #define SDEBUG_OPT_MAC_TIMEOUT          128
175 #define SDEBUG_OPT_SHORT_TRANSFER       0x100
176 #define SDEBUG_OPT_Q_NOISE              0x200
177 #define SDEBUG_OPT_ALL_TSF              0x400   /* ignore */
178 #define SDEBUG_OPT_RARE_TSF             0x800
179 #define SDEBUG_OPT_N_WCE                0x1000
180 #define SDEBUG_OPT_RESET_NOISE          0x2000
181 #define SDEBUG_OPT_NO_CDB_NOISE         0x4000
182 #define SDEBUG_OPT_HOST_BUSY            0x8000
183 #define SDEBUG_OPT_CMD_ABORT            0x10000
184 #define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \
185                               SDEBUG_OPT_RESET_NOISE)
186 #define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \
187                                   SDEBUG_OPT_TRANSPORT_ERR | \
188                                   SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \
189                                   SDEBUG_OPT_SHORT_TRANSFER | \
190                                   SDEBUG_OPT_HOST_BUSY | \
191                                   SDEBUG_OPT_CMD_ABORT)
192 #define SDEBUG_OPT_RECOV_DIF_DIX (SDEBUG_OPT_RECOVERED_ERR | \
193                                   SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR)
194
195 /* As indicated in SAM-5 and SPC-4 Unit Attentions (UAs) are returned in
196  * priority order. In the subset implemented here lower numbers have higher
197  * priority. The UA numbers should be a sequence starting from 0 with
198  * SDEBUG_NUM_UAS being 1 higher than the highest numbered UA. */
199 #define SDEBUG_UA_POR 0         /* Power on, reset, or bus device reset */
200 #define SDEBUG_UA_POOCCUR 1     /* Power on occurred */
201 #define SDEBUG_UA_BUS_RESET 2
202 #define SDEBUG_UA_MODE_CHANGED 3
203 #define SDEBUG_UA_CAPACITY_CHANGED 4
204 #define SDEBUG_UA_LUNS_CHANGED 5
205 #define SDEBUG_UA_MICROCODE_CHANGED 6   /* simulate firmware change */
206 #define SDEBUG_UA_MICROCODE_CHANGED_WO_RESET 7
207 #define SDEBUG_NUM_UAS 8
208
209 /* when 1==SDEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
210  * sector on read commands: */
211 #define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
212 #define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
213
214 /* SDEBUG_CANQUEUE is the maximum number of commands that can be queued
215  * (for response) per submit queue at one time. Can be reduced by max_queue
216  * option. Command responses are not queued when jdelay=0 and ndelay=0. The
217  * per-device DEF_CMD_PER_LUN can be changed via sysfs:
218  * /sys/class/scsi_device/<h:c:t:l>/device/queue_depth
219  * but cannot exceed SDEBUG_CANQUEUE .
220  */
221 #define SDEBUG_CANQUEUE_WORDS  3        /* a WORD is bits in a long */
222 #define SDEBUG_CANQUEUE  (SDEBUG_CANQUEUE_WORDS * BITS_PER_LONG)
223 #define DEF_CMD_PER_LUN  SDEBUG_CANQUEUE
224
225 /* UA - Unit Attention; SA - Service Action; SSU - Start Stop Unit */
226 #define F_D_IN                  1       /* Data-in command (e.g. READ) */
227 #define F_D_OUT                 2       /* Data-out command (e.g. WRITE) */
228 #define F_D_OUT_MAYBE           4       /* WRITE SAME, NDOB bit */
229 #define F_D_UNKN                8
230 #define F_RL_WLUN_OK            0x10    /* allowed with REPORT LUNS W-LUN */
231 #define F_SKIP_UA               0x20    /* bypass UAs (e.g. INQUIRY command) */
232 #define F_DELAY_OVERR           0x40    /* for commands like INQUIRY */
233 #define F_SA_LOW                0x80    /* SA is in cdb byte 1, bits 4 to 0 */
234 #define F_SA_HIGH               0x100   /* SA is in cdb bytes 8 and 9 */
235 #define F_INV_OP                0x200   /* invalid opcode (not supported) */
236 #define F_FAKE_RW               0x400   /* bypass resp_*() when fake_rw set */
237 #define F_M_ACCESS              0x800   /* media access, reacts to SSU state */
238 #define F_SSU_DELAY             0x1000  /* SSU command delay (long-ish) */
239 #define F_SYNC_DELAY            0x2000  /* SYNCHRONIZE CACHE delay */
240
241 /* Useful combinations of the above flags */
242 #define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
243 #define FF_MEDIA_IO (F_M_ACCESS | F_FAKE_RW)
244 #define FF_SA (F_SA_HIGH | F_SA_LOW)
245 #define F_LONG_DELAY            (F_SSU_DELAY | F_SYNC_DELAY)
246
247 #define SDEBUG_MAX_PARTS 4
248
249 #define SDEBUG_MAX_CMD_LEN 32
250
251 #define SDEB_XA_NOT_IN_USE XA_MARK_1
252
253 /* Zone types (zbcr05 table 25) */
254 enum sdebug_z_type {
255         ZBC_ZTYPE_CNV   = 0x1,
256         ZBC_ZTYPE_SWR   = 0x2,
257         ZBC_ZTYPE_SWP   = 0x3,
258         /* ZBC_ZTYPE_SOBR = 0x4, */
259         ZBC_ZTYPE_GAP   = 0x5,
260 };
261
262 /* enumeration names taken from table 26, zbcr05 */
263 enum sdebug_z_cond {
264         ZBC_NOT_WRITE_POINTER   = 0x0,
265         ZC1_EMPTY               = 0x1,
266         ZC2_IMPLICIT_OPEN       = 0x2,
267         ZC3_EXPLICIT_OPEN       = 0x3,
268         ZC4_CLOSED              = 0x4,
269         ZC6_READ_ONLY           = 0xd,
270         ZC5_FULL                = 0xe,
271         ZC7_OFFLINE             = 0xf,
272 };
273
274 struct sdeb_zone_state {        /* ZBC: per zone state */
275         enum sdebug_z_type z_type;
276         enum sdebug_z_cond z_cond;
277         bool z_non_seq_resource;
278         unsigned int z_size;
279         sector_t z_start;
280         sector_t z_wp;
281 };
282
283 struct sdebug_dev_info {
284         struct list_head dev_list;
285         unsigned int channel;
286         unsigned int target;
287         u64 lun;
288         uuid_t lu_name;
289         struct sdebug_host_info *sdbg_host;
290         unsigned long uas_bm[1];
291         atomic_t num_in_q;
292         atomic_t stopped;       /* 1: by SSU, 2: device start */
293         bool used;
294
295         /* For ZBC devices */
296         enum blk_zoned_model zmodel;
297         unsigned int zcap;
298         unsigned int zsize;
299         unsigned int zsize_shift;
300         unsigned int nr_zones;
301         unsigned int nr_conv_zones;
302         unsigned int nr_seq_zones;
303         unsigned int nr_imp_open;
304         unsigned int nr_exp_open;
305         unsigned int nr_closed;
306         unsigned int max_open;
307         ktime_t create_ts;      /* time since bootup that this device was created */
308         struct sdeb_zone_state *zstate;
309 };
310
311 struct sdebug_host_info {
312         struct list_head host_list;
313         int si_idx;     /* sdeb_store_info (per host) xarray index */
314         struct Scsi_Host *shost;
315         struct device dev;
316         struct list_head dev_info_list;
317 };
318
319 /* There is an xarray of pointers to this struct's objects, one per host */
320 struct sdeb_store_info {
321         rwlock_t macc_lck;      /* for atomic media access on this store */
322         u8 *storep;             /* user data storage (ram) */
323         struct t10_pi_tuple *dif_storep; /* protection info */
324         void *map_storep;       /* provisioning map */
325 };
326
327 #define to_sdebug_host(d)       \
328         container_of(d, struct sdebug_host_info, dev)
329
330 enum sdeb_defer_type {SDEB_DEFER_NONE = 0, SDEB_DEFER_HRT = 1,
331                       SDEB_DEFER_WQ = 2, SDEB_DEFER_POLL = 3};
332
333 struct sdebug_defer {
334         struct hrtimer hrt;
335         struct execute_work ew;
336         ktime_t cmpl_ts;/* time since boot to complete this cmd */
337         int sqa_idx;    /* index of sdebug_queue array */
338         int qc_idx;     /* index of sdebug_queued_cmd array within sqa_idx */
339         int hc_idx;     /* hostwide tag index */
340         int issuing_cpu;
341         bool init_hrt;
342         bool init_wq;
343         bool init_poll;
344         bool aborted;   /* true when blk_abort_request() already called */
345         enum sdeb_defer_type defer_t;
346 };
347
348 struct sdebug_queued_cmd {
349         /* corresponding bit set in in_use_bm[] in owning struct sdebug_queue
350          * instance indicates this slot is in use.
351          */
352         struct sdebug_defer *sd_dp;
353         struct scsi_cmnd *a_cmnd;
354 };
355
356 struct sdebug_queue {
357         struct sdebug_queued_cmd qc_arr[SDEBUG_CANQUEUE];
358         unsigned long in_use_bm[SDEBUG_CANQUEUE_WORDS];
359         spinlock_t qc_lock;
360         atomic_t blocked;       /* to temporarily stop more being queued */
361 };
362
363 static atomic_t sdebug_cmnd_count;   /* number of incoming commands */
364 static atomic_t sdebug_completions;  /* count of deferred completions */
365 static atomic_t sdebug_miss_cpus;    /* submission + completion cpus differ */
366 static atomic_t sdebug_a_tsf;        /* 'almost task set full' counter */
367 static atomic_t sdeb_inject_pending;
368 static atomic_t sdeb_mq_poll_count;  /* bumped when mq_poll returns > 0 */
369
370 struct opcode_info_t {
371         u8 num_attached;        /* 0 if this is it (i.e. a leaf); use 0xff */
372                                 /* for terminating element */
373         u8 opcode;              /* if num_attached > 0, preferred */
374         u16 sa;                 /* service action */
375         u32 flags;              /* OR-ed set of SDEB_F_* */
376         int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
377         const struct opcode_info_t *arrp;  /* num_attached elements or NULL */
378         u8 len_mask[16];        /* len_mask[0]-->cdb_len, then mask for cdb */
379                                 /* 1 to min(cdb_len, 15); ignore cdb[15...] */
380 };
381
382 /* SCSI opcodes (first byte of cdb) of interest mapped onto these indexes */
383 enum sdeb_opcode_index {
384         SDEB_I_INVALID_OPCODE = 0,
385         SDEB_I_INQUIRY = 1,
386         SDEB_I_REPORT_LUNS = 2,
387         SDEB_I_REQUEST_SENSE = 3,
388         SDEB_I_TEST_UNIT_READY = 4,
389         SDEB_I_MODE_SENSE = 5,          /* 6, 10 */
390         SDEB_I_MODE_SELECT = 6,         /* 6, 10 */
391         SDEB_I_LOG_SENSE = 7,
392         SDEB_I_READ_CAPACITY = 8,       /* 10; 16 is in SA_IN(16) */
393         SDEB_I_READ = 9,                /* 6, 10, 12, 16 */
394         SDEB_I_WRITE = 10,              /* 6, 10, 12, 16 */
395         SDEB_I_START_STOP = 11,
396         SDEB_I_SERV_ACT_IN_16 = 12,     /* add ...SERV_ACT_IN_12 if needed */
397         SDEB_I_SERV_ACT_OUT_16 = 13,    /* add ...SERV_ACT_OUT_12 if needed */
398         SDEB_I_MAINT_IN = 14,
399         SDEB_I_MAINT_OUT = 15,
400         SDEB_I_VERIFY = 16,             /* VERIFY(10), VERIFY(16) */
401         SDEB_I_VARIABLE_LEN = 17,       /* READ(32), WRITE(32), WR_SCAT(32) */
402         SDEB_I_RESERVE = 18,            /* 6, 10 */
403         SDEB_I_RELEASE = 19,            /* 6, 10 */
404         SDEB_I_ALLOW_REMOVAL = 20,      /* PREVENT ALLOW MEDIUM REMOVAL */
405         SDEB_I_REZERO_UNIT = 21,        /* REWIND in SSC */
406         SDEB_I_ATA_PT = 22,             /* 12, 16 */
407         SDEB_I_SEND_DIAG = 23,
408         SDEB_I_UNMAP = 24,
409         SDEB_I_WRITE_BUFFER = 25,
410         SDEB_I_WRITE_SAME = 26,         /* 10, 16 */
411         SDEB_I_SYNC_CACHE = 27,         /* 10, 16 */
412         SDEB_I_COMP_WRITE = 28,
413         SDEB_I_PRE_FETCH = 29,          /* 10, 16 */
414         SDEB_I_ZONE_OUT = 30,           /* 0x94+SA; includes no data xfer */
415         SDEB_I_ZONE_IN = 31,            /* 0x95+SA; all have data-in */
416         SDEB_I_LAST_ELEM_P1 = 32,       /* keep this last (previous + 1) */
417 };
418
419
420 static const unsigned char opcode_ind_arr[256] = {
421 /* 0x0; 0x0->0x1f: 6 byte cdbs */
422         SDEB_I_TEST_UNIT_READY, SDEB_I_REZERO_UNIT, 0, SDEB_I_REQUEST_SENSE,
423             0, 0, 0, 0,
424         SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, 0,
425         0, 0, SDEB_I_INQUIRY, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
426             SDEB_I_RELEASE,
427         0, 0, SDEB_I_MODE_SENSE, SDEB_I_START_STOP, 0, SDEB_I_SEND_DIAG,
428             SDEB_I_ALLOW_REMOVAL, 0,
429 /* 0x20; 0x20->0x3f: 10 byte cdbs */
430         0, 0, 0, 0, 0, SDEB_I_READ_CAPACITY, 0, 0,
431         SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, SDEB_I_VERIFY,
432         0, 0, 0, 0, SDEB_I_PRE_FETCH, SDEB_I_SYNC_CACHE, 0, 0,
433         0, 0, 0, SDEB_I_WRITE_BUFFER, 0, 0, 0, 0,
434 /* 0x40; 0x40->0x5f: 10 byte cdbs */
435         0, SDEB_I_WRITE_SAME, SDEB_I_UNMAP, 0, 0, 0, 0, 0,
436         0, 0, 0, 0, 0, SDEB_I_LOG_SENSE, 0, 0,
437         0, 0, 0, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
438             SDEB_I_RELEASE,
439         0, 0, SDEB_I_MODE_SENSE, 0, 0, 0, 0, 0,
440 /* 0x60; 0x60->0x7d are reserved, 0x7e is "extended cdb" */
441         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
442         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
443         0, SDEB_I_VARIABLE_LEN,
444 /* 0x80; 0x80->0x9f: 16 byte cdbs */
445         0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
446         SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0,
447         0, 0, 0, SDEB_I_VERIFY,
448         SDEB_I_PRE_FETCH, SDEB_I_SYNC_CACHE, 0, SDEB_I_WRITE_SAME,
449         SDEB_I_ZONE_OUT, SDEB_I_ZONE_IN, 0, 0,
450         0, 0, 0, 0, 0, 0, SDEB_I_SERV_ACT_IN_16, SDEB_I_SERV_ACT_OUT_16,
451 /* 0xa0; 0xa0->0xbf: 12 byte cdbs */
452         SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
453              SDEB_I_MAINT_OUT, 0, 0, 0,
454         SDEB_I_READ, 0 /* SDEB_I_SERV_ACT_OUT_12 */, SDEB_I_WRITE,
455              0 /* SDEB_I_SERV_ACT_IN_12 */, 0, 0, 0, 0,
456         0, 0, 0, 0, 0, 0, 0, 0,
457         0, 0, 0, 0, 0, 0, 0, 0,
458 /* 0xc0; 0xc0->0xff: vendor specific */
459         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
460         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
461         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
462         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
463 };
464
465 /*
466  * The following "response" functions return the SCSI mid-level's 4 byte
467  * tuple-in-an-int. To handle commands with an IMMED bit, for a faster
468  * command completion, they can mask their return value with
469  * SDEG_RES_IMMED_MASK .
470  */
471 #define SDEG_RES_IMMED_MASK 0x40000000
472
473 static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
474 static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
475 static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
476 static int resp_mode_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
477 static int resp_mode_select(struct scsi_cmnd *, struct sdebug_dev_info *);
478 static int resp_log_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
479 static int resp_readcap(struct scsi_cmnd *, struct sdebug_dev_info *);
480 static int resp_read_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
481 static int resp_write_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
482 static int resp_write_scat(struct scsi_cmnd *, struct sdebug_dev_info *);
483 static int resp_start_stop(struct scsi_cmnd *, struct sdebug_dev_info *);
484 static int resp_readcap16(struct scsi_cmnd *, struct sdebug_dev_info *);
485 static int resp_get_lba_status(struct scsi_cmnd *, struct sdebug_dev_info *);
486 static int resp_report_tgtpgs(struct scsi_cmnd *, struct sdebug_dev_info *);
487 static int resp_unmap(struct scsi_cmnd *, struct sdebug_dev_info *);
488 static int resp_rsup_opcodes(struct scsi_cmnd *, struct sdebug_dev_info *);
489 static int resp_rsup_tmfs(struct scsi_cmnd *, struct sdebug_dev_info *);
490 static int resp_verify(struct scsi_cmnd *, struct sdebug_dev_info *);
491 static int resp_write_same_10(struct scsi_cmnd *, struct sdebug_dev_info *);
492 static int resp_write_same_16(struct scsi_cmnd *, struct sdebug_dev_info *);
493 static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
494 static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
495 static int resp_sync_cache(struct scsi_cmnd *, struct sdebug_dev_info *);
496 static int resp_pre_fetch(struct scsi_cmnd *, struct sdebug_dev_info *);
497 static int resp_report_zones(struct scsi_cmnd *, struct sdebug_dev_info *);
498 static int resp_open_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
499 static int resp_close_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
500 static int resp_finish_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
501 static int resp_rwp_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
502
503 static int sdebug_do_add_host(bool mk_new_store);
504 static int sdebug_add_host_helper(int per_host_idx);
505 static void sdebug_do_remove_host(bool the_end);
506 static int sdebug_add_store(void);
507 static void sdebug_erase_store(int idx, struct sdeb_store_info *sip);
508 static void sdebug_erase_all_stores(bool apart_from_first);
509
510 /*
511  * The following are overflow arrays for cdbs that "hit" the same index in
512  * the opcode_info_arr array. The most time sensitive (or commonly used) cdb
513  * should be placed in opcode_info_arr[], the others should be placed here.
514  */
515 static const struct opcode_info_t msense_iarr[] = {
516         {0, 0x1a, 0, F_D_IN, NULL, NULL,
517             {6,  0xe8, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
518 };
519
520 static const struct opcode_info_t mselect_iarr[] = {
521         {0, 0x15, 0, F_D_OUT, NULL, NULL,
522             {6,  0xf1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
523 };
524
525 static const struct opcode_info_t read_iarr[] = {
526         {0, 0x28, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(10) */
527             {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
528              0, 0, 0, 0} },
529         {0, 0x8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL, /* READ(6) */
530             {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
531         {0, 0xa8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(12) */
532             {12,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
533              0xc7, 0, 0, 0, 0} },
534 };
535
536 static const struct opcode_info_t write_iarr[] = {
537         {0, 0x2a, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(10) */
538             NULL, {10,  0xfb, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7,
539                    0, 0, 0, 0, 0, 0} },
540         {0, 0xa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,   /* WRITE(6) */
541             NULL, {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0,
542                    0, 0, 0} },
543         {0, 0xaa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(12) */
544             NULL, {12,  0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
545                    0xbf, 0xc7, 0, 0, 0, 0} },
546 };
547
548 static const struct opcode_info_t verify_iarr[] = {
549         {0, 0x2f, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, resp_verify,/* VERIFY(10) */
550             NULL, {10,  0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc7,
551                    0, 0, 0, 0, 0, 0} },
552 };
553
554 static const struct opcode_info_t sa_in_16_iarr[] = {
555         {0, 0x9e, 0x12, F_SA_LOW | F_D_IN, resp_get_lba_status, NULL,
556             {16,  0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
557              0xff, 0xff, 0xff, 0, 0xc7} },      /* GET LBA STATUS(16) */
558 };
559
560 static const struct opcode_info_t vl_iarr[] = { /* VARIABLE LENGTH */
561         {0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_dt0,
562             NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0xb, 0xfa,
563                    0, 0xff, 0xff, 0xff, 0xff} },        /* WRITE(32) */
564         {0, 0x7f, 0x11, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
565             NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x11, 0xf8,
566                    0, 0xff, 0xff, 0x0, 0x0} },  /* WRITE SCATTERED(32) */
567 };
568
569 static const struct opcode_info_t maint_in_iarr[] = {   /* MAINT IN */
570         {0, 0xa3, 0xc, F_SA_LOW | F_D_IN, resp_rsup_opcodes, NULL,
571             {12,  0xc, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
572              0xc7, 0, 0, 0, 0} }, /* REPORT SUPPORTED OPERATION CODES */
573         {0, 0xa3, 0xd, F_SA_LOW | F_D_IN, resp_rsup_tmfs, NULL,
574             {12,  0xd, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
575              0, 0} },   /* REPORTED SUPPORTED TASK MANAGEMENT FUNCTIONS */
576 };
577
578 static const struct opcode_info_t write_same_iarr[] = {
579         {0, 0x93, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, resp_write_same_16, NULL,
580             {16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
581              0xff, 0xff, 0xff, 0x3f, 0xc7} },           /* WRITE SAME(16) */
582 };
583
584 static const struct opcode_info_t reserve_iarr[] = {
585         {0, 0x16, 0, F_D_OUT, NULL, NULL,               /* RESERVE(6) */
586             {6,  0x1f, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
587 };
588
589 static const struct opcode_info_t release_iarr[] = {
590         {0, 0x17, 0, F_D_OUT, NULL, NULL,               /* RELEASE(6) */
591             {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
592 };
593
594 static const struct opcode_info_t sync_cache_iarr[] = {
595         {0, 0x91, 0, F_SYNC_DELAY | F_M_ACCESS, resp_sync_cache, NULL,
596             {16,  0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
597              0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },     /* SYNC_CACHE (16) */
598 };
599
600 static const struct opcode_info_t pre_fetch_iarr[] = {
601         {0, 0x90, 0, F_SYNC_DELAY | FF_MEDIA_IO, resp_pre_fetch, NULL,
602             {16,  0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
603              0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },     /* PRE-FETCH (16) */
604 };
605
606 static const struct opcode_info_t zone_out_iarr[] = {   /* ZONE OUT(16) */
607         {0, 0x94, 0x1, F_SA_LOW | F_M_ACCESS, resp_close_zone, NULL,
608             {16, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
609              0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },      /* CLOSE ZONE */
610         {0, 0x94, 0x2, F_SA_LOW | F_M_ACCESS, resp_finish_zone, NULL,
611             {16, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
612              0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },      /* FINISH ZONE */
613         {0, 0x94, 0x4, F_SA_LOW | F_M_ACCESS, resp_rwp_zone, NULL,
614             {16, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
615              0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },  /* RESET WRITE POINTER */
616 };
617
618 static const struct opcode_info_t zone_in_iarr[] = {    /* ZONE IN(16) */
619         {0, 0x95, 0x6, F_SA_LOW | F_D_IN | F_M_ACCESS, NULL, NULL,
620             {16, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
621              0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} }, /* REPORT ZONES */
622 };
623
624
625 /* This array is accessed via SDEB_I_* values. Make sure all are mapped,
626  * plus the terminating elements for logic that scans this table such as
627  * REPORT SUPPORTED OPERATION CODES. */
628 static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEM_P1 + 1] = {
629 /* 0 */
630         {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL,    /* unknown opcodes */
631             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
632         {0, 0x12, 0, FF_RESPOND | F_D_IN, resp_inquiry, NULL, /* INQUIRY */
633             {6,  0xe3, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
634         {0, 0xa0, 0, FF_RESPOND | F_D_IN, resp_report_luns, NULL,
635             {12,  0xe3, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
636              0, 0} },                                   /* REPORT LUNS */
637         {0, 0x3, 0, FF_RESPOND | F_D_IN, resp_requests, NULL,
638             {6,  0xe1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
639         {0, 0x0, 0, F_M_ACCESS | F_RL_WLUN_OK, NULL, NULL,/* TEST UNIT READY */
640             {6,  0, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
641 /* 5 */
642         {ARRAY_SIZE(msense_iarr), 0x5a, 0, F_D_IN,      /* MODE SENSE(10) */
643             resp_mode_sense, msense_iarr, {10,  0xf8, 0xff, 0xff, 0, 0, 0,
644                 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
645         {ARRAY_SIZE(mselect_iarr), 0x55, 0, F_D_OUT,    /* MODE SELECT(10) */
646             resp_mode_select, mselect_iarr, {10,  0xf1, 0, 0, 0, 0, 0, 0xff,
647                 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
648         {0, 0x4d, 0, F_D_IN, resp_log_sense, NULL,      /* LOG SENSE */
649             {10,  0xe3, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0,
650              0, 0, 0} },
651         {0, 0x25, 0, F_D_IN, resp_readcap, NULL,    /* READ CAPACITY(10) */
652             {10,  0xe1, 0xff, 0xff, 0xff, 0xff, 0, 0, 0x1, 0xc7, 0, 0, 0, 0,
653              0, 0} },
654         {ARRAY_SIZE(read_iarr), 0x88, 0, F_D_IN | FF_MEDIA_IO, /* READ(16) */
655             resp_read_dt0, read_iarr, {16,  0xfe, 0xff, 0xff, 0xff, 0xff,
656             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
657 /* 10 */
658         {ARRAY_SIZE(write_iarr), 0x8a, 0, F_D_OUT | FF_MEDIA_IO,
659             resp_write_dt0, write_iarr,                 /* WRITE(16) */
660                 {16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
661                  0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
662         {0, 0x1b, 0, F_SSU_DELAY, resp_start_stop, NULL,/* START STOP UNIT */
663             {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
664         {ARRAY_SIZE(sa_in_16_iarr), 0x9e, 0x10, F_SA_LOW | F_D_IN,
665             resp_readcap16, sa_in_16_iarr, /* SA_IN(16), READ CAPACITY(16) */
666                 {16,  0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
667                  0xff, 0xff, 0xff, 0xff, 0x1, 0xc7} },
668         {0, 0x9f, 0x12, F_SA_LOW | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
669             NULL, {16,  0x12, 0xf9, 0x0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff,
670             0xff, 0xff, 0xff, 0xff, 0xc7} },  /* SA_OUT(16), WRITE SCAT(16) */
671         {ARRAY_SIZE(maint_in_iarr), 0xa3, 0xa, F_SA_LOW | F_D_IN,
672             resp_report_tgtpgs, /* MAINT IN, REPORT TARGET PORT GROUPS */
673                 maint_in_iarr, {12,  0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff,
674                                 0xff, 0, 0xc7, 0, 0, 0, 0} },
675 /* 15 */
676         {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* MAINT OUT */
677             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
678         {ARRAY_SIZE(verify_iarr), 0x8f, 0,
679             F_D_OUT_MAYBE | FF_MEDIA_IO, resp_verify,   /* VERIFY(16) */
680             verify_iarr, {16,  0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
681                           0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },
682         {ARRAY_SIZE(vl_iarr), 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_MEDIA_IO,
683             resp_read_dt0, vl_iarr,     /* VARIABLE LENGTH, READ(32) */
684             {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x9, 0xfe, 0, 0xff, 0xff,
685              0xff, 0xff} },
686         {ARRAY_SIZE(reserve_iarr), 0x56, 0, F_D_OUT,
687             NULL, reserve_iarr, /* RESERVE(10) <no response function> */
688             {10,  0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
689              0} },
690         {ARRAY_SIZE(release_iarr), 0x57, 0, F_D_OUT,
691             NULL, release_iarr, /* RELEASE(10) <no response function> */
692             {10,  0x13, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
693              0} },
694 /* 20 */
695         {0, 0x1e, 0, 0, NULL, NULL, /* ALLOW REMOVAL */
696             {6,  0, 0, 0, 0x3, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
697         {0, 0x1, 0, 0, resp_start_stop, NULL, /* REWIND ?? */
698             {6,  0x1, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
699         {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ATA_PT */
700             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
701         {0, 0x1d, F_D_OUT, 0, NULL, NULL,       /* SEND DIAGNOSTIC */
702             {6,  0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
703         {0, 0x42, 0, F_D_OUT | FF_MEDIA_IO, resp_unmap, NULL, /* UNMAP */
704             {10,  0x1, 0, 0, 0, 0, 0x3f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
705 /* 25 */
706         {0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
707             {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
708              0, 0, 0, 0} },                     /* WRITE_BUFFER */
709         {ARRAY_SIZE(write_same_iarr), 0x41, 0, F_D_OUT_MAYBE | FF_MEDIA_IO,
710             resp_write_same_10, write_same_iarr,        /* WRITE SAME(10) */
711                 {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0,
712                  0, 0, 0, 0, 0} },
713         {ARRAY_SIZE(sync_cache_iarr), 0x35, 0, F_SYNC_DELAY | F_M_ACCESS,
714             resp_sync_cache, sync_cache_iarr,
715             {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
716              0, 0, 0, 0} },                     /* SYNC_CACHE (10) */
717         {0, 0x89, 0, F_D_OUT | FF_MEDIA_IO, resp_comp_write, NULL,
718             {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
719              0, 0xff, 0x3f, 0xc7} },            /* COMPARE AND WRITE */
720         {ARRAY_SIZE(pre_fetch_iarr), 0x34, 0, F_SYNC_DELAY | FF_MEDIA_IO,
721             resp_pre_fetch, pre_fetch_iarr,
722             {10,  0x2, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
723              0, 0, 0, 0} },                     /* PRE-FETCH (10) */
724
725 /* 30 */
726         {ARRAY_SIZE(zone_out_iarr), 0x94, 0x3, F_SA_LOW | F_M_ACCESS,
727             resp_open_zone, zone_out_iarr, /* ZONE_OUT(16), OPEN ZONE) */
728                 {16,  0x3 /* SA */, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
729                  0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0x1, 0xc7} },
730         {ARRAY_SIZE(zone_in_iarr), 0x95, 0x0, F_SA_LOW | F_M_ACCESS,
731             resp_report_zones, zone_in_iarr, /* ZONE_IN(16), REPORT ZONES) */
732                 {16,  0x0 /* SA */, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
733                  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xc7} },
734 /* sentinel */
735         {0xff, 0, 0, 0, NULL, NULL,             /* terminating element */
736             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
737 };
738
739 static int sdebug_num_hosts;
740 static int sdebug_add_host = DEF_NUM_HOST;  /* in sysfs this is relative */
741 static int sdebug_ato = DEF_ATO;
742 static int sdebug_cdb_len = DEF_CDB_LEN;
743 static int sdebug_jdelay = DEF_JDELAY;  /* if > 0 then unit is jiffies */
744 static int sdebug_dev_size_mb = DEF_DEV_SIZE_PRE_INIT;
745 static int sdebug_dif = DEF_DIF;
746 static int sdebug_dix = DEF_DIX;
747 static int sdebug_dsense = DEF_D_SENSE;
748 static int sdebug_every_nth = DEF_EVERY_NTH;
749 static int sdebug_fake_rw = DEF_FAKE_RW;
750 static unsigned int sdebug_guard = DEF_GUARD;
751 static int sdebug_host_max_queue;       /* per host */
752 static int sdebug_lowest_aligned = DEF_LOWEST_ALIGNED;
753 static int sdebug_max_luns = DEF_MAX_LUNS;
754 static int sdebug_max_queue = SDEBUG_CANQUEUE;  /* per submit queue */
755 static unsigned int sdebug_medium_error_start = OPT_MEDIUM_ERR_ADDR;
756 static int sdebug_medium_error_count = OPT_MEDIUM_ERR_NUM;
757 static atomic_t retired_max_queue;      /* if > 0 then was prior max_queue */
758 static int sdebug_ndelay = DEF_NDELAY;  /* if > 0 then unit is nanoseconds */
759 static int sdebug_no_lun_0 = DEF_NO_LUN_0;
760 static int sdebug_no_uld;
761 static int sdebug_num_parts = DEF_NUM_PARTS;
762 static int sdebug_num_tgts = DEF_NUM_TGTS; /* targets per host */
763 static int sdebug_opt_blks = DEF_OPT_BLKS;
764 static int sdebug_opts = DEF_OPTS;
765 static int sdebug_physblk_exp = DEF_PHYSBLK_EXP;
766 static int sdebug_opt_xferlen_exp = DEF_OPT_XFERLEN_EXP;
767 static int sdebug_ptype = DEF_PTYPE; /* SCSI peripheral device type */
768 static int sdebug_scsi_level = DEF_SCSI_LEVEL;
769 static int sdebug_sector_size = DEF_SECTOR_SIZE;
770 static int sdeb_tur_ms_to_ready = DEF_TUR_MS_TO_READY;
771 static int sdebug_virtual_gb = DEF_VIRTUAL_GB;
772 static int sdebug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
773 static unsigned int sdebug_lbpu = DEF_LBPU;
774 static unsigned int sdebug_lbpws = DEF_LBPWS;
775 static unsigned int sdebug_lbpws10 = DEF_LBPWS10;
776 static unsigned int sdebug_lbprz = DEF_LBPRZ;
777 static unsigned int sdebug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
778 static unsigned int sdebug_unmap_granularity = DEF_UNMAP_GRANULARITY;
779 static unsigned int sdebug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
780 static unsigned int sdebug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
781 static unsigned int sdebug_write_same_length = DEF_WRITESAME_LENGTH;
782 static int sdebug_uuid_ctl = DEF_UUID_CTL;
783 static bool sdebug_random = DEF_RANDOM;
784 static bool sdebug_per_host_store = DEF_PER_HOST_STORE;
785 static bool sdebug_removable = DEF_REMOVABLE;
786 static bool sdebug_clustering;
787 static bool sdebug_host_lock = DEF_HOST_LOCK;
788 static bool sdebug_strict = DEF_STRICT;
789 static bool sdebug_any_injecting_opt;
790 static bool sdebug_no_rwlock;
791 static bool sdebug_verbose;
792 static bool have_dif_prot;
793 static bool write_since_sync;
794 static bool sdebug_statistics = DEF_STATISTICS;
795 static bool sdebug_wp;
796 /* Following enum: 0: no zbc, def; 1: host aware; 2: host managed */
797 static enum blk_zoned_model sdeb_zbc_model = BLK_ZONED_NONE;
798 static char *sdeb_zbc_model_s;
799
800 enum sam_lun_addr_method {SAM_LUN_AM_PERIPHERAL = 0x0,
801                           SAM_LUN_AM_FLAT = 0x1,
802                           SAM_LUN_AM_LOGICAL_UNIT = 0x2,
803                           SAM_LUN_AM_EXTENDED = 0x3};
804 static enum sam_lun_addr_method sdebug_lun_am = SAM_LUN_AM_PERIPHERAL;
805 static int sdebug_lun_am_i = (int)SAM_LUN_AM_PERIPHERAL;
806
807 static unsigned int sdebug_store_sectors;
808 static sector_t sdebug_capacity;        /* in sectors */
809
810 /* old BIOS stuff, kernel may get rid of them but some mode sense pages
811    may still need them */
812 static int sdebug_heads;                /* heads per disk */
813 static int sdebug_cylinders_per;        /* cylinders per surface */
814 static int sdebug_sectors_per;          /* sectors per cylinder */
815
816 static LIST_HEAD(sdebug_host_list);
817 static DEFINE_SPINLOCK(sdebug_host_list_lock);
818
819 static struct xarray per_store_arr;
820 static struct xarray *per_store_ap = &per_store_arr;
821 static int sdeb_first_idx = -1;         /* invalid index ==> none created */
822 static int sdeb_most_recent_idx = -1;
823 static DEFINE_RWLOCK(sdeb_fake_rw_lck); /* need a RW lock when fake_rw=1 */
824
825 static unsigned long map_size;
826 static int num_aborts;
827 static int num_dev_resets;
828 static int num_target_resets;
829 static int num_bus_resets;
830 static int num_host_resets;
831 static int dix_writes;
832 static int dix_reads;
833 static int dif_errors;
834
835 /* ZBC global data */
836 static bool sdeb_zbc_in_use;    /* true for host-aware and host-managed disks */
837 static int sdeb_zbc_zone_cap_mb;
838 static int sdeb_zbc_zone_size_mb;
839 static int sdeb_zbc_max_open = DEF_ZBC_MAX_OPEN_ZONES;
840 static int sdeb_zbc_nr_conv = DEF_ZBC_NR_CONV_ZONES;
841
842 static int submit_queues = DEF_SUBMIT_QUEUES;  /* > 1 for multi-queue (mq) */
843 static int poll_queues; /* iouring iopoll interface.*/
844 static struct sdebug_queue *sdebug_q_arr;  /* ptr to array of submit queues */
845
846 static DEFINE_RWLOCK(atomic_rw);
847 static DEFINE_RWLOCK(atomic_rw2);
848
849 static rwlock_t *ramdisk_lck_a[2];
850
851 static char sdebug_proc_name[] = MY_NAME;
852 static const char *my_name = MY_NAME;
853
854 static struct bus_type pseudo_lld_bus;
855
856 static struct device_driver sdebug_driverfs_driver = {
857         .name           = sdebug_proc_name,
858         .bus            = &pseudo_lld_bus,
859 };
860
861 static const int check_condition_result =
862         SAM_STAT_CHECK_CONDITION;
863
864 static const int illegal_condition_result =
865         (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
866
867 static const int device_qfull_result =
868         (DID_ABORT << 16) | SAM_STAT_TASK_SET_FULL;
869
870 static const int condition_met_result = SAM_STAT_CONDITION_MET;
871
872
873 /* Only do the extra work involved in logical block provisioning if one or
874  * more of the lbpu, lbpws or lbpws10 parameters are given and we are doing
875  * real reads and writes (i.e. not skipping them for speed).
876  */
877 static inline bool scsi_debug_lbp(void)
878 {
879         return 0 == sdebug_fake_rw &&
880                 (sdebug_lbpu || sdebug_lbpws || sdebug_lbpws10);
881 }
882
883 static void *lba2fake_store(struct sdeb_store_info *sip,
884                             unsigned long long lba)
885 {
886         struct sdeb_store_info *lsip = sip;
887
888         lba = do_div(lba, sdebug_store_sectors);
889         if (!sip || !sip->storep) {
890                 WARN_ON_ONCE(true);
891                 lsip = xa_load(per_store_ap, 0);  /* should never be NULL */
892         }
893         return lsip->storep + lba * sdebug_sector_size;
894 }
895
896 static struct t10_pi_tuple *dif_store(struct sdeb_store_info *sip,
897                                       sector_t sector)
898 {
899         sector = sector_div(sector, sdebug_store_sectors);
900
901         return sip->dif_storep + sector;
902 }
903
904 static void sdebug_max_tgts_luns(void)
905 {
906         struct sdebug_host_info *sdbg_host;
907         struct Scsi_Host *hpnt;
908
909         spin_lock(&sdebug_host_list_lock);
910         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
911                 hpnt = sdbg_host->shost;
912                 if ((hpnt->this_id >= 0) &&
913                     (sdebug_num_tgts > hpnt->this_id))
914                         hpnt->max_id = sdebug_num_tgts + 1;
915                 else
916                         hpnt->max_id = sdebug_num_tgts;
917                 /* sdebug_max_luns; */
918                 hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
919         }
920         spin_unlock(&sdebug_host_list_lock);
921 }
922
923 enum sdeb_cmd_data {SDEB_IN_DATA = 0, SDEB_IN_CDB = 1};
924
925 /* Set in_bit to -1 to indicate no bit position of invalid field */
926 static void mk_sense_invalid_fld(struct scsi_cmnd *scp,
927                                  enum sdeb_cmd_data c_d,
928                                  int in_byte, int in_bit)
929 {
930         unsigned char *sbuff;
931         u8 sks[4];
932         int sl, asc;
933
934         sbuff = scp->sense_buffer;
935         if (!sbuff) {
936                 sdev_printk(KERN_ERR, scp->device,
937                             "%s: sense_buffer is NULL\n", __func__);
938                 return;
939         }
940         asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
941         memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
942         scsi_build_sense(scp, sdebug_dsense, ILLEGAL_REQUEST, asc, 0);
943         memset(sks, 0, sizeof(sks));
944         sks[0] = 0x80;
945         if (c_d)
946                 sks[0] |= 0x40;
947         if (in_bit >= 0) {
948                 sks[0] |= 0x8;
949                 sks[0] |= 0x7 & in_bit;
950         }
951         put_unaligned_be16(in_byte, sks + 1);
952         if (sdebug_dsense) {
953                 sl = sbuff[7] + 8;
954                 sbuff[7] = sl;
955                 sbuff[sl] = 0x2;
956                 sbuff[sl + 1] = 0x6;
957                 memcpy(sbuff + sl + 4, sks, 3);
958         } else
959                 memcpy(sbuff + 15, sks, 3);
960         if (sdebug_verbose)
961                 sdev_printk(KERN_INFO, scp->device, "%s:  [sense_key,asc,ascq"
962                             "]: [0x5,0x%x,0x0] %c byte=%d, bit=%d\n",
963                             my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
964 }
965
966 static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
967 {
968         if (!scp->sense_buffer) {
969                 sdev_printk(KERN_ERR, scp->device,
970                             "%s: sense_buffer is NULL\n", __func__);
971                 return;
972         }
973         memset(scp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
974
975         scsi_build_sense(scp, sdebug_dsense, key, asc, asq);
976
977         if (sdebug_verbose)
978                 sdev_printk(KERN_INFO, scp->device,
979                             "%s:  [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
980                             my_name, key, asc, asq);
981 }
982
983 static void mk_sense_invalid_opcode(struct scsi_cmnd *scp)
984 {
985         mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
986 }
987
988 static int scsi_debug_ioctl(struct scsi_device *dev, unsigned int cmd,
989                             void __user *arg)
990 {
991         if (sdebug_verbose) {
992                 if (0x1261 == cmd)
993                         sdev_printk(KERN_INFO, dev,
994                                     "%s: BLKFLSBUF [0x1261]\n", __func__);
995                 else if (0x5331 == cmd)
996                         sdev_printk(KERN_INFO, dev,
997                                     "%s: CDROM_GET_CAPABILITY [0x5331]\n",
998                                     __func__);
999                 else
1000                         sdev_printk(KERN_INFO, dev, "%s: cmd=0x%x\n",
1001                                     __func__, cmd);
1002         }
1003         return -EINVAL;
1004         /* return -ENOTTY; // correct return but upsets fdisk */
1005 }
1006
1007 static void config_cdb_len(struct scsi_device *sdev)
1008 {
1009         switch (sdebug_cdb_len) {
1010         case 6: /* suggest 6 byte READ, WRITE and MODE SENSE/SELECT */
1011                 sdev->use_10_for_rw = false;
1012                 sdev->use_16_for_rw = false;
1013                 sdev->use_10_for_ms = false;
1014                 break;
1015         case 10: /* suggest 10 byte RWs and 6 byte MODE SENSE/SELECT */
1016                 sdev->use_10_for_rw = true;
1017                 sdev->use_16_for_rw = false;
1018                 sdev->use_10_for_ms = false;
1019                 break;
1020         case 12: /* suggest 10 byte RWs and 10 byte MODE SENSE/SELECT */
1021                 sdev->use_10_for_rw = true;
1022                 sdev->use_16_for_rw = false;
1023                 sdev->use_10_for_ms = true;
1024                 break;
1025         case 16:
1026                 sdev->use_10_for_rw = false;
1027                 sdev->use_16_for_rw = true;
1028                 sdev->use_10_for_ms = true;
1029                 break;
1030         case 32: /* No knobs to suggest this so same as 16 for now */
1031                 sdev->use_10_for_rw = false;
1032                 sdev->use_16_for_rw = true;
1033                 sdev->use_10_for_ms = true;
1034                 break;
1035         default:
1036                 pr_warn("unexpected cdb_len=%d, force to 10\n",
1037                         sdebug_cdb_len);
1038                 sdev->use_10_for_rw = true;
1039                 sdev->use_16_for_rw = false;
1040                 sdev->use_10_for_ms = false;
1041                 sdebug_cdb_len = 10;
1042                 break;
1043         }
1044 }
1045
1046 static void all_config_cdb_len(void)
1047 {
1048         struct sdebug_host_info *sdbg_host;
1049         struct Scsi_Host *shost;
1050         struct scsi_device *sdev;
1051
1052         spin_lock(&sdebug_host_list_lock);
1053         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
1054                 shost = sdbg_host->shost;
1055                 shost_for_each_device(sdev, shost) {
1056                         config_cdb_len(sdev);
1057                 }
1058         }
1059         spin_unlock(&sdebug_host_list_lock);
1060 }
1061
1062 static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
1063 {
1064         struct sdebug_host_info *sdhp;
1065         struct sdebug_dev_info *dp;
1066
1067         spin_lock(&sdebug_host_list_lock);
1068         list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
1069                 list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
1070                         if ((devip->sdbg_host == dp->sdbg_host) &&
1071                             (devip->target == dp->target))
1072                                 clear_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
1073                 }
1074         }
1075         spin_unlock(&sdebug_host_list_lock);
1076 }
1077
1078 static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1079 {
1080         int k;
1081
1082         k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
1083         if (k != SDEBUG_NUM_UAS) {
1084                 const char *cp = NULL;
1085
1086                 switch (k) {
1087                 case SDEBUG_UA_POR:
1088                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1089                                         POWER_ON_RESET_ASCQ);
1090                         if (sdebug_verbose)
1091                                 cp = "power on reset";
1092                         break;
1093                 case SDEBUG_UA_POOCCUR:
1094                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1095                                         POWER_ON_OCCURRED_ASCQ);
1096                         if (sdebug_verbose)
1097                                 cp = "power on occurred";
1098                         break;
1099                 case SDEBUG_UA_BUS_RESET:
1100                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1101                                         BUS_RESET_ASCQ);
1102                         if (sdebug_verbose)
1103                                 cp = "bus reset";
1104                         break;
1105                 case SDEBUG_UA_MODE_CHANGED:
1106                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
1107                                         MODE_CHANGED_ASCQ);
1108                         if (sdebug_verbose)
1109                                 cp = "mode parameters changed";
1110                         break;
1111                 case SDEBUG_UA_CAPACITY_CHANGED:
1112                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
1113                                         CAPACITY_CHANGED_ASCQ);
1114                         if (sdebug_verbose)
1115                                 cp = "capacity data changed";
1116                         break;
1117                 case SDEBUG_UA_MICROCODE_CHANGED:
1118                         mk_sense_buffer(scp, UNIT_ATTENTION,
1119                                         TARGET_CHANGED_ASC,
1120                                         MICROCODE_CHANGED_ASCQ);
1121                         if (sdebug_verbose)
1122                                 cp = "microcode has been changed";
1123                         break;
1124                 case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
1125                         mk_sense_buffer(scp, UNIT_ATTENTION,
1126                                         TARGET_CHANGED_ASC,
1127                                         MICROCODE_CHANGED_WO_RESET_ASCQ);
1128                         if (sdebug_verbose)
1129                                 cp = "microcode has been changed without reset";
1130                         break;
1131                 case SDEBUG_UA_LUNS_CHANGED:
1132                         /*
1133                          * SPC-3 behavior is to report a UNIT ATTENTION with
1134                          * ASC/ASCQ REPORTED LUNS DATA HAS CHANGED on every LUN
1135                          * on the target, until a REPORT LUNS command is
1136                          * received.  SPC-4 behavior is to report it only once.
1137                          * NOTE:  sdebug_scsi_level does not use the same
1138                          * values as struct scsi_device->scsi_level.
1139                          */
1140                         if (sdebug_scsi_level >= 6)     /* SPC-4 and above */
1141                                 clear_luns_changed_on_target(devip);
1142                         mk_sense_buffer(scp, UNIT_ATTENTION,
1143                                         TARGET_CHANGED_ASC,
1144                                         LUNS_CHANGED_ASCQ);
1145                         if (sdebug_verbose)
1146                                 cp = "reported luns data has changed";
1147                         break;
1148                 default:
1149                         pr_warn("unexpected unit attention code=%d\n", k);
1150                         if (sdebug_verbose)
1151                                 cp = "unknown";
1152                         break;
1153                 }
1154                 clear_bit(k, devip->uas_bm);
1155                 if (sdebug_verbose)
1156                         sdev_printk(KERN_INFO, scp->device,
1157                                    "%s reports: Unit attention: %s\n",
1158                                    my_name, cp);
1159                 return check_condition_result;
1160         }
1161         return 0;
1162 }
1163
1164 /* Build SCSI "data-in" buffer. Returns 0 if ok else (DID_ERROR << 16). */
1165 static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1166                                 int arr_len)
1167 {
1168         int act_len;
1169         struct scsi_data_buffer *sdb = &scp->sdb;
1170
1171         if (!sdb->length)
1172                 return 0;
1173         if (scp->sc_data_direction != DMA_FROM_DEVICE)
1174                 return DID_ERROR << 16;
1175
1176         act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
1177                                       arr, arr_len);
1178         scsi_set_resid(scp, scsi_bufflen(scp) - act_len);
1179
1180         return 0;
1181 }
1182
1183 /* Partial build of SCSI "data-in" buffer. Returns 0 if ok else
1184  * (DID_ERROR << 16). Can write to offset in data-in buffer. If multiple
1185  * calls, not required to write in ascending offset order. Assumes resid
1186  * set to scsi_bufflen() prior to any calls.
1187  */
1188 static int p_fill_from_dev_buffer(struct scsi_cmnd *scp, const void *arr,
1189                                   int arr_len, unsigned int off_dst)
1190 {
1191         unsigned int act_len, n;
1192         struct scsi_data_buffer *sdb = &scp->sdb;
1193         off_t skip = off_dst;
1194
1195         if (sdb->length <= off_dst)
1196                 return 0;
1197         if (scp->sc_data_direction != DMA_FROM_DEVICE)
1198                 return DID_ERROR << 16;
1199
1200         act_len = sg_pcopy_from_buffer(sdb->table.sgl, sdb->table.nents,
1201                                        arr, arr_len, skip);
1202         pr_debug("%s: off_dst=%u, scsi_bufflen=%u, act_len=%u, resid=%d\n",
1203                  __func__, off_dst, scsi_bufflen(scp), act_len,
1204                  scsi_get_resid(scp));
1205         n = scsi_bufflen(scp) - (off_dst + act_len);
1206         scsi_set_resid(scp, min_t(u32, scsi_get_resid(scp), n));
1207         return 0;
1208 }
1209
1210 /* Fetches from SCSI "data-out" buffer. Returns number of bytes fetched into
1211  * 'arr' or -1 if error.
1212  */
1213 static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1214                                int arr_len)
1215 {
1216         if (!scsi_bufflen(scp))
1217                 return 0;
1218         if (scp->sc_data_direction != DMA_TO_DEVICE)
1219                 return -1;
1220
1221         return scsi_sg_copy_to_buffer(scp, arr, arr_len);
1222 }
1223
1224
1225 static char sdebug_inq_vendor_id[9] = "Linux   ";
1226 static char sdebug_inq_product_id[17] = "scsi_debug      ";
1227 static char sdebug_inq_product_rev[5] = SDEBUG_VERSION;
1228 /* Use some locally assigned NAAs for SAS addresses. */
1229 static const u64 naa3_comp_a = 0x3222222000000000ULL;
1230 static const u64 naa3_comp_b = 0x3333333000000000ULL;
1231 static const u64 naa3_comp_c = 0x3111111000000000ULL;
1232
1233 /* Device identification VPD page. Returns number of bytes placed in arr */
1234 static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
1235                           int target_dev_id, int dev_id_num,
1236                           const char *dev_id_str, int dev_id_str_len,
1237                           const uuid_t *lu_name)
1238 {
1239         int num, port_a;
1240         char b[32];
1241
1242         port_a = target_dev_id + 1;
1243         /* T10 vendor identifier field format (faked) */
1244         arr[0] = 0x2;   /* ASCII */
1245         arr[1] = 0x1;
1246         arr[2] = 0x0;
1247         memcpy(&arr[4], sdebug_inq_vendor_id, 8);
1248         memcpy(&arr[12], sdebug_inq_product_id, 16);
1249         memcpy(&arr[28], dev_id_str, dev_id_str_len);
1250         num = 8 + 16 + dev_id_str_len;
1251         arr[3] = num;
1252         num += 4;
1253         if (dev_id_num >= 0) {
1254                 if (sdebug_uuid_ctl) {
1255                         /* Locally assigned UUID */
1256                         arr[num++] = 0x1;  /* binary (not necessarily sas) */
1257                         arr[num++] = 0xa;  /* PIV=0, lu, naa */
1258                         arr[num++] = 0x0;
1259                         arr[num++] = 0x12;
1260                         arr[num++] = 0x10; /* uuid type=1, locally assigned */
1261                         arr[num++] = 0x0;
1262                         memcpy(arr + num, lu_name, 16);
1263                         num += 16;
1264                 } else {
1265                         /* NAA-3, Logical unit identifier (binary) */
1266                         arr[num++] = 0x1;  /* binary (not necessarily sas) */
1267                         arr[num++] = 0x3;  /* PIV=0, lu, naa */
1268                         arr[num++] = 0x0;
1269                         arr[num++] = 0x8;
1270                         put_unaligned_be64(naa3_comp_b + dev_id_num, arr + num);
1271                         num += 8;
1272                 }
1273                 /* Target relative port number */
1274                 arr[num++] = 0x61;      /* proto=sas, binary */
1275                 arr[num++] = 0x94;      /* PIV=1, target port, rel port */
1276                 arr[num++] = 0x0;       /* reserved */
1277                 arr[num++] = 0x4;       /* length */
1278                 arr[num++] = 0x0;       /* reserved */
1279                 arr[num++] = 0x0;       /* reserved */
1280                 arr[num++] = 0x0;
1281                 arr[num++] = 0x1;       /* relative port A */
1282         }
1283         /* NAA-3, Target port identifier */
1284         arr[num++] = 0x61;      /* proto=sas, binary */
1285         arr[num++] = 0x93;      /* piv=1, target port, naa */
1286         arr[num++] = 0x0;
1287         arr[num++] = 0x8;
1288         put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1289         num += 8;
1290         /* NAA-3, Target port group identifier */
1291         arr[num++] = 0x61;      /* proto=sas, binary */
1292         arr[num++] = 0x95;      /* piv=1, target port group id */
1293         arr[num++] = 0x0;
1294         arr[num++] = 0x4;
1295         arr[num++] = 0;
1296         arr[num++] = 0;
1297         put_unaligned_be16(port_group_id, arr + num);
1298         num += 2;
1299         /* NAA-3, Target device identifier */
1300         arr[num++] = 0x61;      /* proto=sas, binary */
1301         arr[num++] = 0xa3;      /* piv=1, target device, naa */
1302         arr[num++] = 0x0;
1303         arr[num++] = 0x8;
1304         put_unaligned_be64(naa3_comp_a + target_dev_id, arr + num);
1305         num += 8;
1306         /* SCSI name string: Target device identifier */
1307         arr[num++] = 0x63;      /* proto=sas, UTF-8 */
1308         arr[num++] = 0xa8;      /* piv=1, target device, SCSI name string */
1309         arr[num++] = 0x0;
1310         arr[num++] = 24;
1311         memcpy(arr + num, "naa.32222220", 12);
1312         num += 12;
1313         snprintf(b, sizeof(b), "%08X", target_dev_id);
1314         memcpy(arr + num, b, 8);
1315         num += 8;
1316         memset(arr + num, 0, 4);
1317         num += 4;
1318         return num;
1319 }
1320
1321 static unsigned char vpd84_data[] = {
1322 /* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
1323     0x22,0x22,0x22,0x0,0xbb,0x1,
1324     0x22,0x22,0x22,0x0,0xbb,0x2,
1325 };
1326
1327 /*  Software interface identification VPD page */
1328 static int inquiry_vpd_84(unsigned char *arr)
1329 {
1330         memcpy(arr, vpd84_data, sizeof(vpd84_data));
1331         return sizeof(vpd84_data);
1332 }
1333
1334 /* Management network addresses VPD page */
1335 static int inquiry_vpd_85(unsigned char *arr)
1336 {
1337         int num = 0;
1338         const char *na1 = "https://www.kernel.org/config";
1339         const char *na2 = "http://www.kernel.org/log";
1340         int plen, olen;
1341
1342         arr[num++] = 0x1;       /* lu, storage config */
1343         arr[num++] = 0x0;       /* reserved */
1344         arr[num++] = 0x0;
1345         olen = strlen(na1);
1346         plen = olen + 1;
1347         if (plen % 4)
1348                 plen = ((plen / 4) + 1) * 4;
1349         arr[num++] = plen;      /* length, null termianted, padded */
1350         memcpy(arr + num, na1, olen);
1351         memset(arr + num + olen, 0, plen - olen);
1352         num += plen;
1353
1354         arr[num++] = 0x4;       /* lu, logging */
1355         arr[num++] = 0x0;       /* reserved */
1356         arr[num++] = 0x0;
1357         olen = strlen(na2);
1358         plen = olen + 1;
1359         if (plen % 4)
1360                 plen = ((plen / 4) + 1) * 4;
1361         arr[num++] = plen;      /* length, null terminated, padded */
1362         memcpy(arr + num, na2, olen);
1363         memset(arr + num + olen, 0, plen - olen);
1364         num += plen;
1365
1366         return num;
1367 }
1368
1369 /* SCSI ports VPD page */
1370 static int inquiry_vpd_88(unsigned char *arr, int target_dev_id)
1371 {
1372         int num = 0;
1373         int port_a, port_b;
1374
1375         port_a = target_dev_id + 1;
1376         port_b = port_a + 1;
1377         arr[num++] = 0x0;       /* reserved */
1378         arr[num++] = 0x0;       /* reserved */
1379         arr[num++] = 0x0;
1380         arr[num++] = 0x1;       /* relative port 1 (primary) */
1381         memset(arr + num, 0, 6);
1382         num += 6;
1383         arr[num++] = 0x0;
1384         arr[num++] = 12;        /* length tp descriptor */
1385         /* naa-5 target port identifier (A) */
1386         arr[num++] = 0x61;      /* proto=sas, binary */
1387         arr[num++] = 0x93;      /* PIV=1, target port, NAA */
1388         arr[num++] = 0x0;       /* reserved */
1389         arr[num++] = 0x8;       /* length */
1390         put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1391         num += 8;
1392         arr[num++] = 0x0;       /* reserved */
1393         arr[num++] = 0x0;       /* reserved */
1394         arr[num++] = 0x0;
1395         arr[num++] = 0x2;       /* relative port 2 (secondary) */
1396         memset(arr + num, 0, 6);
1397         num += 6;
1398         arr[num++] = 0x0;
1399         arr[num++] = 12;        /* length tp descriptor */
1400         /* naa-5 target port identifier (B) */
1401         arr[num++] = 0x61;      /* proto=sas, binary */
1402         arr[num++] = 0x93;      /* PIV=1, target port, NAA */
1403         arr[num++] = 0x0;       /* reserved */
1404         arr[num++] = 0x8;       /* length */
1405         put_unaligned_be64(naa3_comp_a + port_b, arr + num);
1406         num += 8;
1407
1408         return num;
1409 }
1410
1411
1412 static unsigned char vpd89_data[] = {
1413 /* from 4th byte */ 0,0,0,0,
1414 'l','i','n','u','x',' ',' ',' ',
1415 'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
1416 '1','2','3','4',
1417 0x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
1418 0xec,0,0,0,
1419 0x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
1420 0,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
1421 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
1422 0x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
1423 0x53,0x41,
1424 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
1425 0x20,0x20,
1426 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
1427 0x10,0x80,
1428 0,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
1429 0x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
1430 0x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
1431 0,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
1432 0x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
1433 0x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
1434 0,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
1435 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1436 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1437 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1438 0x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
1439 0,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
1440 0xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
1441 0,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
1442 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1443 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1444 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1445 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1446 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1447 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1448 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1449 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1450 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1451 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1452 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1453 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
1454 };
1455
1456 /* ATA Information VPD page */
1457 static int inquiry_vpd_89(unsigned char *arr)
1458 {
1459         memcpy(arr, vpd89_data, sizeof(vpd89_data));
1460         return sizeof(vpd89_data);
1461 }
1462
1463
1464 static unsigned char vpdb0_data[] = {
1465         /* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
1466         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1467         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1468         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1469 };
1470
1471 /* Block limits VPD page (SBC-3) */
1472 static int inquiry_vpd_b0(unsigned char *arr)
1473 {
1474         unsigned int gran;
1475
1476         memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
1477
1478         /* Optimal transfer length granularity */
1479         if (sdebug_opt_xferlen_exp != 0 &&
1480             sdebug_physblk_exp < sdebug_opt_xferlen_exp)
1481                 gran = 1 << sdebug_opt_xferlen_exp;
1482         else
1483                 gran = 1 << sdebug_physblk_exp;
1484         put_unaligned_be16(gran, arr + 2);
1485
1486         /* Maximum Transfer Length */
1487         if (sdebug_store_sectors > 0x400)
1488                 put_unaligned_be32(sdebug_store_sectors, arr + 4);
1489
1490         /* Optimal Transfer Length */
1491         put_unaligned_be32(sdebug_opt_blks, &arr[8]);
1492
1493         if (sdebug_lbpu) {
1494                 /* Maximum Unmap LBA Count */
1495                 put_unaligned_be32(sdebug_unmap_max_blocks, &arr[16]);
1496
1497                 /* Maximum Unmap Block Descriptor Count */
1498                 put_unaligned_be32(sdebug_unmap_max_desc, &arr[20]);
1499         }
1500
1501         /* Unmap Granularity Alignment */
1502         if (sdebug_unmap_alignment) {
1503                 put_unaligned_be32(sdebug_unmap_alignment, &arr[28]);
1504                 arr[28] |= 0x80; /* UGAVALID */
1505         }
1506
1507         /* Optimal Unmap Granularity */
1508         put_unaligned_be32(sdebug_unmap_granularity, &arr[24]);
1509
1510         /* Maximum WRITE SAME Length */
1511         put_unaligned_be64(sdebug_write_same_length, &arr[32]);
1512
1513         return 0x3c; /* Mandatory page length for Logical Block Provisioning */
1514 }
1515
1516 /* Block device characteristics VPD page (SBC-3) */
1517 static int inquiry_vpd_b1(struct sdebug_dev_info *devip, unsigned char *arr)
1518 {
1519         memset(arr, 0, 0x3c);
1520         arr[0] = 0;
1521         arr[1] = 1;     /* non rotating medium (e.g. solid state) */
1522         arr[2] = 0;
1523         arr[3] = 5;     /* less than 1.8" */
1524         if (devip->zmodel == BLK_ZONED_HA)
1525                 arr[4] = 1 << 4;        /* zoned field = 01b */
1526
1527         return 0x3c;
1528 }
1529
1530 /* Logical block provisioning VPD page (SBC-4) */
1531 static int inquiry_vpd_b2(unsigned char *arr)
1532 {
1533         memset(arr, 0, 0x4);
1534         arr[0] = 0;                     /* threshold exponent */
1535         if (sdebug_lbpu)
1536                 arr[1] = 1 << 7;
1537         if (sdebug_lbpws)
1538                 arr[1] |= 1 << 6;
1539         if (sdebug_lbpws10)
1540                 arr[1] |= 1 << 5;
1541         if (sdebug_lbprz && scsi_debug_lbp())
1542                 arr[1] |= (sdebug_lbprz & 0x7) << 2;  /* sbc4r07 and later */
1543         /* anc_sup=0; dp=0 (no provisioning group descriptor) */
1544         /* minimum_percentage=0; provisioning_type=0 (unknown) */
1545         /* threshold_percentage=0 */
1546         return 0x4;
1547 }
1548
1549 /* Zoned block device characteristics VPD page (ZBC mandatory) */
1550 static int inquiry_vpd_b6(struct sdebug_dev_info *devip, unsigned char *arr)
1551 {
1552         memset(arr, 0, 0x3c);
1553         arr[0] = 0x1; /* set URSWRZ (unrestricted read in seq. wr req zone) */
1554         /*
1555          * Set Optimal number of open sequential write preferred zones and
1556          * Optimal number of non-sequentially written sequential write
1557          * preferred zones fields to 'not reported' (0xffffffff). Leave other
1558          * fields set to zero, apart from Max. number of open swrz_s field.
1559          */
1560         put_unaligned_be32(0xffffffff, &arr[4]);
1561         put_unaligned_be32(0xffffffff, &arr[8]);
1562         if (sdeb_zbc_model == BLK_ZONED_HM && devip->max_open)
1563                 put_unaligned_be32(devip->max_open, &arr[12]);
1564         else
1565                 put_unaligned_be32(0xffffffff, &arr[12]);
1566         if (devip->zcap < devip->zsize) {
1567                 arr[19] = ZBC_CONSTANT_ZONE_START_OFFSET;
1568                 put_unaligned_be64(devip->zsize, &arr[20]);
1569         } else {
1570                 arr[19] = 0;
1571         }
1572         return 0x3c;
1573 }
1574
1575 #define SDEBUG_LONG_INQ_SZ 96
1576 #define SDEBUG_MAX_INQ_ARR_SZ 584
1577
1578 static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1579 {
1580         unsigned char pq_pdt;
1581         unsigned char *arr;
1582         unsigned char *cmd = scp->cmnd;
1583         u32 alloc_len, n;
1584         int ret;
1585         bool have_wlun, is_disk, is_zbc, is_disk_zbc;
1586
1587         alloc_len = get_unaligned_be16(cmd + 3);
1588         arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
1589         if (! arr)
1590                 return DID_REQUEUE << 16;
1591         is_disk = (sdebug_ptype == TYPE_DISK);
1592         is_zbc = (devip->zmodel != BLK_ZONED_NONE);
1593         is_disk_zbc = (is_disk || is_zbc);
1594         have_wlun = scsi_is_wlun(scp->device->lun);
1595         if (have_wlun)
1596                 pq_pdt = TYPE_WLUN;     /* present, wlun */
1597         else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL))
1598                 pq_pdt = 0x7f;  /* not present, PQ=3, PDT=0x1f */
1599         else
1600                 pq_pdt = (sdebug_ptype & 0x1f);
1601         arr[0] = pq_pdt;
1602         if (0x2 & cmd[1]) {  /* CMDDT bit set */
1603                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 1);
1604                 kfree(arr);
1605                 return check_condition_result;
1606         } else if (0x1 & cmd[1]) {  /* EVPD bit set */
1607                 int lu_id_num, port_group_id, target_dev_id;
1608                 u32 len;
1609                 char lu_id_str[6];
1610                 int host_no = devip->sdbg_host->shost->host_no;
1611                 
1612                 port_group_id = (((host_no + 1) & 0x7f) << 8) +
1613                     (devip->channel & 0x7f);
1614                 if (sdebug_vpd_use_hostno == 0)
1615                         host_no = 0;
1616                 lu_id_num = have_wlun ? -1 : (((host_no + 1) * 2000) +
1617                             (devip->target * 1000) + devip->lun);
1618                 target_dev_id = ((host_no + 1) * 2000) +
1619                                  (devip->target * 1000) - 3;
1620                 len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
1621                 if (0 == cmd[2]) { /* supported vital product data pages */
1622                         arr[1] = cmd[2];        /*sanity */
1623                         n = 4;
1624                         arr[n++] = 0x0;   /* this page */
1625                         arr[n++] = 0x80;  /* unit serial number */
1626                         arr[n++] = 0x83;  /* device identification */
1627                         arr[n++] = 0x84;  /* software interface ident. */
1628                         arr[n++] = 0x85;  /* management network addresses */
1629                         arr[n++] = 0x86;  /* extended inquiry */
1630                         arr[n++] = 0x87;  /* mode page policy */
1631                         arr[n++] = 0x88;  /* SCSI ports */
1632                         if (is_disk_zbc) {        /* SBC or ZBC */
1633                                 arr[n++] = 0x89;  /* ATA information */
1634                                 arr[n++] = 0xb0;  /* Block limits */
1635                                 arr[n++] = 0xb1;  /* Block characteristics */
1636                                 if (is_disk)
1637                                         arr[n++] = 0xb2;  /* LB Provisioning */
1638                                 if (is_zbc)
1639                                         arr[n++] = 0xb6;  /* ZB dev. char. */
1640                         }
1641                         arr[3] = n - 4;   /* number of supported VPD pages */
1642                 } else if (0x80 == cmd[2]) { /* unit serial number */
1643                         arr[1] = cmd[2];        /*sanity */
1644                         arr[3] = len;
1645                         memcpy(&arr[4], lu_id_str, len);
1646                 } else if (0x83 == cmd[2]) { /* device identification */
1647                         arr[1] = cmd[2];        /*sanity */
1648                         arr[3] = inquiry_vpd_83(&arr[4], port_group_id,
1649                                                 target_dev_id, lu_id_num,
1650                                                 lu_id_str, len,
1651                                                 &devip->lu_name);
1652                 } else if (0x84 == cmd[2]) { /* Software interface ident. */
1653                         arr[1] = cmd[2];        /*sanity */
1654                         arr[3] = inquiry_vpd_84(&arr[4]);
1655                 } else if (0x85 == cmd[2]) { /* Management network addresses */
1656                         arr[1] = cmd[2];        /*sanity */
1657                         arr[3] = inquiry_vpd_85(&arr[4]);
1658                 } else if (0x86 == cmd[2]) { /* extended inquiry */
1659                         arr[1] = cmd[2];        /*sanity */
1660                         arr[3] = 0x3c;  /* number of following entries */
1661                         if (sdebug_dif == T10_PI_TYPE3_PROTECTION)
1662                                 arr[4] = 0x4;   /* SPT: GRD_CHK:1 */
1663                         else if (have_dif_prot)
1664                                 arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
1665                         else
1666                                 arr[4] = 0x0;   /* no protection stuff */
1667                         arr[5] = 0x7;   /* head of q, ordered + simple q's */
1668                 } else if (0x87 == cmd[2]) { /* mode page policy */
1669                         arr[1] = cmd[2];        /*sanity */
1670                         arr[3] = 0x8;   /* number of following entries */
1671                         arr[4] = 0x2;   /* disconnect-reconnect mp */
1672                         arr[6] = 0x80;  /* mlus, shared */
1673                         arr[8] = 0x18;   /* protocol specific lu */
1674                         arr[10] = 0x82;  /* mlus, per initiator port */
1675                 } else if (0x88 == cmd[2]) { /* SCSI Ports */
1676                         arr[1] = cmd[2];        /*sanity */
1677                         arr[3] = inquiry_vpd_88(&arr[4], target_dev_id);
1678                 } else if (is_disk_zbc && 0x89 == cmd[2]) { /* ATA info */
1679                         arr[1] = cmd[2];        /*sanity */
1680                         n = inquiry_vpd_89(&arr[4]);
1681                         put_unaligned_be16(n, arr + 2);
1682                 } else if (is_disk_zbc && 0xb0 == cmd[2]) { /* Block limits */
1683                         arr[1] = cmd[2];        /*sanity */
1684                         arr[3] = inquiry_vpd_b0(&arr[4]);
1685                 } else if (is_disk_zbc && 0xb1 == cmd[2]) { /* Block char. */
1686                         arr[1] = cmd[2];        /*sanity */
1687                         arr[3] = inquiry_vpd_b1(devip, &arr[4]);
1688                 } else if (is_disk && 0xb2 == cmd[2]) { /* LB Prov. */
1689                         arr[1] = cmd[2];        /*sanity */
1690                         arr[3] = inquiry_vpd_b2(&arr[4]);
1691                 } else if (is_zbc && cmd[2] == 0xb6) { /* ZB dev. charact. */
1692                         arr[1] = cmd[2];        /*sanity */
1693                         arr[3] = inquiry_vpd_b6(devip, &arr[4]);
1694                 } else {
1695                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
1696                         kfree(arr);
1697                         return check_condition_result;
1698                 }
1699                 len = min_t(u32, get_unaligned_be16(arr + 2) + 4, alloc_len);
1700                 ret = fill_from_dev_buffer(scp, arr,
1701                             min_t(u32, len, SDEBUG_MAX_INQ_ARR_SZ));
1702                 kfree(arr);
1703                 return ret;
1704         }
1705         /* drops through here for a standard inquiry */
1706         arr[1] = sdebug_removable ? 0x80 : 0;   /* Removable disk */
1707         arr[2] = sdebug_scsi_level;
1708         arr[3] = 2;    /* response_data_format==2 */
1709         arr[4] = SDEBUG_LONG_INQ_SZ - 5;
1710         arr[5] = (int)have_dif_prot;    /* PROTECT bit */
1711         if (sdebug_vpd_use_hostno == 0)
1712                 arr[5] |= 0x10; /* claim: implicit TPGS */
1713         arr[6] = 0x10; /* claim: MultiP */
1714         /* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
1715         arr[7] = 0xa; /* claim: LINKED + CMDQUE */
1716         memcpy(&arr[8], sdebug_inq_vendor_id, 8);
1717         memcpy(&arr[16], sdebug_inq_product_id, 16);
1718         memcpy(&arr[32], sdebug_inq_product_rev, 4);
1719         /* Use Vendor Specific area to place driver date in ASCII hex */
1720         memcpy(&arr[36], sdebug_version_date, 8);
1721         /* version descriptors (2 bytes each) follow */
1722         put_unaligned_be16(0xc0, arr + 58);   /* SAM-6 no version claimed */
1723         put_unaligned_be16(0x5c0, arr + 60);  /* SPC-5 no version claimed */
1724         n = 62;
1725         if (is_disk) {          /* SBC-4 no version claimed */
1726                 put_unaligned_be16(0x600, arr + n);
1727                 n += 2;
1728         } else if (sdebug_ptype == TYPE_TAPE) { /* SSC-4 rev 3 */
1729                 put_unaligned_be16(0x525, arr + n);
1730                 n += 2;
1731         } else if (is_zbc) {    /* ZBC BSR INCITS 536 revision 05 */
1732                 put_unaligned_be16(0x624, arr + n);
1733                 n += 2;
1734         }
1735         put_unaligned_be16(0x2100, arr + n);    /* SPL-4 no version claimed */
1736         ret = fill_from_dev_buffer(scp, arr,
1737                             min_t(u32, alloc_len, SDEBUG_LONG_INQ_SZ));
1738         kfree(arr);
1739         return ret;
1740 }
1741
1742 /* See resp_iec_m_pg() for how this data is manipulated */
1743 static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1744                                    0, 0, 0x0, 0x0};
1745
1746 static int resp_requests(struct scsi_cmnd *scp,
1747                          struct sdebug_dev_info *devip)
1748 {
1749         unsigned char *cmd = scp->cmnd;
1750         unsigned char arr[SCSI_SENSE_BUFFERSIZE];       /* assume >= 18 bytes */
1751         bool dsense = !!(cmd[1] & 1);
1752         u32 alloc_len = cmd[4];
1753         u32 len = 18;
1754         int stopped_state = atomic_read(&devip->stopped);
1755
1756         memset(arr, 0, sizeof(arr));
1757         if (stopped_state > 0) {        /* some "pollable" data [spc6r02: 5.12.2] */
1758                 if (dsense) {
1759                         arr[0] = 0x72;
1760                         arr[1] = NOT_READY;
1761                         arr[2] = LOGICAL_UNIT_NOT_READY;
1762                         arr[3] = (stopped_state == 2) ? 0x1 : 0x2;
1763                         len = 8;
1764                 } else {
1765                         arr[0] = 0x70;
1766                         arr[2] = NOT_READY;             /* NO_SENSE in sense_key */
1767                         arr[7] = 0xa;                   /* 18 byte sense buffer */
1768                         arr[12] = LOGICAL_UNIT_NOT_READY;
1769                         arr[13] = (stopped_state == 2) ? 0x1 : 0x2;
1770                 }
1771         } else if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
1772                 /* Information exceptions control mode page: TEST=1, MRIE=6 */
1773                 if (dsense) {
1774                         arr[0] = 0x72;
1775                         arr[1] = 0x0;           /* NO_SENSE in sense_key */
1776                         arr[2] = THRESHOLD_EXCEEDED;
1777                         arr[3] = 0xff;          /* Failure prediction(false) */
1778                         len = 8;
1779                 } else {
1780                         arr[0] = 0x70;
1781                         arr[2] = 0x0;           /* NO_SENSE in sense_key */
1782                         arr[7] = 0xa;           /* 18 byte sense buffer */
1783                         arr[12] = THRESHOLD_EXCEEDED;
1784                         arr[13] = 0xff;         /* Failure prediction(false) */
1785                 }
1786         } else {        /* nothing to report */
1787                 if (dsense) {
1788                         len = 8;
1789                         memset(arr, 0, len);
1790                         arr[0] = 0x72;
1791                 } else {
1792                         memset(arr, 0, len);
1793                         arr[0] = 0x70;
1794                         arr[7] = 0xa;
1795                 }
1796         }
1797         return fill_from_dev_buffer(scp, arr, min_t(u32, len, alloc_len));
1798 }
1799
1800 static int resp_start_stop(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1801 {
1802         unsigned char *cmd = scp->cmnd;
1803         int power_cond, want_stop, stopped_state;
1804         bool changing;
1805
1806         power_cond = (cmd[4] & 0xf0) >> 4;
1807         if (power_cond) {
1808                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 7);
1809                 return check_condition_result;
1810         }
1811         want_stop = !(cmd[4] & 1);
1812         stopped_state = atomic_read(&devip->stopped);
1813         if (stopped_state == 2) {
1814                 ktime_t now_ts = ktime_get_boottime();
1815
1816                 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
1817                         u64 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
1818
1819                         if (diff_ns >= ((u64)sdeb_tur_ms_to_ready * 1000000)) {
1820                                 /* tur_ms_to_ready timer extinguished */
1821                                 atomic_set(&devip->stopped, 0);
1822                                 stopped_state = 0;
1823                         }
1824                 }
1825                 if (stopped_state == 2) {
1826                         if (want_stop) {
1827                                 stopped_state = 1;      /* dummy up success */
1828                         } else {        /* Disallow tur_ms_to_ready delay to be overridden */
1829                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 0 /* START bit */);
1830                                 return check_condition_result;
1831                         }
1832                 }
1833         }
1834         changing = (stopped_state != want_stop);
1835         if (changing)
1836                 atomic_xchg(&devip->stopped, want_stop);
1837         if (!changing || (cmd[1] & 0x1))  /* state unchanged or IMMED bit set in cdb */
1838                 return SDEG_RES_IMMED_MASK;
1839         else
1840                 return 0;
1841 }
1842
1843 static sector_t get_sdebug_capacity(void)
1844 {
1845         static const unsigned int gibibyte = 1073741824;
1846
1847         if (sdebug_virtual_gb > 0)
1848                 return (sector_t)sdebug_virtual_gb *
1849                         (gibibyte / sdebug_sector_size);
1850         else
1851                 return sdebug_store_sectors;
1852 }
1853
1854 #define SDEBUG_READCAP_ARR_SZ 8
1855 static int resp_readcap(struct scsi_cmnd *scp,
1856                         struct sdebug_dev_info *devip)
1857 {
1858         unsigned char arr[SDEBUG_READCAP_ARR_SZ];
1859         unsigned int capac;
1860
1861         /* following just in case virtual_gb changed */
1862         sdebug_capacity = get_sdebug_capacity();
1863         memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
1864         if (sdebug_capacity < 0xffffffff) {
1865                 capac = (unsigned int)sdebug_capacity - 1;
1866                 put_unaligned_be32(capac, arr + 0);
1867         } else
1868                 put_unaligned_be32(0xffffffff, arr + 0);
1869         put_unaligned_be16(sdebug_sector_size, arr + 6);
1870         return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
1871 }
1872
1873 #define SDEBUG_READCAP16_ARR_SZ 32
1874 static int resp_readcap16(struct scsi_cmnd *scp,
1875                           struct sdebug_dev_info *devip)
1876 {
1877         unsigned char *cmd = scp->cmnd;
1878         unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
1879         u32 alloc_len;
1880
1881         alloc_len = get_unaligned_be32(cmd + 10);
1882         /* following just in case virtual_gb changed */
1883         sdebug_capacity = get_sdebug_capacity();
1884         memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
1885         put_unaligned_be64((u64)(sdebug_capacity - 1), arr + 0);
1886         put_unaligned_be32(sdebug_sector_size, arr + 8);
1887         arr[13] = sdebug_physblk_exp & 0xf;
1888         arr[14] = (sdebug_lowest_aligned >> 8) & 0x3f;
1889
1890         if (scsi_debug_lbp()) {
1891                 arr[14] |= 0x80; /* LBPME */
1892                 /* from sbc4r07, this LBPRZ field is 1 bit, but the LBPRZ in
1893                  * the LB Provisioning VPD page is 3 bits. Note that lbprz=2
1894                  * in the wider field maps to 0 in this field.
1895                  */
1896                 if (sdebug_lbprz & 1)   /* precisely what the draft requires */
1897                         arr[14] |= 0x40;
1898         }
1899
1900         /*
1901          * Since the scsi_debug READ CAPACITY implementation always reports the
1902          * total disk capacity, set RC BASIS = 1 for host-managed ZBC devices.
1903          */
1904         if (devip->zmodel == BLK_ZONED_HM)
1905                 arr[12] |= 1 << 4;
1906
1907         arr[15] = sdebug_lowest_aligned & 0xff;
1908
1909         if (have_dif_prot) {
1910                 arr[12] = (sdebug_dif - 1) << 1; /* P_TYPE */
1911                 arr[12] |= 1; /* PROT_EN */
1912         }
1913
1914         return fill_from_dev_buffer(scp, arr,
1915                             min_t(u32, alloc_len, SDEBUG_READCAP16_ARR_SZ));
1916 }
1917
1918 #define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
1919
1920 static int resp_report_tgtpgs(struct scsi_cmnd *scp,
1921                               struct sdebug_dev_info *devip)
1922 {
1923         unsigned char *cmd = scp->cmnd;
1924         unsigned char *arr;
1925         int host_no = devip->sdbg_host->shost->host_no;
1926         int port_group_a, port_group_b, port_a, port_b;
1927         u32 alen, n, rlen;
1928         int ret;
1929
1930         alen = get_unaligned_be32(cmd + 6);
1931         arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
1932         if (! arr)
1933                 return DID_REQUEUE << 16;
1934         /*
1935          * EVPD page 0x88 states we have two ports, one
1936          * real and a fake port with no device connected.
1937          * So we create two port groups with one port each
1938          * and set the group with port B to unavailable.
1939          */
1940         port_a = 0x1; /* relative port A */
1941         port_b = 0x2; /* relative port B */
1942         port_group_a = (((host_no + 1) & 0x7f) << 8) +
1943                         (devip->channel & 0x7f);
1944         port_group_b = (((host_no + 1) & 0x7f) << 8) +
1945                         (devip->channel & 0x7f) + 0x80;
1946
1947         /*
1948          * The asymmetric access state is cycled according to the host_id.
1949          */
1950         n = 4;
1951         if (sdebug_vpd_use_hostno == 0) {
1952                 arr[n++] = host_no % 3; /* Asymm access state */
1953                 arr[n++] = 0x0F; /* claim: all states are supported */
1954         } else {
1955                 arr[n++] = 0x0; /* Active/Optimized path */
1956                 arr[n++] = 0x01; /* only support active/optimized paths */
1957         }
1958         put_unaligned_be16(port_group_a, arr + n);
1959         n += 2;
1960         arr[n++] = 0;    /* Reserved */
1961         arr[n++] = 0;    /* Status code */
1962         arr[n++] = 0;    /* Vendor unique */
1963         arr[n++] = 0x1;  /* One port per group */
1964         arr[n++] = 0;    /* Reserved */
1965         arr[n++] = 0;    /* Reserved */
1966         put_unaligned_be16(port_a, arr + n);
1967         n += 2;
1968         arr[n++] = 3;    /* Port unavailable */
1969         arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
1970         put_unaligned_be16(port_group_b, arr + n);
1971         n += 2;
1972         arr[n++] = 0;    /* Reserved */
1973         arr[n++] = 0;    /* Status code */
1974         arr[n++] = 0;    /* Vendor unique */
1975         arr[n++] = 0x1;  /* One port per group */
1976         arr[n++] = 0;    /* Reserved */
1977         arr[n++] = 0;    /* Reserved */
1978         put_unaligned_be16(port_b, arr + n);
1979         n += 2;
1980
1981         rlen = n - 4;
1982         put_unaligned_be32(rlen, arr + 0);
1983
1984         /*
1985          * Return the smallest value of either
1986          * - The allocated length
1987          * - The constructed command length
1988          * - The maximum array size
1989          */
1990         rlen = min(alen, n);
1991         ret = fill_from_dev_buffer(scp, arr,
1992                            min_t(u32, rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
1993         kfree(arr);
1994         return ret;
1995 }
1996
1997 static int resp_rsup_opcodes(struct scsi_cmnd *scp,
1998                              struct sdebug_dev_info *devip)
1999 {
2000         bool rctd;
2001         u8 reporting_opts, req_opcode, sdeb_i, supp;
2002         u16 req_sa, u;
2003         u32 alloc_len, a_len;
2004         int k, offset, len, errsts, count, bump, na;
2005         const struct opcode_info_t *oip;
2006         const struct opcode_info_t *r_oip;
2007         u8 *arr;
2008         u8 *cmd = scp->cmnd;
2009
2010         rctd = !!(cmd[2] & 0x80);
2011         reporting_opts = cmd[2] & 0x7;
2012         req_opcode = cmd[3];
2013         req_sa = get_unaligned_be16(cmd + 4);
2014         alloc_len = get_unaligned_be32(cmd + 6);
2015         if (alloc_len < 4 || alloc_len > 0xffff) {
2016                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
2017                 return check_condition_result;
2018         }
2019         if (alloc_len > 8192)
2020                 a_len = 8192;
2021         else
2022                 a_len = alloc_len;
2023         arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
2024         if (NULL == arr) {
2025                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
2026                                 INSUFF_RES_ASCQ);
2027                 return check_condition_result;
2028         }
2029         switch (reporting_opts) {
2030         case 0: /* all commands */
2031                 /* count number of commands */
2032                 for (count = 0, oip = opcode_info_arr;
2033                      oip->num_attached != 0xff; ++oip) {
2034                         if (F_INV_OP & oip->flags)
2035                                 continue;
2036                         count += (oip->num_attached + 1);
2037                 }
2038                 bump = rctd ? 20 : 8;
2039                 put_unaligned_be32(count * bump, arr);
2040                 for (offset = 4, oip = opcode_info_arr;
2041                      oip->num_attached != 0xff && offset < a_len; ++oip) {
2042                         if (F_INV_OP & oip->flags)
2043                                 continue;
2044                         na = oip->num_attached;
2045                         arr[offset] = oip->opcode;
2046                         put_unaligned_be16(oip->sa, arr + offset + 2);
2047                         if (rctd)
2048                                 arr[offset + 5] |= 0x2;
2049                         if (FF_SA & oip->flags)
2050                                 arr[offset + 5] |= 0x1;
2051                         put_unaligned_be16(oip->len_mask[0], arr + offset + 6);
2052                         if (rctd)
2053                                 put_unaligned_be16(0xa, arr + offset + 8);
2054                         r_oip = oip;
2055                         for (k = 0, oip = oip->arrp; k < na; ++k, ++oip) {
2056                                 if (F_INV_OP & oip->flags)
2057                                         continue;
2058                                 offset += bump;
2059                                 arr[offset] = oip->opcode;
2060                                 put_unaligned_be16(oip->sa, arr + offset + 2);
2061                                 if (rctd)
2062                                         arr[offset + 5] |= 0x2;
2063                                 if (FF_SA & oip->flags)
2064                                         arr[offset + 5] |= 0x1;
2065                                 put_unaligned_be16(oip->len_mask[0],
2066                                                    arr + offset + 6);
2067                                 if (rctd)
2068                                         put_unaligned_be16(0xa,
2069                                                            arr + offset + 8);
2070                         }
2071                         oip = r_oip;
2072                         offset += bump;
2073                 }
2074                 break;
2075         case 1: /* one command: opcode only */
2076         case 2: /* one command: opcode plus service action */
2077         case 3: /* one command: if sa==0 then opcode only else opcode+sa */
2078                 sdeb_i = opcode_ind_arr[req_opcode];
2079                 oip = &opcode_info_arr[sdeb_i];
2080                 if (F_INV_OP & oip->flags) {
2081                         supp = 1;
2082                         offset = 4;
2083                 } else {
2084                         if (1 == reporting_opts) {
2085                                 if (FF_SA & oip->flags) {
2086                                         mk_sense_invalid_fld(scp, SDEB_IN_CDB,
2087                                                              2, 2);
2088                                         kfree(arr);
2089                                         return check_condition_result;
2090                                 }
2091                                 req_sa = 0;
2092                         } else if (2 == reporting_opts &&
2093                                    0 == (FF_SA & oip->flags)) {
2094                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
2095                                 kfree(arr);     /* point at requested sa */
2096                                 return check_condition_result;
2097                         }
2098                         if (0 == (FF_SA & oip->flags) &&
2099                             req_opcode == oip->opcode)
2100                                 supp = 3;
2101                         else if (0 == (FF_SA & oip->flags)) {
2102                                 na = oip->num_attached;
2103                                 for (k = 0, oip = oip->arrp; k < na;
2104                                      ++k, ++oip) {
2105                                         if (req_opcode == oip->opcode)
2106                                                 break;
2107                                 }
2108                                 supp = (k >= na) ? 1 : 3;
2109                         } else if (req_sa != oip->sa) {
2110                                 na = oip->num_attached;
2111                                 for (k = 0, oip = oip->arrp; k < na;
2112                                      ++k, ++oip) {
2113                                         if (req_sa == oip->sa)
2114                                                 break;
2115                                 }
2116                                 supp = (k >= na) ? 1 : 3;
2117                         } else
2118                                 supp = 3;
2119                         if (3 == supp) {
2120                                 u = oip->len_mask[0];
2121                                 put_unaligned_be16(u, arr + 2);
2122                                 arr[4] = oip->opcode;
2123                                 for (k = 1; k < u; ++k)
2124                                         arr[4 + k] = (k < 16) ?
2125                                                  oip->len_mask[k] : 0xff;
2126                                 offset = 4 + u;
2127                         } else
2128                                 offset = 4;
2129                 }
2130                 arr[1] = (rctd ? 0x80 : 0) | supp;
2131                 if (rctd) {
2132                         put_unaligned_be16(0xa, arr + offset);
2133                         offset += 12;
2134                 }
2135                 break;
2136         default:
2137                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
2138                 kfree(arr);
2139                 return check_condition_result;
2140         }
2141         offset = (offset < a_len) ? offset : a_len;
2142         len = (offset < alloc_len) ? offset : alloc_len;
2143         errsts = fill_from_dev_buffer(scp, arr, len);
2144         kfree(arr);
2145         return errsts;
2146 }
2147
2148 static int resp_rsup_tmfs(struct scsi_cmnd *scp,
2149                           struct sdebug_dev_info *devip)
2150 {
2151         bool repd;
2152         u32 alloc_len, len;
2153         u8 arr[16];
2154         u8 *cmd = scp->cmnd;
2155
2156         memset(arr, 0, sizeof(arr));
2157         repd = !!(cmd[2] & 0x80);
2158         alloc_len = get_unaligned_be32(cmd + 6);
2159         if (alloc_len < 4) {
2160                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
2161                 return check_condition_result;
2162         }
2163         arr[0] = 0xc8;          /* ATS | ATSS | LURS */
2164         arr[1] = 0x1;           /* ITNRS */
2165         if (repd) {
2166                 arr[3] = 0xc;
2167                 len = 16;
2168         } else
2169                 len = 4;
2170
2171         len = (len < alloc_len) ? len : alloc_len;
2172         return fill_from_dev_buffer(scp, arr, len);
2173 }
2174
2175 /* <<Following mode page info copied from ST318451LW>> */
2176
2177 static int resp_err_recov_pg(unsigned char *p, int pcontrol, int target)
2178 {       /* Read-Write Error Recovery page for mode_sense */
2179         unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
2180                                         5, 0, 0xff, 0xff};
2181
2182         memcpy(p, err_recov_pg, sizeof(err_recov_pg));
2183         if (1 == pcontrol)
2184                 memset(p + 2, 0, sizeof(err_recov_pg) - 2);
2185         return sizeof(err_recov_pg);
2186 }
2187
2188 static int resp_disconnect_pg(unsigned char *p, int pcontrol, int target)
2189 {       /* Disconnect-Reconnect page for mode_sense */
2190         unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
2191                                          0, 0, 0, 0, 0, 0, 0, 0};
2192
2193         memcpy(p, disconnect_pg, sizeof(disconnect_pg));
2194         if (1 == pcontrol)
2195                 memset(p + 2, 0, sizeof(disconnect_pg) - 2);
2196         return sizeof(disconnect_pg);
2197 }
2198
2199 static int resp_format_pg(unsigned char *p, int pcontrol, int target)
2200 {       /* Format device page for mode_sense */
2201         unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
2202                                      0, 0, 0, 0, 0, 0, 0, 0,
2203                                      0, 0, 0, 0, 0x40, 0, 0, 0};
2204
2205         memcpy(p, format_pg, sizeof(format_pg));
2206         put_unaligned_be16(sdebug_sectors_per, p + 10);
2207         put_unaligned_be16(sdebug_sector_size, p + 12);
2208         if (sdebug_removable)
2209                 p[20] |= 0x20; /* should agree with INQUIRY */
2210         if (1 == pcontrol)
2211                 memset(p + 2, 0, sizeof(format_pg) - 2);
2212         return sizeof(format_pg);
2213 }
2214
2215 static unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
2216                                      0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
2217                                      0, 0, 0, 0};
2218
2219 static int resp_caching_pg(unsigned char *p, int pcontrol, int target)
2220 {       /* Caching page for mode_sense */
2221         unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
2222                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
2223         unsigned char d_caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
2224                 0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
2225
2226         if (SDEBUG_OPT_N_WCE & sdebug_opts)
2227                 caching_pg[2] &= ~0x4;  /* set WCE=0 (default WCE=1) */
2228         memcpy(p, caching_pg, sizeof(caching_pg));
2229         if (1 == pcontrol)
2230                 memcpy(p + 2, ch_caching_pg, sizeof(ch_caching_pg));
2231         else if (2 == pcontrol)
2232                 memcpy(p, d_caching_pg, sizeof(d_caching_pg));
2233         return sizeof(caching_pg);
2234 }
2235
2236 static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2237                                     0, 0, 0x2, 0x4b};
2238
2239 static int resp_ctrl_m_pg(unsigned char *p, int pcontrol, int target)
2240 {       /* Control mode page for mode_sense */
2241         unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
2242                                         0, 0, 0, 0};
2243         unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2244                                      0, 0, 0x2, 0x4b};
2245
2246         if (sdebug_dsense)
2247                 ctrl_m_pg[2] |= 0x4;
2248         else
2249                 ctrl_m_pg[2] &= ~0x4;
2250
2251         if (sdebug_ato)
2252                 ctrl_m_pg[5] |= 0x80; /* ATO=1 */
2253
2254         memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
2255         if (1 == pcontrol)
2256                 memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
2257         else if (2 == pcontrol)
2258                 memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
2259         return sizeof(ctrl_m_pg);
2260 }
2261
2262
2263 static int resp_iec_m_pg(unsigned char *p, int pcontrol, int target)
2264 {       /* Informational Exceptions control mode page for mode_sense */
2265         unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
2266                                        0, 0, 0x0, 0x0};
2267         unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
2268                                       0, 0, 0x0, 0x0};
2269
2270         memcpy(p, iec_m_pg, sizeof(iec_m_pg));
2271         if (1 == pcontrol)
2272                 memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
2273         else if (2 == pcontrol)
2274                 memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
2275         return sizeof(iec_m_pg);
2276 }
2277
2278 static int resp_sas_sf_m_pg(unsigned char *p, int pcontrol, int target)
2279 {       /* SAS SSP mode page - short format for mode_sense */
2280         unsigned char sas_sf_m_pg[] = {0x19, 0x6,
2281                 0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
2282
2283         memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
2284         if (1 == pcontrol)
2285                 memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
2286         return sizeof(sas_sf_m_pg);
2287 }
2288
2289
2290 static int resp_sas_pcd_m_spg(unsigned char *p, int pcontrol, int target,
2291                               int target_dev_id)
2292 {       /* SAS phy control and discover mode page for mode_sense */
2293         unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
2294                     0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
2295                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2296                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2297                     0x2, 0, 0, 0, 0, 0, 0, 0,
2298                     0x88, 0x99, 0, 0, 0, 0, 0, 0,
2299                     0, 0, 0, 0, 0, 0, 0, 0,
2300                     0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
2301                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2302                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2303                     0x3, 0, 0, 0, 0, 0, 0, 0,
2304                     0x88, 0x99, 0, 0, 0, 0, 0, 0,
2305                     0, 0, 0, 0, 0, 0, 0, 0,
2306                 };
2307         int port_a, port_b;
2308
2309         put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 16);
2310         put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 24);
2311         put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 64);
2312         put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 72);
2313         port_a = target_dev_id + 1;
2314         port_b = port_a + 1;
2315         memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
2316         put_unaligned_be32(port_a, p + 20);
2317         put_unaligned_be32(port_b, p + 48 + 20);
2318         if (1 == pcontrol)
2319                 memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
2320         return sizeof(sas_pcd_m_pg);
2321 }
2322
2323 static int resp_sas_sha_m_spg(unsigned char *p, int pcontrol)
2324 {       /* SAS SSP shared protocol specific port mode subpage */
2325         unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
2326                     0, 0, 0, 0, 0, 0, 0, 0,
2327                 };
2328
2329         memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
2330         if (1 == pcontrol)
2331                 memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
2332         return sizeof(sas_sha_m_pg);
2333 }
2334
2335 #define SDEBUG_MAX_MSENSE_SZ 256
2336
2337 static int resp_mode_sense(struct scsi_cmnd *scp,
2338                            struct sdebug_dev_info *devip)
2339 {
2340         int pcontrol, pcode, subpcode, bd_len;
2341         unsigned char dev_spec;
2342         u32 alloc_len, offset, len;
2343         int target_dev_id;
2344         int target = scp->device->id;
2345         unsigned char *ap;
2346         unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
2347         unsigned char *cmd = scp->cmnd;
2348         bool dbd, llbaa, msense_6, is_disk, is_zbc, bad_pcode;
2349
2350         dbd = !!(cmd[1] & 0x8);         /* disable block descriptors */
2351         pcontrol = (cmd[2] & 0xc0) >> 6;
2352         pcode = cmd[2] & 0x3f;
2353         subpcode = cmd[3];
2354         msense_6 = (MODE_SENSE == cmd[0]);
2355         llbaa = msense_6 ? false : !!(cmd[1] & 0x10);
2356         is_disk = (sdebug_ptype == TYPE_DISK);
2357         is_zbc = (devip->zmodel != BLK_ZONED_NONE);
2358         if ((is_disk || is_zbc) && !dbd)
2359                 bd_len = llbaa ? 16 : 8;
2360         else
2361                 bd_len = 0;
2362         alloc_len = msense_6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2363         memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
2364         if (0x3 == pcontrol) {  /* Saving values not supported */
2365                 mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
2366                 return check_condition_result;
2367         }
2368         target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2369                         (devip->target * 1000) - 3;
2370         /* for disks+zbc set DPOFUA bit and clear write protect (WP) bit */
2371         if (is_disk || is_zbc) {
2372                 dev_spec = 0x10;        /* =0x90 if WP=1 implies read-only */
2373                 if (sdebug_wp)
2374                         dev_spec |= 0x80;
2375         } else
2376                 dev_spec = 0x0;
2377         if (msense_6) {
2378                 arr[2] = dev_spec;
2379                 arr[3] = bd_len;
2380                 offset = 4;
2381         } else {
2382                 arr[3] = dev_spec;
2383                 if (16 == bd_len)
2384                         arr[4] = 0x1;   /* set LONGLBA bit */
2385                 arr[7] = bd_len;        /* assume 255 or less */
2386                 offset = 8;
2387         }
2388         ap = arr + offset;
2389         if ((bd_len > 0) && (!sdebug_capacity))
2390                 sdebug_capacity = get_sdebug_capacity();
2391
2392         if (8 == bd_len) {
2393                 if (sdebug_capacity > 0xfffffffe)
2394                         put_unaligned_be32(0xffffffff, ap + 0);
2395                 else
2396                         put_unaligned_be32(sdebug_capacity, ap + 0);
2397                 put_unaligned_be16(sdebug_sector_size, ap + 6);
2398                 offset += bd_len;
2399                 ap = arr + offset;
2400         } else if (16 == bd_len) {
2401                 put_unaligned_be64((u64)sdebug_capacity, ap + 0);
2402                 put_unaligned_be32(sdebug_sector_size, ap + 12);
2403                 offset += bd_len;
2404                 ap = arr + offset;
2405         }
2406
2407         if ((subpcode > 0x0) && (subpcode < 0xff) && (0x19 != pcode)) {
2408                 /* TODO: Control Extension page */
2409                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2410                 return check_condition_result;
2411         }
2412         bad_pcode = false;
2413
2414         switch (pcode) {
2415         case 0x1:       /* Read-Write error recovery page, direct access */
2416                 len = resp_err_recov_pg(ap, pcontrol, target);
2417                 offset += len;
2418                 break;
2419         case 0x2:       /* Disconnect-Reconnect page, all devices */
2420                 len = resp_disconnect_pg(ap, pcontrol, target);
2421                 offset += len;
2422                 break;
2423         case 0x3:       /* Format device page, direct access */
2424                 if (is_disk) {
2425                         len = resp_format_pg(ap, pcontrol, target);
2426                         offset += len;
2427                 } else
2428                         bad_pcode = true;
2429                 break;
2430         case 0x8:       /* Caching page, direct access */
2431                 if (is_disk || is_zbc) {
2432                         len = resp_caching_pg(ap, pcontrol, target);
2433                         offset += len;
2434                 } else
2435                         bad_pcode = true;
2436                 break;
2437         case 0xa:       /* Control Mode page, all devices */
2438                 len = resp_ctrl_m_pg(ap, pcontrol, target);
2439                 offset += len;
2440                 break;
2441         case 0x19:      /* if spc==1 then sas phy, control+discover */
2442                 if ((subpcode > 0x2) && (subpcode < 0xff)) {
2443                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2444                         return check_condition_result;
2445                 }
2446                 len = 0;
2447                 if ((0x0 == subpcode) || (0xff == subpcode))
2448                         len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2449                 if ((0x1 == subpcode) || (0xff == subpcode))
2450                         len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2451                                                   target_dev_id);
2452                 if ((0x2 == subpcode) || (0xff == subpcode))
2453                         len += resp_sas_sha_m_spg(ap + len, pcontrol);
2454                 offset += len;
2455                 break;
2456         case 0x1c:      /* Informational Exceptions Mode page, all devices */
2457                 len = resp_iec_m_pg(ap, pcontrol, target);
2458                 offset += len;
2459                 break;
2460         case 0x3f:      /* Read all Mode pages */
2461                 if ((0 == subpcode) || (0xff == subpcode)) {
2462                         len = resp_err_recov_pg(ap, pcontrol, target);
2463                         len += resp_disconnect_pg(ap + len, pcontrol, target);
2464                         if (is_disk) {
2465                                 len += resp_format_pg(ap + len, pcontrol,
2466                                                       target);
2467                                 len += resp_caching_pg(ap + len, pcontrol,
2468                                                        target);
2469                         } else if (is_zbc) {
2470                                 len += resp_caching_pg(ap + len, pcontrol,
2471                                                        target);
2472                         }
2473                         len += resp_ctrl_m_pg(ap + len, pcontrol, target);
2474                         len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2475                         if (0xff == subpcode) {
2476                                 len += resp_sas_pcd_m_spg(ap + len, pcontrol,
2477                                                   target, target_dev_id);
2478                                 len += resp_sas_sha_m_spg(ap + len, pcontrol);
2479                         }
2480                         len += resp_iec_m_pg(ap + len, pcontrol, target);
2481                         offset += len;
2482                 } else {
2483                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2484                         return check_condition_result;
2485                 }
2486                 break;
2487         default:
2488                 bad_pcode = true;
2489                 break;
2490         }
2491         if (bad_pcode) {
2492                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2493                 return check_condition_result;
2494         }
2495         if (msense_6)
2496                 arr[0] = offset - 1;
2497         else
2498                 put_unaligned_be16((offset - 2), arr + 0);
2499         return fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, offset));
2500 }
2501
2502 #define SDEBUG_MAX_MSELECT_SZ 512
2503
2504 static int resp_mode_select(struct scsi_cmnd *scp,
2505                             struct sdebug_dev_info *devip)
2506 {
2507         int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
2508         int param_len, res, mpage;
2509         unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
2510         unsigned char *cmd = scp->cmnd;
2511         int mselect6 = (MODE_SELECT == cmd[0]);
2512
2513         memset(arr, 0, sizeof(arr));
2514         pf = cmd[1] & 0x10;
2515         sp = cmd[1] & 0x1;
2516         param_len = mselect6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2517         if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
2518                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, mselect6 ? 4 : 7, -1);
2519                 return check_condition_result;
2520         }
2521         res = fetch_to_dev_buffer(scp, arr, param_len);
2522         if (-1 == res)
2523                 return DID_ERROR << 16;
2524         else if (sdebug_verbose && (res < param_len))
2525                 sdev_printk(KERN_INFO, scp->device,
2526                             "%s: cdb indicated=%d, IO sent=%d bytes\n",
2527                             __func__, param_len, res);
2528         md_len = mselect6 ? (arr[0] + 1) : (get_unaligned_be16(arr + 0) + 2);
2529         bd_len = mselect6 ? arr[3] : get_unaligned_be16(arr + 6);
2530         off = bd_len + (mselect6 ? 4 : 8);
2531         if (md_len > 2 || off >= res) {
2532                 mk_sense_invalid_fld(scp, SDEB_IN_DATA, 0, -1);
2533                 return check_condition_result;
2534         }
2535         mpage = arr[off] & 0x3f;
2536         ps = !!(arr[off] & 0x80);
2537         if (ps) {
2538                 mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 7);
2539                 return check_condition_result;
2540         }
2541         spf = !!(arr[off] & 0x40);
2542         pg_len = spf ? (get_unaligned_be16(arr + off + 2) + 4) :
2543                        (arr[off + 1] + 2);
2544         if ((pg_len + off) > param_len) {
2545                 mk_sense_buffer(scp, ILLEGAL_REQUEST,
2546                                 PARAMETER_LIST_LENGTH_ERR, 0);
2547                 return check_condition_result;
2548         }
2549         switch (mpage) {
2550         case 0x8:      /* Caching Mode page */
2551                 if (caching_pg[1] == arr[off + 1]) {
2552                         memcpy(caching_pg + 2, arr + off + 2,
2553                                sizeof(caching_pg) - 2);
2554                         goto set_mode_changed_ua;
2555                 }
2556                 break;
2557         case 0xa:      /* Control Mode page */
2558                 if (ctrl_m_pg[1] == arr[off + 1]) {
2559                         memcpy(ctrl_m_pg + 2, arr + off + 2,
2560                                sizeof(ctrl_m_pg) - 2);
2561                         if (ctrl_m_pg[4] & 0x8)
2562                                 sdebug_wp = true;
2563                         else
2564                                 sdebug_wp = false;
2565                         sdebug_dsense = !!(ctrl_m_pg[2] & 0x4);
2566                         goto set_mode_changed_ua;
2567                 }
2568                 break;
2569         case 0x1c:      /* Informational Exceptions Mode page */
2570                 if (iec_m_pg[1] == arr[off + 1]) {
2571                         memcpy(iec_m_pg + 2, arr + off + 2,
2572                                sizeof(iec_m_pg) - 2);
2573                         goto set_mode_changed_ua;
2574                 }
2575                 break;
2576         default:
2577                 break;
2578         }
2579         mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 5);
2580         return check_condition_result;
2581 set_mode_changed_ua:
2582         set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2583         return 0;
2584 }
2585
2586 static int resp_temp_l_pg(unsigned char *arr)
2587 {
2588         unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
2589                                      0x0, 0x1, 0x3, 0x2, 0x0, 65,
2590                 };
2591
2592         memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
2593         return sizeof(temp_l_pg);
2594 }
2595
2596 static int resp_ie_l_pg(unsigned char *arr)
2597 {
2598         unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
2599                 };
2600
2601         memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
2602         if (iec_m_pg[2] & 0x4) {        /* TEST bit set */
2603                 arr[4] = THRESHOLD_EXCEEDED;
2604                 arr[5] = 0xff;
2605         }
2606         return sizeof(ie_l_pg);
2607 }
2608
2609 static int resp_env_rep_l_spg(unsigned char *arr)
2610 {
2611         unsigned char env_rep_l_spg[] = {0x0, 0x0, 0x23, 0x8,
2612                                          0x0, 40, 72, 0xff, 45, 18, 0, 0,
2613                                          0x1, 0x0, 0x23, 0x8,
2614                                          0x0, 55, 72, 35, 55, 45, 0, 0,
2615                 };
2616
2617         memcpy(arr, env_rep_l_spg, sizeof(env_rep_l_spg));
2618         return sizeof(env_rep_l_spg);
2619 }
2620
2621 #define SDEBUG_MAX_LSENSE_SZ 512
2622
2623 static int resp_log_sense(struct scsi_cmnd *scp,
2624                           struct sdebug_dev_info *devip)
2625 {
2626         int ppc, sp, pcode, subpcode;
2627         u32 alloc_len, len, n;
2628         unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
2629         unsigned char *cmd = scp->cmnd;
2630
2631         memset(arr, 0, sizeof(arr));
2632         ppc = cmd[1] & 0x2;
2633         sp = cmd[1] & 0x1;
2634         if (ppc || sp) {
2635                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, ppc ? 1 : 0);
2636                 return check_condition_result;
2637         }
2638         pcode = cmd[2] & 0x3f;
2639         subpcode = cmd[3] & 0xff;
2640         alloc_len = get_unaligned_be16(cmd + 7);
2641         arr[0] = pcode;
2642         if (0 == subpcode) {
2643                 switch (pcode) {
2644                 case 0x0:       /* Supported log pages log page */
2645                         n = 4;
2646                         arr[n++] = 0x0;         /* this page */
2647                         arr[n++] = 0xd;         /* Temperature */
2648                         arr[n++] = 0x2f;        /* Informational exceptions */
2649                         arr[3] = n - 4;
2650                         break;
2651                 case 0xd:       /* Temperature log page */
2652                         arr[3] = resp_temp_l_pg(arr + 4);
2653                         break;
2654                 case 0x2f:      /* Informational exceptions log page */
2655                         arr[3] = resp_ie_l_pg(arr + 4);
2656                         break;
2657                 default:
2658                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2659                         return check_condition_result;
2660                 }
2661         } else if (0xff == subpcode) {
2662                 arr[0] |= 0x40;
2663                 arr[1] = subpcode;
2664                 switch (pcode) {
2665                 case 0x0:       /* Supported log pages and subpages log page */
2666                         n = 4;
2667                         arr[n++] = 0x0;
2668                         arr[n++] = 0x0;         /* 0,0 page */
2669                         arr[n++] = 0x0;
2670                         arr[n++] = 0xff;        /* this page */
2671                         arr[n++] = 0xd;
2672                         arr[n++] = 0x0;         /* Temperature */
2673                         arr[n++] = 0xd;
2674                         arr[n++] = 0x1;         /* Environment reporting */
2675                         arr[n++] = 0xd;
2676                         arr[n++] = 0xff;        /* all 0xd subpages */
2677                         arr[n++] = 0x2f;
2678                         arr[n++] = 0x0; /* Informational exceptions */
2679                         arr[n++] = 0x2f;
2680                         arr[n++] = 0xff;        /* all 0x2f subpages */
2681                         arr[3] = n - 4;
2682                         break;
2683                 case 0xd:       /* Temperature subpages */
2684                         n = 4;
2685                         arr[n++] = 0xd;
2686                         arr[n++] = 0x0;         /* Temperature */
2687                         arr[n++] = 0xd;
2688                         arr[n++] = 0x1;         /* Environment reporting */
2689                         arr[n++] = 0xd;
2690                         arr[n++] = 0xff;        /* these subpages */
2691                         arr[3] = n - 4;
2692                         break;
2693                 case 0x2f:      /* Informational exceptions subpages */
2694                         n = 4;
2695                         arr[n++] = 0x2f;
2696                         arr[n++] = 0x0;         /* Informational exceptions */
2697                         arr[n++] = 0x2f;
2698                         arr[n++] = 0xff;        /* these subpages */
2699                         arr[3] = n - 4;
2700                         break;
2701                 default:
2702                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2703                         return check_condition_result;
2704                 }
2705         } else if (subpcode > 0) {
2706                 arr[0] |= 0x40;
2707                 arr[1] = subpcode;
2708                 if (pcode == 0xd && subpcode == 1)
2709                         arr[3] = resp_env_rep_l_spg(arr + 4);
2710                 else {
2711                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2712                         return check_condition_result;
2713                 }
2714         } else {
2715                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2716                 return check_condition_result;
2717         }
2718         len = min_t(u32, get_unaligned_be16(arr + 2) + 4, alloc_len);
2719         return fill_from_dev_buffer(scp, arr,
2720                     min_t(u32, len, SDEBUG_MAX_INQ_ARR_SZ));
2721 }
2722
2723 static inline bool sdebug_dev_is_zoned(struct sdebug_dev_info *devip)
2724 {
2725         return devip->nr_zones != 0;
2726 }
2727
2728 static struct sdeb_zone_state *zbc_zone(struct sdebug_dev_info *devip,
2729                                         unsigned long long lba)
2730 {
2731         u32 zno = lba >> devip->zsize_shift;
2732         struct sdeb_zone_state *zsp;
2733
2734         if (devip->zcap == devip->zsize || zno < devip->nr_conv_zones)
2735                 return &devip->zstate[zno];
2736
2737         /*
2738          * If the zone capacity is less than the zone size, adjust for gap
2739          * zones.
2740          */
2741         zno = 2 * zno - devip->nr_conv_zones;
2742         WARN_ONCE(zno >= devip->nr_zones, "%u > %u\n", zno, devip->nr_zones);
2743         zsp = &devip->zstate[zno];
2744         if (lba >= zsp->z_start + zsp->z_size)
2745                 zsp++;
2746         WARN_ON_ONCE(lba >= zsp->z_start + zsp->z_size);
2747         return zsp;
2748 }
2749
2750 static inline bool zbc_zone_is_conv(struct sdeb_zone_state *zsp)
2751 {
2752         return zsp->z_type == ZBC_ZTYPE_CNV;
2753 }
2754
2755 static inline bool zbc_zone_is_gap(struct sdeb_zone_state *zsp)
2756 {
2757         return zsp->z_type == ZBC_ZTYPE_GAP;
2758 }
2759
2760 static inline bool zbc_zone_is_seq(struct sdeb_zone_state *zsp)
2761 {
2762         return !zbc_zone_is_conv(zsp) && !zbc_zone_is_gap(zsp);
2763 }
2764
2765 static void zbc_close_zone(struct sdebug_dev_info *devip,
2766                            struct sdeb_zone_state *zsp)
2767 {
2768         enum sdebug_z_cond zc;
2769
2770         if (!zbc_zone_is_seq(zsp))
2771                 return;
2772
2773         zc = zsp->z_cond;
2774         if (!(zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN))
2775                 return;
2776
2777         if (zc == ZC2_IMPLICIT_OPEN)
2778                 devip->nr_imp_open--;
2779         else
2780                 devip->nr_exp_open--;
2781
2782         if (zsp->z_wp == zsp->z_start) {
2783                 zsp->z_cond = ZC1_EMPTY;
2784         } else {
2785                 zsp->z_cond = ZC4_CLOSED;
2786                 devip->nr_closed++;
2787         }
2788 }
2789
2790 static void zbc_close_imp_open_zone(struct sdebug_dev_info *devip)
2791 {
2792         struct sdeb_zone_state *zsp = &devip->zstate[0];
2793         unsigned int i;
2794
2795         for (i = 0; i < devip->nr_zones; i++, zsp++) {
2796                 if (zsp->z_cond == ZC2_IMPLICIT_OPEN) {
2797                         zbc_close_zone(devip, zsp);
2798                         return;
2799                 }
2800         }
2801 }
2802
2803 static void zbc_open_zone(struct sdebug_dev_info *devip,
2804                           struct sdeb_zone_state *zsp, bool explicit)
2805 {
2806         enum sdebug_z_cond zc;
2807
2808         if (!zbc_zone_is_seq(zsp))
2809                 return;
2810
2811         zc = zsp->z_cond;
2812         if ((explicit && zc == ZC3_EXPLICIT_OPEN) ||
2813             (!explicit && zc == ZC2_IMPLICIT_OPEN))
2814                 return;
2815
2816         /* Close an implicit open zone if necessary */
2817         if (explicit && zsp->z_cond == ZC2_IMPLICIT_OPEN)
2818                 zbc_close_zone(devip, zsp);
2819         else if (devip->max_open &&
2820                  devip->nr_imp_open + devip->nr_exp_open >= devip->max_open)
2821                 zbc_close_imp_open_zone(devip);
2822
2823         if (zsp->z_cond == ZC4_CLOSED)
2824                 devip->nr_closed--;
2825         if (explicit) {
2826                 zsp->z_cond = ZC3_EXPLICIT_OPEN;
2827                 devip->nr_exp_open++;
2828         } else {
2829                 zsp->z_cond = ZC2_IMPLICIT_OPEN;
2830                 devip->nr_imp_open++;
2831         }
2832 }
2833
2834 static inline void zbc_set_zone_full(struct sdebug_dev_info *devip,
2835                                      struct sdeb_zone_state *zsp)
2836 {
2837         switch (zsp->z_cond) {
2838         case ZC2_IMPLICIT_OPEN:
2839                 devip->nr_imp_open--;
2840                 break;
2841         case ZC3_EXPLICIT_OPEN:
2842                 devip->nr_exp_open--;
2843                 break;
2844         default:
2845                 WARN_ONCE(true, "Invalid zone %llu condition %x\n",
2846                           zsp->z_start, zsp->z_cond);
2847                 break;
2848         }
2849         zsp->z_cond = ZC5_FULL;
2850 }
2851
2852 static void zbc_inc_wp(struct sdebug_dev_info *devip,
2853                        unsigned long long lba, unsigned int num)
2854 {
2855         struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
2856         unsigned long long n, end, zend = zsp->z_start + zsp->z_size;
2857
2858         if (!zbc_zone_is_seq(zsp))
2859                 return;
2860
2861         if (zsp->z_type == ZBC_ZTYPE_SWR) {
2862                 zsp->z_wp += num;
2863                 if (zsp->z_wp >= zend)
2864                         zbc_set_zone_full(devip, zsp);
2865                 return;
2866         }
2867
2868         while (num) {
2869                 if (lba != zsp->z_wp)
2870                         zsp->z_non_seq_resource = true;
2871
2872                 end = lba + num;
2873                 if (end >= zend) {
2874                         n = zend - lba;
2875                         zsp->z_wp = zend;
2876                 } else if (end > zsp->z_wp) {
2877                         n = num;
2878                         zsp->z_wp = end;
2879                 } else {
2880                         n = num;
2881                 }
2882                 if (zsp->z_wp >= zend)
2883                         zbc_set_zone_full(devip, zsp);
2884
2885                 num -= n;
2886                 lba += n;
2887                 if (num) {
2888                         zsp++;
2889                         zend = zsp->z_start + zsp->z_size;
2890                 }
2891         }
2892 }
2893
2894 static int check_zbc_access_params(struct scsi_cmnd *scp,
2895                         unsigned long long lba, unsigned int num, bool write)
2896 {
2897         struct scsi_device *sdp = scp->device;
2898         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
2899         struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
2900         struct sdeb_zone_state *zsp_end = zbc_zone(devip, lba + num - 1);
2901
2902         if (!write) {
2903                 if (devip->zmodel == BLK_ZONED_HA)
2904                         return 0;
2905                 /* For host-managed, reads cannot cross zone types boundaries */
2906                 if (zsp->z_type != zsp_end->z_type) {
2907                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
2908                                         LBA_OUT_OF_RANGE,
2909                                         READ_INVDATA_ASCQ);
2910                         return check_condition_result;
2911                 }
2912                 return 0;
2913         }
2914
2915         /* Writing into a gap zone is not allowed */
2916         if (zbc_zone_is_gap(zsp)) {
2917                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE,
2918                                 ATTEMPT_ACCESS_GAP);
2919                 return check_condition_result;
2920         }
2921
2922         /* No restrictions for writes within conventional zones */
2923         if (zbc_zone_is_conv(zsp)) {
2924                 if (!zbc_zone_is_conv(zsp_end)) {
2925                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
2926                                         LBA_OUT_OF_RANGE,
2927                                         WRITE_BOUNDARY_ASCQ);
2928                         return check_condition_result;
2929                 }
2930                 return 0;
2931         }
2932
2933         if (zsp->z_type == ZBC_ZTYPE_SWR) {
2934                 /* Writes cannot cross sequential zone boundaries */
2935                 if (zsp_end != zsp) {
2936                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
2937                                         LBA_OUT_OF_RANGE,
2938                                         WRITE_BOUNDARY_ASCQ);
2939                         return check_condition_result;
2940                 }
2941                 /* Cannot write full zones */
2942                 if (zsp->z_cond == ZC5_FULL) {
2943                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
2944                                         INVALID_FIELD_IN_CDB, 0);
2945                         return check_condition_result;
2946                 }
2947                 /* Writes must be aligned to the zone WP */
2948                 if (lba != zsp->z_wp) {
2949                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
2950                                         LBA_OUT_OF_RANGE,
2951                                         UNALIGNED_WRITE_ASCQ);
2952                         return check_condition_result;
2953                 }
2954         }
2955
2956         /* Handle implicit open of closed and empty zones */
2957         if (zsp->z_cond == ZC1_EMPTY || zsp->z_cond == ZC4_CLOSED) {
2958                 if (devip->max_open &&
2959                     devip->nr_exp_open >= devip->max_open) {
2960                         mk_sense_buffer(scp, DATA_PROTECT,
2961                                         INSUFF_RES_ASC,
2962                                         INSUFF_ZONE_ASCQ);
2963                         return check_condition_result;
2964                 }
2965                 zbc_open_zone(devip, zsp, false);
2966         }
2967
2968         return 0;
2969 }
2970
2971 static inline int check_device_access_params
2972                         (struct scsi_cmnd *scp, unsigned long long lba,
2973                          unsigned int num, bool write)
2974 {
2975         struct scsi_device *sdp = scp->device;
2976         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
2977
2978         if (lba + num > sdebug_capacity) {
2979                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2980                 return check_condition_result;
2981         }
2982         /* transfer length excessive (tie in to block limits VPD page) */
2983         if (num > sdebug_store_sectors) {
2984                 /* needs work to find which cdb byte 'num' comes from */
2985                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2986                 return check_condition_result;
2987         }
2988         if (write && unlikely(sdebug_wp)) {
2989                 mk_sense_buffer(scp, DATA_PROTECT, WRITE_PROTECTED, 0x2);
2990                 return check_condition_result;
2991         }
2992         if (sdebug_dev_is_zoned(devip))
2993                 return check_zbc_access_params(scp, lba, num, write);
2994
2995         return 0;
2996 }
2997
2998 /*
2999  * Note: if BUG_ON() fires it usually indicates a problem with the parser
3000  * tables. Perhaps a missing F_FAKE_RW or FF_MEDIA_IO flag. Response functions
3001  * that access any of the "stores" in struct sdeb_store_info should call this
3002  * function with bug_if_fake_rw set to true.
3003  */
3004 static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip,
3005                                                 bool bug_if_fake_rw)
3006 {
3007         if (sdebug_fake_rw) {
3008                 BUG_ON(bug_if_fake_rw); /* See note above */
3009                 return NULL;
3010         }
3011         return xa_load(per_store_ap, devip->sdbg_host->si_idx);
3012 }
3013
3014 /* Returns number of bytes copied or -1 if error. */
3015 static int do_device_access(struct sdeb_store_info *sip, struct scsi_cmnd *scp,
3016                             u32 sg_skip, u64 lba, u32 num, bool do_write)
3017 {
3018         int ret;
3019         u64 block, rest = 0;
3020         enum dma_data_direction dir;
3021         struct scsi_data_buffer *sdb = &scp->sdb;
3022         u8 *fsp;
3023
3024         if (do_write) {
3025                 dir = DMA_TO_DEVICE;
3026                 write_since_sync = true;
3027         } else {
3028                 dir = DMA_FROM_DEVICE;
3029         }
3030
3031         if (!sdb->length || !sip)
3032                 return 0;
3033         if (scp->sc_data_direction != dir)
3034                 return -1;
3035         fsp = sip->storep;
3036
3037         block = do_div(lba, sdebug_store_sectors);
3038         if (block + num > sdebug_store_sectors)
3039                 rest = block + num - sdebug_store_sectors;
3040
3041         ret = sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
3042                    fsp + (block * sdebug_sector_size),
3043                    (num - rest) * sdebug_sector_size, sg_skip, do_write);
3044         if (ret != (num - rest) * sdebug_sector_size)
3045                 return ret;
3046
3047         if (rest) {
3048                 ret += sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
3049                             fsp, rest * sdebug_sector_size,
3050                             sg_skip + ((num - rest) * sdebug_sector_size),
3051                             do_write);
3052         }
3053
3054         return ret;
3055 }
3056
3057 /* Returns number of bytes copied or -1 if error. */
3058 static int do_dout_fetch(struct scsi_cmnd *scp, u32 num, u8 *doutp)
3059 {
3060         struct scsi_data_buffer *sdb = &scp->sdb;
3061
3062         if (!sdb->length)
3063                 return 0;
3064         if (scp->sc_data_direction != DMA_TO_DEVICE)
3065                 return -1;
3066         return sg_copy_buffer(sdb->table.sgl, sdb->table.nents, doutp,
3067                               num * sdebug_sector_size, 0, true);
3068 }
3069
3070 /* If sip->storep+lba compares equal to arr(num), then copy top half of
3071  * arr into sip->storep+lba and return true. If comparison fails then
3072  * return false. */
3073 static bool comp_write_worker(struct sdeb_store_info *sip, u64 lba, u32 num,
3074                               const u8 *arr, bool compare_only)
3075 {
3076         bool res;
3077         u64 block, rest = 0;
3078         u32 store_blks = sdebug_store_sectors;
3079         u32 lb_size = sdebug_sector_size;
3080         u8 *fsp = sip->storep;
3081
3082         block = do_div(lba, store_blks);
3083         if (block + num > store_blks)
3084                 rest = block + num - store_blks;
3085
3086         res = !memcmp(fsp + (block * lb_size), arr, (num - rest) * lb_size);
3087         if (!res)
3088                 return res;
3089         if (rest)
3090                 res = memcmp(fsp, arr + ((num - rest) * lb_size),
3091                              rest * lb_size);
3092         if (!res)
3093                 return res;
3094         if (compare_only)
3095                 return true;
3096         arr += num * lb_size;
3097         memcpy(fsp + (block * lb_size), arr, (num - rest) * lb_size);
3098         if (rest)
3099                 memcpy(fsp, arr + ((num - rest) * lb_size), rest * lb_size);
3100         return res;
3101 }
3102
3103 static __be16 dif_compute_csum(const void *buf, int len)
3104 {
3105         __be16 csum;
3106
3107         if (sdebug_guard)
3108                 csum = (__force __be16)ip_compute_csum(buf, len);
3109         else
3110                 csum = cpu_to_be16(crc_t10dif(buf, len));
3111
3112         return csum;
3113 }
3114
3115 static int dif_verify(struct t10_pi_tuple *sdt, const void *data,
3116                       sector_t sector, u32 ei_lba)
3117 {
3118         __be16 csum = dif_compute_csum(data, sdebug_sector_size);
3119
3120         if (sdt->guard_tag != csum) {
3121                 pr_err("GUARD check failed on sector %lu rcvd 0x%04x, data 0x%04x\n",
3122                         (unsigned long)sector,
3123                         be16_to_cpu(sdt->guard_tag),
3124                         be16_to_cpu(csum));
3125                 return 0x01;
3126         }
3127         if (sdebug_dif == T10_PI_TYPE1_PROTECTION &&
3128             be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
3129                 pr_err("REF check failed on sector %lu\n",
3130                         (unsigned long)sector);
3131                 return 0x03;
3132         }
3133         if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3134             be32_to_cpu(sdt->ref_tag) != ei_lba) {
3135                 pr_err("REF check failed on sector %lu\n",
3136                         (unsigned long)sector);
3137                 return 0x03;
3138         }
3139         return 0;
3140 }
3141
3142 static void dif_copy_prot(struct scsi_cmnd *scp, sector_t sector,
3143                           unsigned int sectors, bool read)
3144 {
3145         size_t resid;
3146         void *paddr;
3147         struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
3148                                                 scp->device->hostdata, true);
3149         struct t10_pi_tuple *dif_storep = sip->dif_storep;
3150         const void *dif_store_end = dif_storep + sdebug_store_sectors;
3151         struct sg_mapping_iter miter;
3152
3153         /* Bytes of protection data to copy into sgl */
3154         resid = sectors * sizeof(*dif_storep);
3155
3156         sg_miter_start(&miter, scsi_prot_sglist(scp),
3157                        scsi_prot_sg_count(scp), SG_MITER_ATOMIC |
3158                        (read ? SG_MITER_TO_SG : SG_MITER_FROM_SG));
3159
3160         while (sg_miter_next(&miter) && resid > 0) {
3161                 size_t len = min_t(size_t, miter.length, resid);
3162                 void *start = dif_store(sip, sector);
3163                 size_t rest = 0;
3164
3165                 if (dif_store_end < start + len)
3166                         rest = start + len - dif_store_end;
3167
3168                 paddr = miter.addr;
3169
3170                 if (read)
3171                         memcpy(paddr, start, len - rest);
3172                 else
3173                         memcpy(start, paddr, len - rest);
3174
3175                 if (rest) {
3176                         if (read)
3177                                 memcpy(paddr + len - rest, dif_storep, rest);
3178                         else
3179                                 memcpy(dif_storep, paddr + len - rest, rest);
3180                 }
3181
3182                 sector += len / sizeof(*dif_storep);
3183                 resid -= len;
3184         }
3185         sg_miter_stop(&miter);
3186 }
3187
3188 static int prot_verify_read(struct scsi_cmnd *scp, sector_t start_sec,
3189                             unsigned int sectors, u32 ei_lba)
3190 {
3191         int ret = 0;
3192         unsigned int i;
3193         sector_t sector;
3194         struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
3195                                                 scp->device->hostdata, true);
3196         struct t10_pi_tuple *sdt;
3197
3198         for (i = 0; i < sectors; i++, ei_lba++) {
3199                 sector = start_sec + i;
3200                 sdt = dif_store(sip, sector);
3201
3202                 if (sdt->app_tag == cpu_to_be16(0xffff))
3203                         continue;
3204
3205                 /*
3206                  * Because scsi_debug acts as both initiator and
3207                  * target we proceed to verify the PI even if
3208                  * RDPROTECT=3. This is done so the "initiator" knows
3209                  * which type of error to return. Otherwise we would
3210                  * have to iterate over the PI twice.
3211                  */
3212                 if (scp->cmnd[1] >> 5) { /* RDPROTECT */
3213                         ret = dif_verify(sdt, lba2fake_store(sip, sector),
3214                                          sector, ei_lba);
3215                         if (ret) {
3216                                 dif_errors++;
3217                                 break;
3218                         }
3219                 }
3220         }
3221
3222         dif_copy_prot(scp, start_sec, sectors, true);
3223         dix_reads++;
3224
3225         return ret;
3226 }
3227
3228 static inline void
3229 sdeb_read_lock(struct sdeb_store_info *sip)
3230 {
3231         if (sdebug_no_rwlock) {
3232                 if (sip)
3233                         __acquire(&sip->macc_lck);
3234                 else
3235                         __acquire(&sdeb_fake_rw_lck);
3236         } else {
3237                 if (sip)
3238                         read_lock(&sip->macc_lck);
3239                 else
3240                         read_lock(&sdeb_fake_rw_lck);
3241         }
3242 }
3243
3244 static inline void
3245 sdeb_read_unlock(struct sdeb_store_info *sip)
3246 {
3247         if (sdebug_no_rwlock) {
3248                 if (sip)
3249                         __release(&sip->macc_lck);
3250                 else
3251                         __release(&sdeb_fake_rw_lck);
3252         } else {
3253                 if (sip)
3254                         read_unlock(&sip->macc_lck);
3255                 else
3256                         read_unlock(&sdeb_fake_rw_lck);
3257         }
3258 }
3259
3260 static inline void
3261 sdeb_write_lock(struct sdeb_store_info *sip)
3262 {
3263         if (sdebug_no_rwlock) {
3264                 if (sip)
3265                         __acquire(&sip->macc_lck);
3266                 else
3267                         __acquire(&sdeb_fake_rw_lck);
3268         } else {
3269                 if (sip)
3270                         write_lock(&sip->macc_lck);
3271                 else
3272                         write_lock(&sdeb_fake_rw_lck);
3273         }
3274 }
3275
3276 static inline void
3277 sdeb_write_unlock(struct sdeb_store_info *sip)
3278 {
3279         if (sdebug_no_rwlock) {
3280                 if (sip)
3281                         __release(&sip->macc_lck);
3282                 else
3283                         __release(&sdeb_fake_rw_lck);
3284         } else {
3285                 if (sip)
3286                         write_unlock(&sip->macc_lck);
3287                 else
3288                         write_unlock(&sdeb_fake_rw_lck);
3289         }
3290 }
3291
3292 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3293 {
3294         bool check_prot;
3295         u32 num;
3296         u32 ei_lba;
3297         int ret;
3298         u64 lba;
3299         struct sdeb_store_info *sip = devip2sip(devip, true);
3300         u8 *cmd = scp->cmnd;
3301
3302         switch (cmd[0]) {
3303         case READ_16:
3304                 ei_lba = 0;
3305                 lba = get_unaligned_be64(cmd + 2);
3306                 num = get_unaligned_be32(cmd + 10);
3307                 check_prot = true;
3308                 break;
3309         case READ_10:
3310                 ei_lba = 0;
3311                 lba = get_unaligned_be32(cmd + 2);
3312                 num = get_unaligned_be16(cmd + 7);
3313                 check_prot = true;
3314                 break;
3315         case READ_6:
3316                 ei_lba = 0;
3317                 lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
3318                       (u32)(cmd[1] & 0x1f) << 16;
3319                 num = (0 == cmd[4]) ? 256 : cmd[4];
3320                 check_prot = true;
3321                 break;
3322         case READ_12:
3323                 ei_lba = 0;
3324                 lba = get_unaligned_be32(cmd + 2);
3325                 num = get_unaligned_be32(cmd + 6);
3326                 check_prot = true;
3327                 break;
3328         case XDWRITEREAD_10:
3329                 ei_lba = 0;
3330                 lba = get_unaligned_be32(cmd + 2);
3331                 num = get_unaligned_be16(cmd + 7);
3332                 check_prot = false;
3333                 break;
3334         default:        /* assume READ(32) */
3335                 lba = get_unaligned_be64(cmd + 12);
3336                 ei_lba = get_unaligned_be32(cmd + 20);
3337                 num = get_unaligned_be32(cmd + 28);
3338                 check_prot = false;
3339                 break;
3340         }
3341         if (unlikely(have_dif_prot && check_prot)) {
3342                 if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3343                     (cmd[1] & 0xe0)) {
3344                         mk_sense_invalid_opcode(scp);
3345                         return check_condition_result;
3346                 }
3347                 if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3348                      sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3349                     (cmd[1] & 0xe0) == 0)
3350                         sdev_printk(KERN_ERR, scp->device, "Unprotected RD "
3351                                     "to DIF device\n");
3352         }
3353         if (unlikely((sdebug_opts & SDEBUG_OPT_SHORT_TRANSFER) &&
3354                      atomic_read(&sdeb_inject_pending))) {
3355                 num /= 2;
3356                 atomic_set(&sdeb_inject_pending, 0);
3357         }
3358
3359         ret = check_device_access_params(scp, lba, num, false);
3360         if (ret)
3361                 return ret;
3362         if (unlikely((SDEBUG_OPT_MEDIUM_ERR & sdebug_opts) &&
3363                      (lba <= (sdebug_medium_error_start + sdebug_medium_error_count - 1)) &&
3364                      ((lba + num) > sdebug_medium_error_start))) {
3365                 /* claim unrecoverable read error */
3366                 mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
3367                 /* set info field and valid bit for fixed descriptor */
3368                 if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
3369                         scp->sense_buffer[0] |= 0x80;   /* Valid bit */
3370                         ret = (lba < OPT_MEDIUM_ERR_ADDR)
3371                               ? OPT_MEDIUM_ERR_ADDR : (int)lba;
3372                         put_unaligned_be32(ret, scp->sense_buffer + 3);
3373                 }
3374                 scsi_set_resid(scp, scsi_bufflen(scp));
3375                 return check_condition_result;
3376         }
3377
3378         sdeb_read_lock(sip);
3379
3380         /* DIX + T10 DIF */
3381         if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
3382                 switch (prot_verify_read(scp, lba, num, ei_lba)) {
3383                 case 1: /* Guard tag error */
3384                         if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
3385                                 sdeb_read_unlock(sip);
3386                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3387                                 return check_condition_result;
3388                         } else if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
3389                                 sdeb_read_unlock(sip);
3390                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3391                                 return illegal_condition_result;
3392                         }
3393                         break;
3394                 case 3: /* Reference tag error */
3395                         if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
3396                                 sdeb_read_unlock(sip);
3397                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
3398                                 return check_condition_result;
3399                         } else if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
3400                                 sdeb_read_unlock(sip);
3401                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
3402                                 return illegal_condition_result;
3403                         }
3404                         break;
3405                 }
3406         }
3407
3408         ret = do_device_access(sip, scp, 0, lba, num, false);
3409         sdeb_read_unlock(sip);
3410         if (unlikely(ret == -1))
3411                 return DID_ERROR << 16;
3412
3413         scsi_set_resid(scp, scsi_bufflen(scp) - ret);
3414
3415         if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
3416                      atomic_read(&sdeb_inject_pending))) {
3417                 if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
3418                         mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
3419                         atomic_set(&sdeb_inject_pending, 0);
3420                         return check_condition_result;
3421                 } else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
3422                         /* Logical block guard check failed */
3423                         mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3424                         atomic_set(&sdeb_inject_pending, 0);
3425                         return illegal_condition_result;
3426                 } else if (SDEBUG_OPT_DIX_ERR & sdebug_opts) {
3427                         mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3428                         atomic_set(&sdeb_inject_pending, 0);
3429                         return illegal_condition_result;
3430                 }
3431         }
3432         return 0;
3433 }
3434
3435 static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
3436                              unsigned int sectors, u32 ei_lba)
3437 {
3438         int ret;
3439         struct t10_pi_tuple *sdt;
3440         void *daddr;
3441         sector_t sector = start_sec;
3442         int ppage_offset;
3443         int dpage_offset;
3444         struct sg_mapping_iter diter;
3445         struct sg_mapping_iter piter;
3446
3447         BUG_ON(scsi_sg_count(SCpnt) == 0);
3448         BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
3449
3450         sg_miter_start(&piter, scsi_prot_sglist(SCpnt),
3451                         scsi_prot_sg_count(SCpnt),
3452                         SG_MITER_ATOMIC | SG_MITER_FROM_SG);
3453         sg_miter_start(&diter, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
3454                         SG_MITER_ATOMIC | SG_MITER_FROM_SG);
3455
3456         /* For each protection page */
3457         while (sg_miter_next(&piter)) {
3458                 dpage_offset = 0;
3459                 if (WARN_ON(!sg_miter_next(&diter))) {
3460                         ret = 0x01;
3461                         goto out;
3462                 }
3463
3464                 for (ppage_offset = 0; ppage_offset < piter.length;
3465                      ppage_offset += sizeof(struct t10_pi_tuple)) {
3466                         /* If we're at the end of the current
3467                          * data page advance to the next one
3468                          */
3469                         if (dpage_offset >= diter.length) {
3470                                 if (WARN_ON(!sg_miter_next(&diter))) {
3471                                         ret = 0x01;
3472                                         goto out;
3473                                 }
3474                                 dpage_offset = 0;
3475                         }
3476
3477                         sdt = piter.addr + ppage_offset;
3478                         daddr = diter.addr + dpage_offset;
3479
3480                         if (SCpnt->cmnd[1] >> 5 != 3) { /* WRPROTECT */
3481                                 ret = dif_verify(sdt, daddr, sector, ei_lba);
3482                                 if (ret)
3483                                         goto out;
3484                         }
3485
3486                         sector++;
3487                         ei_lba++;
3488                         dpage_offset += sdebug_sector_size;
3489                 }
3490                 diter.consumed = dpage_offset;
3491                 sg_miter_stop(&diter);
3492         }
3493         sg_miter_stop(&piter);
3494
3495         dif_copy_prot(SCpnt, start_sec, sectors, false);
3496         dix_writes++;
3497
3498         return 0;
3499
3500 out:
3501         dif_errors++;
3502         sg_miter_stop(&diter);
3503         sg_miter_stop(&piter);
3504         return ret;
3505 }
3506
3507 static unsigned long lba_to_map_index(sector_t lba)
3508 {
3509         if (sdebug_unmap_alignment)
3510                 lba += sdebug_unmap_granularity - sdebug_unmap_alignment;
3511         sector_div(lba, sdebug_unmap_granularity);
3512         return lba;
3513 }
3514
3515 static sector_t map_index_to_lba(unsigned long index)
3516 {
3517         sector_t lba = index * sdebug_unmap_granularity;
3518
3519         if (sdebug_unmap_alignment)
3520                 lba -= sdebug_unmap_granularity - sdebug_unmap_alignment;
3521         return lba;
3522 }
3523
3524 static unsigned int map_state(struct sdeb_store_info *sip, sector_t lba,
3525                               unsigned int *num)
3526 {
3527         sector_t end;
3528         unsigned int mapped;
3529         unsigned long index;
3530         unsigned long next;
3531
3532         index = lba_to_map_index(lba);
3533         mapped = test_bit(index, sip->map_storep);
3534
3535         if (mapped)
3536                 next = find_next_zero_bit(sip->map_storep, map_size, index);
3537         else
3538                 next = find_next_bit(sip->map_storep, map_size, index);
3539
3540         end = min_t(sector_t, sdebug_store_sectors,  map_index_to_lba(next));
3541         *num = end - lba;
3542         return mapped;
3543 }
3544
3545 static void map_region(struct sdeb_store_info *sip, sector_t lba,
3546                        unsigned int len)
3547 {
3548         sector_t end = lba + len;
3549
3550         while (lba < end) {
3551                 unsigned long index = lba_to_map_index(lba);
3552
3553                 if (index < map_size)
3554                         set_bit(index, sip->map_storep);
3555
3556                 lba = map_index_to_lba(index + 1);
3557         }
3558 }
3559
3560 static void unmap_region(struct sdeb_store_info *sip, sector_t lba,
3561                          unsigned int len)
3562 {
3563         sector_t end = lba + len;
3564         u8 *fsp = sip->storep;
3565
3566         while (lba < end) {
3567                 unsigned long index = lba_to_map_index(lba);
3568
3569                 if (lba == map_index_to_lba(index) &&
3570                     lba + sdebug_unmap_granularity <= end &&
3571                     index < map_size) {
3572                         clear_bit(index, sip->map_storep);
3573                         if (sdebug_lbprz) {  /* for LBPRZ=2 return 0xff_s */
3574                                 memset(fsp + lba * sdebug_sector_size,
3575                                        (sdebug_lbprz & 1) ? 0 : 0xff,
3576                                        sdebug_sector_size *
3577                                        sdebug_unmap_granularity);
3578                         }
3579                         if (sip->dif_storep) {
3580                                 memset(sip->dif_storep + lba, 0xff,
3581                                        sizeof(*sip->dif_storep) *
3582                                        sdebug_unmap_granularity);
3583                         }
3584                 }
3585                 lba = map_index_to_lba(index + 1);
3586         }
3587 }
3588
3589 static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3590 {
3591         bool check_prot;
3592         u32 num;
3593         u32 ei_lba;
3594         int ret;
3595         u64 lba;
3596         struct sdeb_store_info *sip = devip2sip(devip, true);
3597         u8 *cmd = scp->cmnd;
3598
3599         switch (cmd[0]) {
3600         case WRITE_16:
3601                 ei_lba = 0;
3602                 lba = get_unaligned_be64(cmd + 2);
3603                 num = get_unaligned_be32(cmd + 10);
3604                 check_prot = true;
3605                 break;
3606         case WRITE_10:
3607                 ei_lba = 0;
3608                 lba = get_unaligned_be32(cmd + 2);
3609                 num = get_unaligned_be16(cmd + 7);
3610                 check_prot = true;
3611                 break;
3612         case WRITE_6:
3613                 ei_lba = 0;
3614                 lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
3615                       (u32)(cmd[1] & 0x1f) << 16;
3616                 num = (0 == cmd[4]) ? 256 : cmd[4];
3617                 check_prot = true;
3618                 break;
3619         case WRITE_12:
3620                 ei_lba = 0;
3621                 lba = get_unaligned_be32(cmd + 2);
3622                 num = get_unaligned_be32(cmd + 6);
3623                 check_prot = true;
3624                 break;
3625         case 0x53:      /* XDWRITEREAD(10) */
3626                 ei_lba = 0;
3627                 lba = get_unaligned_be32(cmd + 2);
3628                 num = get_unaligned_be16(cmd + 7);
3629                 check_prot = false;
3630                 break;
3631         default:        /* assume WRITE(32) */
3632                 lba = get_unaligned_be64(cmd + 12);
3633                 ei_lba = get_unaligned_be32(cmd + 20);
3634                 num = get_unaligned_be32(cmd + 28);
3635                 check_prot = false;
3636                 break;
3637         }
3638         if (unlikely(have_dif_prot && check_prot)) {
3639                 if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3640                     (cmd[1] & 0xe0)) {
3641                         mk_sense_invalid_opcode(scp);
3642                         return check_condition_result;
3643                 }
3644                 if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3645                      sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3646                     (cmd[1] & 0xe0) == 0)
3647                         sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
3648                                     "to DIF device\n");
3649         }
3650
3651         sdeb_write_lock(sip);
3652         ret = check_device_access_params(scp, lba, num, true);
3653         if (ret) {
3654                 sdeb_write_unlock(sip);
3655                 return ret;
3656         }
3657
3658         /* DIX + T10 DIF */
3659         if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
3660                 switch (prot_verify_write(scp, lba, num, ei_lba)) {
3661                 case 1: /* Guard tag error */
3662                         if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
3663                                 sdeb_write_unlock(sip);
3664                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3665                                 return illegal_condition_result;
3666                         } else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
3667                                 sdeb_write_unlock(sip);
3668                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3669                                 return check_condition_result;
3670                         }
3671                         break;
3672                 case 3: /* Reference tag error */
3673                         if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
3674                                 sdeb_write_unlock(sip);
3675                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
3676                                 return illegal_condition_result;
3677                         } else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
3678                                 sdeb_write_unlock(sip);
3679                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
3680                                 return check_condition_result;
3681                         }
3682                         break;
3683                 }
3684         }
3685
3686         ret = do_device_access(sip, scp, 0, lba, num, true);
3687         if (unlikely(scsi_debug_lbp()))
3688                 map_region(sip, lba, num);
3689         /* If ZBC zone then bump its write pointer */
3690         if (sdebug_dev_is_zoned(devip))
3691                 zbc_inc_wp(devip, lba, num);
3692         sdeb_write_unlock(sip);
3693         if (unlikely(-1 == ret))
3694                 return DID_ERROR << 16;
3695         else if (unlikely(sdebug_verbose &&
3696                           (ret < (num * sdebug_sector_size))))
3697                 sdev_printk(KERN_INFO, scp->device,
3698                             "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
3699                             my_name, num * sdebug_sector_size, ret);
3700
3701         if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
3702                      atomic_read(&sdeb_inject_pending))) {
3703                 if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
3704                         mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
3705                         atomic_set(&sdeb_inject_pending, 0);
3706                         return check_condition_result;
3707                 } else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
3708                         /* Logical block guard check failed */
3709                         mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3710                         atomic_set(&sdeb_inject_pending, 0);
3711                         return illegal_condition_result;
3712                 } else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
3713                         mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3714                         atomic_set(&sdeb_inject_pending, 0);
3715                         return illegal_condition_result;
3716                 }
3717         }
3718         return 0;
3719 }
3720
3721 /*
3722  * T10 has only specified WRITE SCATTERED(16) and WRITE SCATTERED(32).
3723  * No READ GATHERED yet (requires bidi or long cdb holding gather list).
3724  */
3725 static int resp_write_scat(struct scsi_cmnd *scp,
3726                            struct sdebug_dev_info *devip)
3727 {
3728         u8 *cmd = scp->cmnd;
3729         u8 *lrdp = NULL;
3730         u8 *up;
3731         struct sdeb_store_info *sip = devip2sip(devip, true);
3732         u8 wrprotect;
3733         u16 lbdof, num_lrd, k;
3734         u32 num, num_by, bt_len, lbdof_blen, sg_off, cum_lb;
3735         u32 lb_size = sdebug_sector_size;
3736         u32 ei_lba;
3737         u64 lba;
3738         int ret, res;
3739         bool is_16;
3740         static const u32 lrd_size = 32; /* + parameter list header size */
3741
3742         if (cmd[0] == VARIABLE_LENGTH_CMD) {
3743                 is_16 = false;
3744                 wrprotect = (cmd[10] >> 5) & 0x7;
3745                 lbdof = get_unaligned_be16(cmd + 12);
3746                 num_lrd = get_unaligned_be16(cmd + 16);
3747                 bt_len = get_unaligned_be32(cmd + 28);
3748         } else {        /* that leaves WRITE SCATTERED(16) */
3749                 is_16 = true;
3750                 wrprotect = (cmd[2] >> 5) & 0x7;
3751                 lbdof = get_unaligned_be16(cmd + 4);
3752                 num_lrd = get_unaligned_be16(cmd + 8);
3753                 bt_len = get_unaligned_be32(cmd + 10);
3754                 if (unlikely(have_dif_prot)) {
3755                         if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3756                             wrprotect) {
3757                                 mk_sense_invalid_opcode(scp);
3758                                 return illegal_condition_result;
3759                         }
3760                         if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3761                              sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3762                              wrprotect == 0)
3763                                 sdev_printk(KERN_ERR, scp->device,
3764                                             "Unprotected WR to DIF device\n");
3765                 }
3766         }
3767         if ((num_lrd == 0) || (bt_len == 0))
3768                 return 0;       /* T10 says these do-nothings are not errors */
3769         if (lbdof == 0) {
3770                 if (sdebug_verbose)
3771                         sdev_printk(KERN_INFO, scp->device,
3772                                 "%s: %s: LB Data Offset field bad\n",
3773                                 my_name, __func__);
3774                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3775                 return illegal_condition_result;
3776         }
3777         lbdof_blen = lbdof * lb_size;
3778         if ((lrd_size + (num_lrd * lrd_size)) > lbdof_blen) {
3779                 if (sdebug_verbose)
3780                         sdev_printk(KERN_INFO, scp->device,
3781                                 "%s: %s: LBA range descriptors don't fit\n",
3782                                 my_name, __func__);
3783                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3784                 return illegal_condition_result;
3785         }
3786         lrdp = kzalloc(lbdof_blen, GFP_ATOMIC | __GFP_NOWARN);
3787         if (lrdp == NULL)
3788                 return SCSI_MLQUEUE_HOST_BUSY;
3789         if (sdebug_verbose)
3790                 sdev_printk(KERN_INFO, scp->device,
3791                         "%s: %s: Fetch header+scatter_list, lbdof_blen=%u\n",
3792                         my_name, __func__, lbdof_blen);
3793         res = fetch_to_dev_buffer(scp, lrdp, lbdof_blen);
3794         if (res == -1) {
3795                 ret = DID_ERROR << 16;
3796                 goto err_out;
3797         }
3798
3799         sdeb_write_lock(sip);
3800         sg_off = lbdof_blen;
3801         /* Spec says Buffer xfer Length field in number of LBs in dout */
3802         cum_lb = 0;
3803         for (k = 0, up = lrdp + lrd_size; k < num_lrd; ++k, up += lrd_size) {
3804                 lba = get_unaligned_be64(up + 0);
3805                 num = get_unaligned_be32(up + 8);
3806                 if (sdebug_verbose)
3807                         sdev_printk(KERN_INFO, scp->device,
3808                                 "%s: %s: k=%d  LBA=0x%llx num=%u  sg_off=%u\n",
3809                                 my_name, __func__, k, lba, num, sg_off);
3810                 if (num == 0)
3811                         continue;
3812                 ret = check_device_access_params(scp, lba, num, true);
3813                 if (ret)
3814                         goto err_out_unlock;
3815                 num_by = num * lb_size;
3816                 ei_lba = is_16 ? 0 : get_unaligned_be32(up + 12);
3817
3818                 if ((cum_lb + num) > bt_len) {
3819                         if (sdebug_verbose)
3820                                 sdev_printk(KERN_INFO, scp->device,
3821                                     "%s: %s: sum of blocks > data provided\n",
3822                                     my_name, __func__);
3823                         mk_sense_buffer(scp, ILLEGAL_REQUEST, WRITE_ERROR_ASC,
3824                                         0);
3825                         ret = illegal_condition_result;
3826                         goto err_out_unlock;
3827                 }
3828
3829                 /* DIX + T10 DIF */
3830                 if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
3831                         int prot_ret = prot_verify_write(scp, lba, num,
3832                                                          ei_lba);
3833
3834                         if (prot_ret) {
3835                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10,
3836                                                 prot_ret);
3837                                 ret = illegal_condition_result;
3838                                 goto err_out_unlock;
3839                         }
3840                 }
3841
3842                 ret = do_device_access(sip, scp, sg_off, lba, num, true);
3843                 /* If ZBC zone then bump its write pointer */
3844                 if (sdebug_dev_is_zoned(devip))
3845                         zbc_inc_wp(devip, lba, num);
3846                 if (unlikely(scsi_debug_lbp()))
3847                         map_region(sip, lba, num);
3848                 if (unlikely(-1 == ret)) {
3849                         ret = DID_ERROR << 16;
3850                         goto err_out_unlock;
3851                 } else if (unlikely(sdebug_verbose && (ret < num_by)))
3852                         sdev_printk(KERN_INFO, scp->device,
3853                             "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
3854                             my_name, num_by, ret);
3855
3856                 if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
3857                              atomic_read(&sdeb_inject_pending))) {
3858                         if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
3859                                 mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
3860                                 atomic_set(&sdeb_inject_pending, 0);
3861                                 ret = check_condition_result;
3862                                 goto err_out_unlock;
3863                         } else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
3864                                 /* Logical block guard check failed */
3865                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3866                                 atomic_set(&sdeb_inject_pending, 0);
3867                                 ret = illegal_condition_result;
3868                                 goto err_out_unlock;
3869                         } else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
3870                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3871                                 atomic_set(&sdeb_inject_pending, 0);
3872                                 ret = illegal_condition_result;
3873                                 goto err_out_unlock;
3874                         }
3875                 }
3876                 sg_off += num_by;
3877                 cum_lb += num;
3878         }
3879         ret = 0;
3880 err_out_unlock:
3881         sdeb_write_unlock(sip);
3882 err_out:
3883         kfree(lrdp);
3884         return ret;
3885 }
3886
3887 static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num,
3888                            u32 ei_lba, bool unmap, bool ndob)
3889 {
3890         struct scsi_device *sdp = scp->device;
3891         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
3892         unsigned long long i;
3893         u64 block, lbaa;
3894         u32 lb_size = sdebug_sector_size;
3895         int ret;
3896         struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
3897                                                 scp->device->hostdata, true);
3898         u8 *fs1p;
3899         u8 *fsp;
3900
3901         sdeb_write_lock(sip);
3902
3903         ret = check_device_access_params(scp, lba, num, true);
3904         if (ret) {
3905                 sdeb_write_unlock(sip);
3906                 return ret;
3907         }
3908
3909         if (unmap && scsi_debug_lbp()) {
3910                 unmap_region(sip, lba, num);
3911                 goto out;
3912         }
3913         lbaa = lba;
3914         block = do_div(lbaa, sdebug_store_sectors);
3915         /* if ndob then zero 1 logical block, else fetch 1 logical block */
3916         fsp = sip->storep;
3917         fs1p = fsp + (block * lb_size);
3918         if (ndob) {
3919                 memset(fs1p, 0, lb_size);
3920                 ret = 0;
3921         } else
3922                 ret = fetch_to_dev_buffer(scp, fs1p, lb_size);
3923
3924         if (-1 == ret) {
3925                 sdeb_write_unlock(sip);
3926                 return DID_ERROR << 16;
3927         } else if (sdebug_verbose && !ndob && (ret < lb_size))
3928                 sdev_printk(KERN_INFO, scp->device,
3929                             "%s: %s: lb size=%u, IO sent=%d bytes\n",
3930                             my_name, "write same", lb_size, ret);
3931
3932         /* Copy first sector to remaining blocks */
3933         for (i = 1 ; i < num ; i++) {
3934                 lbaa = lba + i;
3935                 block = do_div(lbaa, sdebug_store_sectors);
3936                 memmove(fsp + (block * lb_size), fs1p, lb_size);
3937         }
3938         if (scsi_debug_lbp())
3939                 map_region(sip, lba, num);
3940         /* If ZBC zone then bump its write pointer */
3941         if (sdebug_dev_is_zoned(devip))
3942                 zbc_inc_wp(devip, lba, num);
3943 out:
3944         sdeb_write_unlock(sip);
3945
3946         return 0;
3947 }
3948
3949 static int resp_write_same_10(struct scsi_cmnd *scp,
3950                               struct sdebug_dev_info *devip)
3951 {
3952         u8 *cmd = scp->cmnd;
3953         u32 lba;
3954         u16 num;
3955         u32 ei_lba = 0;
3956         bool unmap = false;
3957
3958         if (cmd[1] & 0x8) {
3959                 if (sdebug_lbpws10 == 0) {
3960                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3961                         return check_condition_result;
3962                 } else
3963                         unmap = true;
3964         }
3965         lba = get_unaligned_be32(cmd + 2);
3966         num = get_unaligned_be16(cmd + 7);
3967         if (num > sdebug_write_same_length) {
3968                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3969                 return check_condition_result;
3970         }
3971         return resp_write_same(scp, lba, num, ei_lba, unmap, false);
3972 }
3973
3974 static int resp_write_same_16(struct scsi_cmnd *scp,
3975                               struct sdebug_dev_info *devip)
3976 {
3977         u8 *cmd = scp->cmnd;
3978         u64 lba;
3979         u32 num;
3980         u32 ei_lba = 0;
3981         bool unmap = false;
3982         bool ndob = false;
3983
3984         if (cmd[1] & 0x8) {     /* UNMAP */
3985                 if (sdebug_lbpws == 0) {
3986                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3987                         return check_condition_result;
3988                 } else
3989                         unmap = true;
3990         }
3991         if (cmd[1] & 0x1)  /* NDOB (no data-out buffer, assumes zeroes) */
3992                 ndob = true;
3993         lba = get_unaligned_be64(cmd + 2);
3994         num = get_unaligned_be32(cmd + 10);
3995         if (num > sdebug_write_same_length) {
3996                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
3997                 return check_condition_result;
3998         }
3999         return resp_write_same(scp, lba, num, ei_lba, unmap, ndob);
4000 }
4001
4002 /* Note the mode field is in the same position as the (lower) service action
4003  * field. For the Report supported operation codes command, SPC-4 suggests
4004  * each mode of this command should be reported separately; for future. */
4005 static int resp_write_buffer(struct scsi_cmnd *scp,
4006                              struct sdebug_dev_info *devip)
4007 {
4008         u8 *cmd = scp->cmnd;
4009         struct scsi_device *sdp = scp->device;
4010         struct sdebug_dev_info *dp;
4011         u8 mode;
4012
4013         mode = cmd[1] & 0x1f;
4014         switch (mode) {
4015         case 0x4:       /* download microcode (MC) and activate (ACT) */
4016                 /* set UAs on this device only */
4017                 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
4018                 set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
4019                 break;
4020         case 0x5:       /* download MC, save and ACT */
4021                 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
4022                 break;
4023         case 0x6:       /* download MC with offsets and ACT */
4024                 /* set UAs on most devices (LUs) in this target */
4025                 list_for_each_entry(dp,
4026                                     &devip->sdbg_host->dev_info_list,
4027                                     dev_list)
4028                         if (dp->target == sdp->id) {
4029                                 set_bit(SDEBUG_UA_BUS_RESET, dp->uas_bm);
4030                                 if (devip != dp)
4031                                         set_bit(SDEBUG_UA_MICROCODE_CHANGED,
4032                                                 dp->uas_bm);
4033                         }
4034                 break;
4035         case 0x7:       /* download MC with offsets, save, and ACT */
4036                 /* set UA on all devices (LUs) in this target */
4037                 list_for_each_entry(dp,
4038                                     &devip->sdbg_host->dev_info_list,
4039                                     dev_list)
4040                         if (dp->target == sdp->id)
4041                                 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET,
4042                                         dp->uas_bm);
4043                 break;
4044         default:
4045                 /* do nothing for this command for other mode values */
4046                 break;
4047         }
4048         return 0;
4049 }
4050
4051 static int resp_comp_write(struct scsi_cmnd *scp,
4052                            struct sdebug_dev_info *devip)
4053 {
4054         u8 *cmd = scp->cmnd;
4055         u8 *arr;
4056         struct sdeb_store_info *sip = devip2sip(devip, true);
4057         u64 lba;
4058         u32 dnum;
4059         u32 lb_size = sdebug_sector_size;
4060         u8 num;
4061         int ret;
4062         int retval = 0;
4063
4064         lba = get_unaligned_be64(cmd + 2);
4065         num = cmd[13];          /* 1 to a maximum of 255 logical blocks */
4066         if (0 == num)
4067                 return 0;       /* degenerate case, not an error */
4068         if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
4069             (cmd[1] & 0xe0)) {
4070                 mk_sense_invalid_opcode(scp);
4071                 return check_condition_result;
4072         }
4073         if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
4074              sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
4075             (cmd[1] & 0xe0) == 0)
4076                 sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
4077                             "to DIF device\n");
4078         ret = check_device_access_params(scp, lba, num, false);
4079         if (ret)
4080                 return ret;
4081         dnum = 2 * num;
4082         arr = kcalloc(lb_size, dnum, GFP_ATOMIC);
4083         if (NULL == arr) {
4084                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4085                                 INSUFF_RES_ASCQ);
4086                 return check_condition_result;
4087         }
4088
4089         sdeb_write_lock(sip);
4090
4091         ret = do_dout_fetch(scp, dnum, arr);
4092         if (ret == -1) {
4093                 retval = DID_ERROR << 16;
4094                 goto cleanup;
4095         } else if (sdebug_verbose && (ret < (dnum * lb_size)))
4096                 sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
4097                             "indicated=%u, IO sent=%d bytes\n", my_name,
4098                             dnum * lb_size, ret);
4099         if (!comp_write_worker(sip, lba, num, arr, false)) {
4100                 mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
4101                 retval = check_condition_result;
4102                 goto cleanup;
4103         }
4104         if (scsi_debug_lbp())
4105                 map_region(sip, lba, num);
4106 cleanup:
4107         sdeb_write_unlock(sip);
4108         kfree(arr);
4109         return retval;
4110 }
4111
4112 struct unmap_block_desc {
4113         __be64  lba;
4114         __be32  blocks;
4115         __be32  __reserved;
4116 };
4117
4118 static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4119 {
4120         unsigned char *buf;
4121         struct unmap_block_desc *desc;
4122         struct sdeb_store_info *sip = devip2sip(devip, true);
4123         unsigned int i, payload_len, descriptors;
4124         int ret;
4125
4126         if (!scsi_debug_lbp())
4127                 return 0;       /* fib and say its done */
4128         payload_len = get_unaligned_be16(scp->cmnd + 7);
4129         BUG_ON(scsi_bufflen(scp) != payload_len);
4130
4131         descriptors = (payload_len - 8) / 16;
4132         if (descriptors > sdebug_unmap_max_desc) {
4133                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
4134                 return check_condition_result;
4135         }
4136
4137         buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
4138         if (!buf) {
4139                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4140                                 INSUFF_RES_ASCQ);
4141                 return check_condition_result;
4142         }
4143
4144         scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
4145
4146         BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
4147         BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
4148
4149         desc = (void *)&buf[8];
4150
4151         sdeb_write_lock(sip);
4152
4153         for (i = 0 ; i < descriptors ; i++) {
4154                 unsigned long long lba = get_unaligned_be64(&desc[i].lba);
4155                 unsigned int num = get_unaligned_be32(&desc[i].blocks);
4156
4157                 ret = check_device_access_params(scp, lba, num, true);
4158                 if (ret)
4159                         goto out;
4160
4161                 unmap_region(sip, lba, num);
4162         }
4163
4164         ret = 0;
4165
4166 out:
4167         sdeb_write_unlock(sip);
4168         kfree(buf);
4169
4170         return ret;
4171 }
4172
4173 #define SDEBUG_GET_LBA_STATUS_LEN 32
4174
4175 static int resp_get_lba_status(struct scsi_cmnd *scp,
4176                                struct sdebug_dev_info *devip)
4177 {
4178         u8 *cmd = scp->cmnd;
4179         u64 lba;
4180         u32 alloc_len, mapped, num;
4181         int ret;
4182         u8 arr[SDEBUG_GET_LBA_STATUS_LEN];
4183
4184         lba = get_unaligned_be64(cmd + 2);
4185         alloc_len = get_unaligned_be32(cmd + 10);
4186
4187         if (alloc_len < 24)
4188                 return 0;
4189
4190         ret = check_device_access_params(scp, lba, 1, false);
4191         if (ret)
4192                 return ret;
4193
4194         if (scsi_debug_lbp()) {
4195                 struct sdeb_store_info *sip = devip2sip(devip, true);
4196
4197                 mapped = map_state(sip, lba, &num);
4198         } else {
4199                 mapped = 1;
4200                 /* following just in case virtual_gb changed */
4201                 sdebug_capacity = get_sdebug_capacity();
4202                 if (sdebug_capacity - lba <= 0xffffffff)
4203                         num = sdebug_capacity - lba;
4204                 else
4205                         num = 0xffffffff;
4206         }
4207
4208         memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
4209         put_unaligned_be32(20, arr);            /* Parameter Data Length */
4210         put_unaligned_be64(lba, arr + 8);       /* LBA */
4211         put_unaligned_be32(num, arr + 16);      /* Number of blocks */
4212         arr[20] = !mapped;              /* prov_stat=0: mapped; 1: dealloc */
4213
4214         return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
4215 }
4216
4217 static int resp_sync_cache(struct scsi_cmnd *scp,
4218                            struct sdebug_dev_info *devip)
4219 {
4220         int res = 0;
4221         u64 lba;
4222         u32 num_blocks;
4223         u8 *cmd = scp->cmnd;
4224
4225         if (cmd[0] == SYNCHRONIZE_CACHE) {      /* 10 byte cdb */
4226                 lba = get_unaligned_be32(cmd + 2);
4227                 num_blocks = get_unaligned_be16(cmd + 7);
4228         } else {                                /* SYNCHRONIZE_CACHE(16) */
4229                 lba = get_unaligned_be64(cmd + 2);
4230                 num_blocks = get_unaligned_be32(cmd + 10);
4231         }
4232         if (lba + num_blocks > sdebug_capacity) {
4233                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4234                 return check_condition_result;
4235         }
4236         if (!write_since_sync || (cmd[1] & 0x2))
4237                 res = SDEG_RES_IMMED_MASK;
4238         else            /* delay if write_since_sync and IMMED clear */
4239                 write_since_sync = false;
4240         return res;
4241 }
4242
4243 /*
4244  * Assuming the LBA+num_blocks is not out-of-range, this function will return
4245  * CONDITION MET if the specified blocks will/have fitted in the cache, and
4246  * a GOOD status otherwise. Model a disk with a big cache and yield
4247  * CONDITION MET. Actually tries to bring range in main memory into the
4248  * cache associated with the CPU(s).
4249  */
4250 static int resp_pre_fetch(struct scsi_cmnd *scp,
4251                           struct sdebug_dev_info *devip)
4252 {
4253         int res = 0;
4254         u64 lba;
4255         u64 block, rest = 0;
4256         u32 nblks;
4257         u8 *cmd = scp->cmnd;
4258         struct sdeb_store_info *sip = devip2sip(devip, true);
4259         u8 *fsp = sip->storep;
4260
4261         if (cmd[0] == PRE_FETCH) {      /* 10 byte cdb */
4262                 lba = get_unaligned_be32(cmd + 2);
4263                 nblks = get_unaligned_be16(cmd + 7);
4264         } else {                        /* PRE-FETCH(16) */
4265                 lba = get_unaligned_be64(cmd + 2);
4266                 nblks = get_unaligned_be32(cmd + 10);
4267         }
4268         if (lba + nblks > sdebug_capacity) {
4269                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4270                 return check_condition_result;
4271         }
4272         if (!fsp)
4273                 goto fini;
4274         /* PRE-FETCH spec says nothing about LBP or PI so skip them */
4275         block = do_div(lba, sdebug_store_sectors);
4276         if (block + nblks > sdebug_store_sectors)
4277                 rest = block + nblks - sdebug_store_sectors;
4278
4279         /* Try to bring the PRE-FETCH range into CPU's cache */
4280         sdeb_read_lock(sip);
4281         prefetch_range(fsp + (sdebug_sector_size * block),
4282                        (nblks - rest) * sdebug_sector_size);
4283         if (rest)
4284                 prefetch_range(fsp, rest * sdebug_sector_size);
4285         sdeb_read_unlock(sip);
4286 fini:
4287         if (cmd[1] & 0x2)
4288                 res = SDEG_RES_IMMED_MASK;
4289         return res | condition_met_result;
4290 }
4291
4292 #define RL_BUCKET_ELEMS 8
4293
4294 /* Even though each pseudo target has a REPORT LUNS "well known logical unit"
4295  * (W-LUN), the normal Linux scanning logic does not associate it with a
4296  * device (e.g. /dev/sg7). The following magic will make that association:
4297  *   "cd /sys/class/scsi_host/host<n> ; echo '- - 49409' > scan"
4298  * where <n> is a host number. If there are multiple targets in a host then
4299  * the above will associate a W-LUN to each target. To only get a W-LUN
4300  * for target 2, then use "echo '- 2 49409' > scan" .
4301  */
4302 static int resp_report_luns(struct scsi_cmnd *scp,
4303                             struct sdebug_dev_info *devip)
4304 {
4305         unsigned char *cmd = scp->cmnd;
4306         unsigned int alloc_len;
4307         unsigned char select_report;
4308         u64 lun;
4309         struct scsi_lun *lun_p;
4310         u8 arr[RL_BUCKET_ELEMS * sizeof(struct scsi_lun)];
4311         unsigned int lun_cnt;   /* normal LUN count (max: 256) */
4312         unsigned int wlun_cnt;  /* report luns W-LUN count */
4313         unsigned int tlun_cnt;  /* total LUN count */
4314         unsigned int rlen;      /* response length (in bytes) */
4315         int k, j, n, res;
4316         unsigned int off_rsp = 0;
4317         const int sz_lun = sizeof(struct scsi_lun);
4318
4319         clear_luns_changed_on_target(devip);
4320
4321         select_report = cmd[2];
4322         alloc_len = get_unaligned_be32(cmd + 6);
4323
4324         if (alloc_len < 4) {
4325                 pr_err("alloc len too small %d\n", alloc_len);
4326                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
4327                 return check_condition_result;
4328         }
4329
4330         switch (select_report) {
4331         case 0:         /* all LUNs apart from W-LUNs */
4332                 lun_cnt = sdebug_max_luns;
4333                 wlun_cnt = 0;
4334                 break;
4335         case 1:         /* only W-LUNs */
4336                 lun_cnt = 0;
4337                 wlun_cnt = 1;
4338                 break;
4339         case 2:         /* all LUNs */
4340                 lun_cnt = sdebug_max_luns;
4341                 wlun_cnt = 1;
4342                 break;
4343         case 0x10:      /* only administrative LUs */
4344         case 0x11:      /* see SPC-5 */
4345         case 0x12:      /* only subsiduary LUs owned by referenced LU */
4346         default:
4347                 pr_debug("select report invalid %d\n", select_report);
4348                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
4349                 return check_condition_result;
4350         }
4351
4352         if (sdebug_no_lun_0 && (lun_cnt > 0))
4353                 --lun_cnt;
4354
4355         tlun_cnt = lun_cnt + wlun_cnt;
4356         rlen = tlun_cnt * sz_lun;       /* excluding 8 byte header */
4357         scsi_set_resid(scp, scsi_bufflen(scp));
4358         pr_debug("select_report %d luns = %d wluns = %d no_lun0 %d\n",
4359                  select_report, lun_cnt, wlun_cnt, sdebug_no_lun_0);
4360
4361         /* loops rely on sizeof response header same as sizeof lun (both 8) */
4362         lun = sdebug_no_lun_0 ? 1 : 0;
4363         for (k = 0, j = 0, res = 0; true; ++k, j = 0) {
4364                 memset(arr, 0, sizeof(arr));
4365                 lun_p = (struct scsi_lun *)&arr[0];
4366                 if (k == 0) {
4367                         put_unaligned_be32(rlen, &arr[0]);
4368                         ++lun_p;
4369                         j = 1;
4370                 }
4371                 for ( ; j < RL_BUCKET_ELEMS; ++j, ++lun_p) {
4372                         if ((k * RL_BUCKET_ELEMS) + j > lun_cnt)
4373                                 break;
4374                         int_to_scsilun(lun++, lun_p);
4375                         if (lun > 1 && sdebug_lun_am == SAM_LUN_AM_FLAT)
4376                                 lun_p->scsi_lun[0] |= 0x40;
4377                 }
4378                 if (j < RL_BUCKET_ELEMS)
4379                         break;
4380                 n = j * sz_lun;
4381                 res = p_fill_from_dev_buffer(scp, arr, n, off_rsp);
4382                 if (res)
4383                         return res;
4384                 off_rsp += n;
4385         }
4386         if (wlun_cnt) {
4387                 int_to_scsilun(SCSI_W_LUN_REPORT_LUNS, lun_p);
4388                 ++j;
4389         }
4390         if (j > 0)
4391                 res = p_fill_from_dev_buffer(scp, arr, j * sz_lun, off_rsp);
4392         return res;
4393 }
4394
4395 static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4396 {
4397         bool is_bytchk3 = false;
4398         u8 bytchk;
4399         int ret, j;
4400         u32 vnum, a_num, off;
4401         const u32 lb_size = sdebug_sector_size;
4402         u64 lba;
4403         u8 *arr;
4404         u8 *cmd = scp->cmnd;
4405         struct sdeb_store_info *sip = devip2sip(devip, true);
4406
4407         bytchk = (cmd[1] >> 1) & 0x3;
4408         if (bytchk == 0) {
4409                 return 0;       /* always claim internal verify okay */
4410         } else if (bytchk == 2) {
4411                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
4412                 return check_condition_result;
4413         } else if (bytchk == 3) {
4414                 is_bytchk3 = true;      /* 1 block sent, compared repeatedly */
4415         }
4416         switch (cmd[0]) {
4417         case VERIFY_16:
4418                 lba = get_unaligned_be64(cmd + 2);
4419                 vnum = get_unaligned_be32(cmd + 10);
4420                 break;
4421         case VERIFY:            /* is VERIFY(10) */
4422                 lba = get_unaligned_be32(cmd + 2);
4423                 vnum = get_unaligned_be16(cmd + 7);
4424                 break;
4425         default:
4426                 mk_sense_invalid_opcode(scp);
4427                 return check_condition_result;
4428         }
4429         if (vnum == 0)
4430                 return 0;       /* not an error */
4431         a_num = is_bytchk3 ? 1 : vnum;
4432         /* Treat following check like one for read (i.e. no write) access */
4433         ret = check_device_access_params(scp, lba, a_num, false);
4434         if (ret)
4435                 return ret;
4436
4437         arr = kcalloc(lb_size, vnum, GFP_ATOMIC | __GFP_NOWARN);
4438         if (!arr) {
4439                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4440                                 INSUFF_RES_ASCQ);
4441                 return check_condition_result;
4442         }
4443         /* Not changing store, so only need read access */
4444         sdeb_read_lock(sip);
4445
4446         ret = do_dout_fetch(scp, a_num, arr);
4447         if (ret == -1) {
4448                 ret = DID_ERROR << 16;
4449                 goto cleanup;
4450         } else if (sdebug_verbose && (ret < (a_num * lb_size))) {
4451                 sdev_printk(KERN_INFO, scp->device,
4452                             "%s: %s: cdb indicated=%u, IO sent=%d bytes\n",
4453                             my_name, __func__, a_num * lb_size, ret);
4454         }
4455         if (is_bytchk3) {
4456                 for (j = 1, off = lb_size; j < vnum; ++j, off += lb_size)
4457                         memcpy(arr + off, arr, lb_size);
4458         }
4459         ret = 0;
4460         if (!comp_write_worker(sip, lba, vnum, arr, true)) {
4461                 mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
4462                 ret = check_condition_result;
4463                 goto cleanup;
4464         }
4465 cleanup:
4466         sdeb_read_unlock(sip);
4467         kfree(arr);
4468         return ret;
4469 }
4470
4471 #define RZONES_DESC_HD 64
4472
4473 /* Report zones depending on start LBA and reporting options */
4474 static int resp_report_zones(struct scsi_cmnd *scp,
4475                              struct sdebug_dev_info *devip)
4476 {
4477         unsigned int rep_max_zones, nrz = 0;
4478         int ret = 0;
4479         u32 alloc_len, rep_opts, rep_len;
4480         bool partial;
4481         u64 lba, zs_lba;
4482         u8 *arr = NULL, *desc;
4483         u8 *cmd = scp->cmnd;
4484         struct sdeb_zone_state *zsp = NULL;
4485         struct sdeb_store_info *sip = devip2sip(devip, false);
4486
4487         if (!sdebug_dev_is_zoned(devip)) {
4488                 mk_sense_invalid_opcode(scp);
4489                 return check_condition_result;
4490         }
4491         zs_lba = get_unaligned_be64(cmd + 2);
4492         alloc_len = get_unaligned_be32(cmd + 10);
4493         if (alloc_len == 0)
4494                 return 0;       /* not an error */
4495         rep_opts = cmd[14] & 0x3f;
4496         partial = cmd[14] & 0x80;
4497
4498         if (zs_lba >= sdebug_capacity) {
4499                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4500                 return check_condition_result;
4501         }
4502
4503         rep_max_zones = (alloc_len - 64) >> ilog2(RZONES_DESC_HD);
4504
4505         arr = kzalloc(alloc_len, GFP_ATOMIC | __GFP_NOWARN);
4506         if (!arr) {
4507                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4508                                 INSUFF_RES_ASCQ);
4509                 return check_condition_result;
4510         }
4511
4512         sdeb_read_lock(sip);
4513
4514         desc = arr + 64;
4515         for (lba = zs_lba; lba < sdebug_capacity;
4516              lba = zsp->z_start + zsp->z_size) {
4517                 if (WARN_ONCE(zbc_zone(devip, lba) == zsp, "lba = %llu\n", lba))
4518                         break;
4519                 zsp = zbc_zone(devip, lba);
4520                 switch (rep_opts) {
4521                 case 0x00:
4522                         /* All zones */
4523                         break;
4524                 case 0x01:
4525                         /* Empty zones */
4526                         if (zsp->z_cond != ZC1_EMPTY)
4527                                 continue;
4528                         break;
4529                 case 0x02:
4530                         /* Implicit open zones */
4531                         if (zsp->z_cond != ZC2_IMPLICIT_OPEN)
4532                                 continue;
4533                         break;
4534                 case 0x03:
4535                         /* Explicit open zones */
4536                         if (zsp->z_cond != ZC3_EXPLICIT_OPEN)
4537                                 continue;
4538                         break;
4539                 case 0x04:
4540                         /* Closed zones */
4541                         if (zsp->z_cond != ZC4_CLOSED)
4542                                 continue;
4543                         break;
4544                 case 0x05:
4545                         /* Full zones */
4546                         if (zsp->z_cond != ZC5_FULL)
4547                                 continue;
4548                         break;
4549                 case 0x06:
4550                 case 0x07:
4551                 case 0x10:
4552                         /*
4553                          * Read-only, offline, reset WP recommended are
4554                          * not emulated: no zones to report;
4555                          */
4556                         continue;
4557                 case 0x11:
4558                         /* non-seq-resource set */
4559                         if (!zsp->z_non_seq_resource)
4560                                 continue;
4561                         break;
4562                 case 0x3e:
4563                         /* All zones except gap zones. */
4564                         if (zbc_zone_is_gap(zsp))
4565                                 continue;
4566                         break;
4567                 case 0x3f:
4568                         /* Not write pointer (conventional) zones */
4569                         if (zbc_zone_is_seq(zsp))
4570                                 continue;
4571                         break;
4572                 default:
4573                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
4574                                         INVALID_FIELD_IN_CDB, 0);
4575                         ret = check_condition_result;
4576                         goto fini;
4577                 }
4578
4579                 if (nrz < rep_max_zones) {
4580                         /* Fill zone descriptor */
4581                         desc[0] = zsp->z_type;
4582                         desc[1] = zsp->z_cond << 4;
4583                         if (zsp->z_non_seq_resource)
4584                                 desc[1] |= 1 << 1;
4585                         put_unaligned_be64((u64)zsp->z_size, desc + 8);
4586                         put_unaligned_be64((u64)zsp->z_start, desc + 16);
4587                         put_unaligned_be64((u64)zsp->z_wp, desc + 24);
4588                         desc += 64;
4589                 }
4590
4591                 if (partial && nrz >= rep_max_zones)
4592                         break;
4593
4594                 nrz++;
4595         }
4596
4597         /* Report header */
4598         /* Zone list length. */
4599         put_unaligned_be32(nrz * RZONES_DESC_HD, arr + 0);
4600         /* Maximum LBA */
4601         put_unaligned_be64(sdebug_capacity - 1, arr + 8);
4602         /* Zone starting LBA granularity. */
4603         if (devip->zcap < devip->zsize)
4604                 put_unaligned_be64(devip->zsize, arr + 16);
4605
4606         rep_len = (unsigned long)desc - (unsigned long)arr;
4607         ret = fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, rep_len));
4608
4609 fini:
4610         sdeb_read_unlock(sip);
4611         kfree(arr);
4612         return ret;
4613 }
4614
4615 /* Logic transplanted from tcmu-runner, file_zbc.c */
4616 static void zbc_open_all(struct sdebug_dev_info *devip)
4617 {
4618         struct sdeb_zone_state *zsp = &devip->zstate[0];
4619         unsigned int i;
4620
4621         for (i = 0; i < devip->nr_zones; i++, zsp++) {
4622                 if (zsp->z_cond == ZC4_CLOSED)
4623                         zbc_open_zone(devip, &devip->zstate[i], true);
4624         }
4625 }
4626
4627 static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4628 {
4629         int res = 0;
4630         u64 z_id;
4631         enum sdebug_z_cond zc;
4632         u8 *cmd = scp->cmnd;
4633         struct sdeb_zone_state *zsp;
4634         bool all = cmd[14] & 0x01;
4635         struct sdeb_store_info *sip = devip2sip(devip, false);
4636
4637         if (!sdebug_dev_is_zoned(devip)) {
4638                 mk_sense_invalid_opcode(scp);
4639                 return check_condition_result;
4640         }
4641
4642         sdeb_write_lock(sip);
4643
4644         if (all) {
4645                 /* Check if all closed zones can be open */
4646                 if (devip->max_open &&
4647                     devip->nr_exp_open + devip->nr_closed > devip->max_open) {
4648                         mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
4649                                         INSUFF_ZONE_ASCQ);
4650                         res = check_condition_result;
4651                         goto fini;
4652                 }
4653                 /* Open all closed zones */
4654                 zbc_open_all(devip);
4655                 goto fini;
4656         }
4657
4658         /* Open the specified zone */
4659         z_id = get_unaligned_be64(cmd + 2);
4660         if (z_id >= sdebug_capacity) {
4661                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4662                 res = check_condition_result;
4663                 goto fini;
4664         }
4665
4666         zsp = zbc_zone(devip, z_id);
4667         if (z_id != zsp->z_start) {
4668                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4669                 res = check_condition_result;
4670                 goto fini;
4671         }
4672         if (zbc_zone_is_conv(zsp)) {
4673                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4674                 res = check_condition_result;
4675                 goto fini;
4676         }
4677
4678         zc = zsp->z_cond;
4679         if (zc == ZC3_EXPLICIT_OPEN || zc == ZC5_FULL)
4680                 goto fini;
4681
4682         if (devip->max_open && devip->nr_exp_open >= devip->max_open) {
4683                 mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
4684                                 INSUFF_ZONE_ASCQ);
4685                 res = check_condition_result;
4686                 goto fini;
4687         }
4688
4689         zbc_open_zone(devip, zsp, true);
4690 fini:
4691         sdeb_write_unlock(sip);
4692         return res;
4693 }
4694
4695 static void zbc_close_all(struct sdebug_dev_info *devip)
4696 {
4697         unsigned int i;
4698
4699         for (i = 0; i < devip->nr_zones; i++)
4700                 zbc_close_zone(devip, &devip->zstate[i]);
4701 }
4702
4703 static int resp_close_zone(struct scsi_cmnd *scp,
4704                            struct sdebug_dev_info *devip)
4705 {
4706         int res = 0;
4707         u64 z_id;
4708         u8 *cmd = scp->cmnd;
4709         struct sdeb_zone_state *zsp;
4710         bool all = cmd[14] & 0x01;
4711         struct sdeb_store_info *sip = devip2sip(devip, false);
4712
4713         if (!sdebug_dev_is_zoned(devip)) {
4714                 mk_sense_invalid_opcode(scp);
4715                 return check_condition_result;
4716         }
4717
4718         sdeb_write_lock(sip);
4719
4720         if (all) {
4721                 zbc_close_all(devip);
4722                 goto fini;
4723         }
4724
4725         /* Close specified zone */
4726         z_id = get_unaligned_be64(cmd + 2);
4727         if (z_id >= sdebug_capacity) {
4728                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4729                 res = check_condition_result;
4730                 goto fini;
4731         }
4732
4733         zsp = zbc_zone(devip, z_id);
4734         if (z_id != zsp->z_start) {
4735                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4736                 res = check_condition_result;
4737                 goto fini;
4738         }
4739         if (zbc_zone_is_conv(zsp)) {
4740                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4741                 res = check_condition_result;
4742                 goto fini;
4743         }
4744
4745         zbc_close_zone(devip, zsp);
4746 fini:
4747         sdeb_write_unlock(sip);
4748         return res;
4749 }
4750
4751 static void zbc_finish_zone(struct sdebug_dev_info *devip,
4752                             struct sdeb_zone_state *zsp, bool empty)
4753 {
4754         enum sdebug_z_cond zc = zsp->z_cond;
4755
4756         if (zc == ZC4_CLOSED || zc == ZC2_IMPLICIT_OPEN ||
4757             zc == ZC3_EXPLICIT_OPEN || (empty && zc == ZC1_EMPTY)) {
4758                 if (zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN)
4759                         zbc_close_zone(devip, zsp);
4760                 if (zsp->z_cond == ZC4_CLOSED)
4761                         devip->nr_closed--;
4762                 zsp->z_wp = zsp->z_start + zsp->z_size;
4763                 zsp->z_cond = ZC5_FULL;
4764         }
4765 }
4766
4767 static void zbc_finish_all(struct sdebug_dev_info *devip)
4768 {
4769         unsigned int i;
4770
4771         for (i = 0; i < devip->nr_zones; i++)
4772                 zbc_finish_zone(devip, &devip->zstate[i], false);
4773 }
4774
4775 static int resp_finish_zone(struct scsi_cmnd *scp,
4776                             struct sdebug_dev_info *devip)
4777 {
4778         struct sdeb_zone_state *zsp;
4779         int res = 0;
4780         u64 z_id;
4781         u8 *cmd = scp->cmnd;
4782         bool all = cmd[14] & 0x01;
4783         struct sdeb_store_info *sip = devip2sip(devip, false);
4784
4785         if (!sdebug_dev_is_zoned(devip)) {
4786                 mk_sense_invalid_opcode(scp);
4787                 return check_condition_result;
4788         }
4789
4790         sdeb_write_lock(sip);
4791
4792         if (all) {
4793                 zbc_finish_all(devip);
4794                 goto fini;
4795         }
4796
4797         /* Finish the specified zone */
4798         z_id = get_unaligned_be64(cmd + 2);
4799         if (z_id >= sdebug_capacity) {
4800                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4801                 res = check_condition_result;
4802                 goto fini;
4803         }
4804
4805         zsp = zbc_zone(devip, z_id);
4806         if (z_id != zsp->z_start) {
4807                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4808                 res = check_condition_result;
4809                 goto fini;
4810         }
4811         if (zbc_zone_is_conv(zsp)) {
4812                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4813                 res = check_condition_result;
4814                 goto fini;
4815         }
4816
4817         zbc_finish_zone(devip, zsp, true);
4818 fini:
4819         sdeb_write_unlock(sip);
4820         return res;
4821 }
4822
4823 static void zbc_rwp_zone(struct sdebug_dev_info *devip,
4824                          struct sdeb_zone_state *zsp)
4825 {
4826         enum sdebug_z_cond zc;
4827         struct sdeb_store_info *sip = devip2sip(devip, false);
4828
4829         if (!zbc_zone_is_seq(zsp))
4830                 return;
4831
4832         zc = zsp->z_cond;
4833         if (zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN)
4834                 zbc_close_zone(devip, zsp);
4835
4836         if (zsp->z_cond == ZC4_CLOSED)
4837                 devip->nr_closed--;
4838
4839         if (zsp->z_wp > zsp->z_start)
4840                 memset(sip->storep + zsp->z_start * sdebug_sector_size, 0,
4841                        (zsp->z_wp - zsp->z_start) * sdebug_sector_size);
4842
4843         zsp->z_non_seq_resource = false;
4844         zsp->z_wp = zsp->z_start;
4845         zsp->z_cond = ZC1_EMPTY;
4846 }
4847
4848 static void zbc_rwp_all(struct sdebug_dev_info *devip)
4849 {
4850         unsigned int i;
4851
4852         for (i = 0; i < devip->nr_zones; i++)
4853                 zbc_rwp_zone(devip, &devip->zstate[i]);
4854 }
4855
4856 static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4857 {
4858         struct sdeb_zone_state *zsp;
4859         int res = 0;
4860         u64 z_id;
4861         u8 *cmd = scp->cmnd;
4862         bool all = cmd[14] & 0x01;
4863         struct sdeb_store_info *sip = devip2sip(devip, false);
4864
4865         if (!sdebug_dev_is_zoned(devip)) {
4866                 mk_sense_invalid_opcode(scp);
4867                 return check_condition_result;
4868         }
4869
4870         sdeb_write_lock(sip);
4871
4872         if (all) {
4873                 zbc_rwp_all(devip);
4874                 goto fini;
4875         }
4876
4877         z_id = get_unaligned_be64(cmd + 2);
4878         if (z_id >= sdebug_capacity) {
4879                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4880                 res = check_condition_result;
4881                 goto fini;
4882         }
4883
4884         zsp = zbc_zone(devip, z_id);
4885         if (z_id != zsp->z_start) {
4886                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4887                 res = check_condition_result;
4888                 goto fini;
4889         }
4890         if (zbc_zone_is_conv(zsp)) {
4891                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4892                 res = check_condition_result;
4893                 goto fini;
4894         }
4895
4896         zbc_rwp_zone(devip, zsp);
4897 fini:
4898         sdeb_write_unlock(sip);
4899         return res;
4900 }
4901
4902 static struct sdebug_queue *get_queue(struct scsi_cmnd *cmnd)
4903 {
4904         u16 hwq;
4905         u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
4906
4907         hwq = blk_mq_unique_tag_to_hwq(tag);
4908
4909         pr_debug("tag=%#x, hwq=%d\n", tag, hwq);
4910         if (WARN_ON_ONCE(hwq >= submit_queues))
4911                 hwq = 0;
4912
4913         return sdebug_q_arr + hwq;
4914 }
4915
4916 static u32 get_tag(struct scsi_cmnd *cmnd)
4917 {
4918         return blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
4919 }
4920
4921 /* Queued (deferred) command completions converge here. */
4922 static void sdebug_q_cmd_complete(struct sdebug_defer *sd_dp)
4923 {
4924         bool aborted = sd_dp->aborted;
4925         int qc_idx;
4926         int retiring = 0;
4927         unsigned long iflags;
4928         struct sdebug_queue *sqp;
4929         struct sdebug_queued_cmd *sqcp;
4930         struct scsi_cmnd *scp;
4931         struct sdebug_dev_info *devip;
4932
4933         if (unlikely(aborted))
4934                 sd_dp->aborted = false;
4935         qc_idx = sd_dp->qc_idx;
4936         sqp = sdebug_q_arr + sd_dp->sqa_idx;
4937         if (sdebug_statistics) {
4938                 atomic_inc(&sdebug_completions);
4939                 if (raw_smp_processor_id() != sd_dp->issuing_cpu)
4940                         atomic_inc(&sdebug_miss_cpus);
4941         }
4942         if (unlikely((qc_idx < 0) || (qc_idx >= SDEBUG_CANQUEUE))) {
4943                 pr_err("wild qc_idx=%d\n", qc_idx);
4944                 return;
4945         }
4946         spin_lock_irqsave(&sqp->qc_lock, iflags);
4947         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_NONE);
4948         sqcp = &sqp->qc_arr[qc_idx];
4949         scp = sqcp->a_cmnd;
4950         if (unlikely(scp == NULL)) {
4951                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4952                 pr_err("scp is NULL, sqa_idx=%d, qc_idx=%d, hc_idx=%d\n",
4953                        sd_dp->sqa_idx, qc_idx, sd_dp->hc_idx);
4954                 return;
4955         }
4956         devip = (struct sdebug_dev_info *)scp->device->hostdata;
4957         if (likely(devip))
4958                 atomic_dec(&devip->num_in_q);
4959         else
4960                 pr_err("devip=NULL\n");
4961         if (unlikely(atomic_read(&retired_max_queue) > 0))
4962                 retiring = 1;
4963
4964         sqcp->a_cmnd = NULL;
4965         if (unlikely(!test_and_clear_bit(qc_idx, sqp->in_use_bm))) {
4966                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4967                 pr_err("Unexpected completion\n");
4968                 return;
4969         }
4970
4971         if (unlikely(retiring)) {       /* user has reduced max_queue */
4972                 int k, retval;
4973
4974                 retval = atomic_read(&retired_max_queue);
4975                 if (qc_idx >= retval) {
4976                         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4977                         pr_err("index %d too large\n", retval);
4978                         return;
4979                 }
4980                 k = find_last_bit(sqp->in_use_bm, retval);
4981                 if ((k < sdebug_max_queue) || (k == retval))
4982                         atomic_set(&retired_max_queue, 0);
4983                 else
4984                         atomic_set(&retired_max_queue, k + 1);
4985         }
4986         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4987         if (unlikely(aborted)) {
4988                 if (sdebug_verbose)
4989                         pr_info("bypassing scsi_done() due to aborted cmd\n");
4990                 return;
4991         }
4992         scsi_done(scp); /* callback to mid level */
4993 }
4994
4995 /* When high resolution timer goes off this function is called. */
4996 static enum hrtimer_restart sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
4997 {
4998         struct sdebug_defer *sd_dp = container_of(timer, struct sdebug_defer,
4999                                                   hrt);
5000         sdebug_q_cmd_complete(sd_dp);
5001         return HRTIMER_NORESTART;
5002 }
5003
5004 /* When work queue schedules work, it calls this function. */
5005 static void sdebug_q_cmd_wq_complete(struct work_struct *work)
5006 {
5007         struct sdebug_defer *sd_dp = container_of(work, struct sdebug_defer,
5008                                                   ew.work);
5009         sdebug_q_cmd_complete(sd_dp);
5010 }
5011
5012 static bool got_shared_uuid;
5013 static uuid_t shared_uuid;
5014
5015 static int sdebug_device_create_zones(struct sdebug_dev_info *devip)
5016 {
5017         struct sdeb_zone_state *zsp;
5018         sector_t capacity = get_sdebug_capacity();
5019         sector_t conv_capacity;
5020         sector_t zstart = 0;
5021         unsigned int i;
5022
5023         /*
5024          * Set the zone size: if sdeb_zbc_zone_size_mb is not set, figure out
5025          * a zone size allowing for at least 4 zones on the device. Otherwise,
5026          * use the specified zone size checking that at least 2 zones can be
5027          * created for the device.
5028          */
5029         if (!sdeb_zbc_zone_size_mb) {
5030                 devip->zsize = (DEF_ZBC_ZONE_SIZE_MB * SZ_1M)
5031                         >> ilog2(sdebug_sector_size);
5032                 while (capacity < devip->zsize << 2 && devip->zsize >= 2)
5033                         devip->zsize >>= 1;
5034                 if (devip->zsize < 2) {
5035                         pr_err("Device capacity too small\n");
5036                         return -EINVAL;
5037                 }
5038         } else {
5039                 if (!is_power_of_2(sdeb_zbc_zone_size_mb)) {
5040                         pr_err("Zone size is not a power of 2\n");
5041                         return -EINVAL;
5042                 }
5043                 devip->zsize = (sdeb_zbc_zone_size_mb * SZ_1M)
5044                         >> ilog2(sdebug_sector_size);
5045                 if (devip->zsize >= capacity) {
5046                         pr_err("Zone size too large for device capacity\n");
5047                         return -EINVAL;
5048                 }
5049         }
5050
5051         devip->zsize_shift = ilog2(devip->zsize);
5052         devip->nr_zones = (capacity + devip->zsize - 1) >> devip->zsize_shift;
5053
5054         if (sdeb_zbc_zone_cap_mb == 0) {
5055                 devip->zcap = devip->zsize;
5056         } else {
5057                 devip->zcap = (sdeb_zbc_zone_cap_mb * SZ_1M) >>
5058                               ilog2(sdebug_sector_size);
5059                 if (devip->zcap > devip->zsize) {
5060                         pr_err("Zone capacity too large\n");
5061                         return -EINVAL;
5062                 }
5063         }
5064
5065         conv_capacity = (sector_t)sdeb_zbc_nr_conv << devip->zsize_shift;
5066         if (conv_capacity >= capacity) {
5067                 pr_err("Number of conventional zones too large\n");
5068                 return -EINVAL;
5069         }
5070         devip->nr_conv_zones = sdeb_zbc_nr_conv;
5071         devip->nr_seq_zones = ALIGN(capacity - conv_capacity, devip->zsize) >>
5072                               devip->zsize_shift;
5073         devip->nr_zones = devip->nr_conv_zones + devip->nr_seq_zones;
5074
5075         /* Add gap zones if zone capacity is smaller than the zone size */
5076         if (devip->zcap < devip->zsize)
5077                 devip->nr_zones += devip->nr_seq_zones;
5078
5079         if (devip->zmodel == BLK_ZONED_HM) {
5080                 /* zbc_max_open_zones can be 0, meaning "not reported" */
5081                 if (sdeb_zbc_max_open >= devip->nr_zones - 1)
5082                         devip->max_open = (devip->nr_zones - 1) / 2;
5083                 else
5084                         devip->max_open = sdeb_zbc_max_open;
5085         }
5086
5087         devip->zstate = kcalloc(devip->nr_zones,
5088                                 sizeof(struct sdeb_zone_state), GFP_KERNEL);
5089         if (!devip->zstate)
5090                 return -ENOMEM;
5091
5092         for (i = 0; i < devip->nr_zones; i++) {
5093                 zsp = &devip->zstate[i];
5094
5095                 zsp->z_start = zstart;
5096
5097                 if (i < devip->nr_conv_zones) {
5098                         zsp->z_type = ZBC_ZTYPE_CNV;
5099                         zsp->z_cond = ZBC_NOT_WRITE_POINTER;
5100                         zsp->z_wp = (sector_t)-1;
5101                         zsp->z_size =
5102                                 min_t(u64, devip->zsize, capacity - zstart);
5103                 } else if ((zstart & (devip->zsize - 1)) == 0) {
5104                         if (devip->zmodel == BLK_ZONED_HM)
5105                                 zsp->z_type = ZBC_ZTYPE_SWR;
5106                         else
5107                                 zsp->z_type = ZBC_ZTYPE_SWP;
5108                         zsp->z_cond = ZC1_EMPTY;
5109                         zsp->z_wp = zsp->z_start;
5110                         zsp->z_size =
5111                                 min_t(u64, devip->zcap, capacity - zstart);
5112                 } else {
5113                         zsp->z_type = ZBC_ZTYPE_GAP;
5114                         zsp->z_cond = ZBC_NOT_WRITE_POINTER;
5115                         zsp->z_wp = (sector_t)-1;
5116                         zsp->z_size = min_t(u64, devip->zsize - devip->zcap,
5117                                             capacity - zstart);
5118                 }
5119
5120                 WARN_ON_ONCE((int)zsp->z_size <= 0);
5121                 zstart += zsp->z_size;
5122         }
5123
5124         return 0;
5125 }
5126
5127 static struct sdebug_dev_info *sdebug_device_create(
5128                         struct sdebug_host_info *sdbg_host, gfp_t flags)
5129 {
5130         struct sdebug_dev_info *devip;
5131
5132         devip = kzalloc(sizeof(*devip), flags);
5133         if (devip) {
5134                 if (sdebug_uuid_ctl == 1)
5135                         uuid_gen(&devip->lu_name);
5136                 else if (sdebug_uuid_ctl == 2) {
5137                         if (got_shared_uuid)
5138                                 devip->lu_name = shared_uuid;
5139                         else {
5140                                 uuid_gen(&shared_uuid);
5141                                 got_shared_uuid = true;
5142                                 devip->lu_name = shared_uuid;
5143                         }
5144                 }
5145                 devip->sdbg_host = sdbg_host;
5146                 if (sdeb_zbc_in_use) {
5147                         devip->zmodel = sdeb_zbc_model;
5148                         if (sdebug_device_create_zones(devip)) {
5149                                 kfree(devip);
5150                                 return NULL;
5151                         }
5152                 } else {
5153                         devip->zmodel = BLK_ZONED_NONE;
5154                 }
5155                 devip->sdbg_host = sdbg_host;
5156                 devip->create_ts = ktime_get_boottime();
5157                 atomic_set(&devip->stopped, (sdeb_tur_ms_to_ready > 0 ? 2 : 0));
5158                 list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
5159         }
5160         return devip;
5161 }
5162
5163 static struct sdebug_dev_info *find_build_dev_info(struct scsi_device *sdev)
5164 {
5165         struct sdebug_host_info *sdbg_host;
5166         struct sdebug_dev_info *open_devip = NULL;
5167         struct sdebug_dev_info *devip;
5168
5169         sdbg_host = *(struct sdebug_host_info **)shost_priv(sdev->host);
5170         if (!sdbg_host) {
5171                 pr_err("Host info NULL\n");
5172                 return NULL;
5173         }
5174
5175         list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5176                 if ((devip->used) && (devip->channel == sdev->channel) &&
5177                     (devip->target == sdev->id) &&
5178                     (devip->lun == sdev->lun))
5179                         return devip;
5180                 else {
5181                         if ((!devip->used) && (!open_devip))
5182                                 open_devip = devip;
5183                 }
5184         }
5185         if (!open_devip) { /* try and make a new one */
5186                 open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
5187                 if (!open_devip) {
5188                         pr_err("out of memory at line %d\n", __LINE__);
5189                         return NULL;
5190                 }
5191         }
5192
5193         open_devip->channel = sdev->channel;
5194         open_devip->target = sdev->id;
5195         open_devip->lun = sdev->lun;
5196         open_devip->sdbg_host = sdbg_host;
5197         atomic_set(&open_devip->num_in_q, 0);
5198         set_bit(SDEBUG_UA_POOCCUR, open_devip->uas_bm);
5199         open_devip->used = true;
5200         return open_devip;
5201 }
5202
5203 static int scsi_debug_slave_alloc(struct scsi_device *sdp)
5204 {
5205         if (sdebug_verbose)
5206                 pr_info("slave_alloc <%u %u %u %llu>\n",
5207                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5208         return 0;
5209 }
5210
5211 static int scsi_debug_slave_configure(struct scsi_device *sdp)
5212 {
5213         struct sdebug_dev_info *devip =
5214                         (struct sdebug_dev_info *)sdp->hostdata;
5215
5216         if (sdebug_verbose)
5217                 pr_info("slave_configure <%u %u %u %llu>\n",
5218                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5219         if (sdp->host->max_cmd_len != SDEBUG_MAX_CMD_LEN)
5220                 sdp->host->max_cmd_len = SDEBUG_MAX_CMD_LEN;
5221         if (devip == NULL) {
5222                 devip = find_build_dev_info(sdp);
5223                 if (devip == NULL)
5224                         return 1;  /* no resources, will be marked offline */
5225         }
5226         sdp->hostdata = devip;
5227         if (sdebug_no_uld)
5228                 sdp->no_uld_attach = 1;
5229         config_cdb_len(sdp);
5230         return 0;
5231 }
5232
5233 static void scsi_debug_slave_destroy(struct scsi_device *sdp)
5234 {
5235         struct sdebug_dev_info *devip =
5236                 (struct sdebug_dev_info *)sdp->hostdata;
5237
5238         if (sdebug_verbose)
5239                 pr_info("slave_destroy <%u %u %u %llu>\n",
5240                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5241         if (devip) {
5242                 /* make this slot available for re-use */
5243                 devip->used = false;
5244                 sdp->hostdata = NULL;
5245         }
5246 }
5247
5248 static void stop_qc_helper(struct sdebug_defer *sd_dp,
5249                            enum sdeb_defer_type defer_t)
5250 {
5251         if (!sd_dp)
5252                 return;
5253         if (defer_t == SDEB_DEFER_HRT)
5254                 hrtimer_cancel(&sd_dp->hrt);
5255         else if (defer_t == SDEB_DEFER_WQ)
5256                 cancel_work_sync(&sd_dp->ew.work);
5257 }
5258
5259 /* If @cmnd found deletes its timer or work queue and returns true; else
5260    returns false */
5261 static bool stop_queued_cmnd(struct scsi_cmnd *cmnd)
5262 {
5263         unsigned long iflags;
5264         int j, k, qmax, r_qmax;
5265         enum sdeb_defer_type l_defer_t;
5266         struct sdebug_queue *sqp;
5267         struct sdebug_queued_cmd *sqcp;
5268         struct sdebug_dev_info *devip;
5269         struct sdebug_defer *sd_dp;
5270
5271         for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
5272                 spin_lock_irqsave(&sqp->qc_lock, iflags);
5273                 qmax = sdebug_max_queue;
5274                 r_qmax = atomic_read(&retired_max_queue);
5275                 if (r_qmax > qmax)
5276                         qmax = r_qmax;
5277                 for (k = 0; k < qmax; ++k) {
5278                         if (test_bit(k, sqp->in_use_bm)) {
5279                                 sqcp = &sqp->qc_arr[k];
5280                                 if (cmnd != sqcp->a_cmnd)
5281                                         continue;
5282                                 /* found */
5283                                 devip = (struct sdebug_dev_info *)
5284                                                 cmnd->device->hostdata;
5285                                 if (devip)
5286                                         atomic_dec(&devip->num_in_q);
5287                                 sqcp->a_cmnd = NULL;
5288                                 sd_dp = sqcp->sd_dp;
5289                                 if (sd_dp) {
5290                                         l_defer_t = READ_ONCE(sd_dp->defer_t);
5291                                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_NONE);
5292                                 } else
5293                                         l_defer_t = SDEB_DEFER_NONE;
5294                                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5295                                 stop_qc_helper(sd_dp, l_defer_t);
5296                                 clear_bit(k, sqp->in_use_bm);
5297                                 return true;
5298                         }
5299                 }
5300                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5301         }
5302         return false;
5303 }
5304
5305 /* Deletes (stops) timers or work queues of all queued commands */
5306 static void stop_all_queued(void)
5307 {
5308         unsigned long iflags;
5309         int j, k;
5310         enum sdeb_defer_type l_defer_t;
5311         struct sdebug_queue *sqp;
5312         struct sdebug_queued_cmd *sqcp;
5313         struct sdebug_dev_info *devip;
5314         struct sdebug_defer *sd_dp;
5315
5316         for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
5317                 spin_lock_irqsave(&sqp->qc_lock, iflags);
5318                 for (k = 0; k < SDEBUG_CANQUEUE; ++k) {
5319                         if (test_bit(k, sqp->in_use_bm)) {
5320                                 sqcp = &sqp->qc_arr[k];
5321                                 if (sqcp->a_cmnd == NULL)
5322                                         continue;
5323                                 devip = (struct sdebug_dev_info *)
5324                                         sqcp->a_cmnd->device->hostdata;
5325                                 if (devip)
5326                                         atomic_dec(&devip->num_in_q);
5327                                 sqcp->a_cmnd = NULL;
5328                                 sd_dp = sqcp->sd_dp;
5329                                 if (sd_dp) {
5330                                         l_defer_t = READ_ONCE(sd_dp->defer_t);
5331                                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_NONE);
5332                                 } else
5333                                         l_defer_t = SDEB_DEFER_NONE;
5334                                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5335                                 stop_qc_helper(sd_dp, l_defer_t);
5336                                 clear_bit(k, sqp->in_use_bm);
5337                                 spin_lock_irqsave(&sqp->qc_lock, iflags);
5338                         }
5339                 }
5340                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5341         }
5342 }
5343
5344 /* Free queued command memory on heap */
5345 static void free_all_queued(void)
5346 {
5347         int j, k;
5348         struct sdebug_queue *sqp;
5349         struct sdebug_queued_cmd *sqcp;
5350
5351         for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
5352                 for (k = 0; k < SDEBUG_CANQUEUE; ++k) {
5353                         sqcp = &sqp->qc_arr[k];
5354                         kfree(sqcp->sd_dp);
5355                         sqcp->sd_dp = NULL;
5356                 }
5357         }
5358 }
5359
5360 static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
5361 {
5362         bool ok;
5363
5364         ++num_aborts;
5365         if (SCpnt) {
5366                 ok = stop_queued_cmnd(SCpnt);
5367                 if (SCpnt->device && (SDEBUG_OPT_ALL_NOISE & sdebug_opts))
5368                         sdev_printk(KERN_INFO, SCpnt->device,
5369                                     "%s: command%s found\n", __func__,
5370                                     ok ? "" : " not");
5371         }
5372         return SUCCESS;
5373 }
5374
5375 static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
5376 {
5377         ++num_dev_resets;
5378         if (SCpnt && SCpnt->device) {
5379                 struct scsi_device *sdp = SCpnt->device;
5380                 struct sdebug_dev_info *devip =
5381                                 (struct sdebug_dev_info *)sdp->hostdata;
5382
5383                 if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5384                         sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
5385                 if (devip)
5386                         set_bit(SDEBUG_UA_POR, devip->uas_bm);
5387         }
5388         return SUCCESS;
5389 }
5390
5391 static int scsi_debug_target_reset(struct scsi_cmnd *SCpnt)
5392 {
5393         struct sdebug_host_info *sdbg_host;
5394         struct sdebug_dev_info *devip;
5395         struct scsi_device *sdp;
5396         struct Scsi_Host *hp;
5397         int k = 0;
5398
5399         ++num_target_resets;
5400         if (!SCpnt)
5401                 goto lie;
5402         sdp = SCpnt->device;
5403         if (!sdp)
5404                 goto lie;
5405         if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5406                 sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
5407         hp = sdp->host;
5408         if (!hp)
5409                 goto lie;
5410         sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
5411         if (sdbg_host) {
5412                 list_for_each_entry(devip,
5413                                     &sdbg_host->dev_info_list,
5414                                     dev_list)
5415                         if (devip->target == sdp->id) {
5416                                 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5417                                 ++k;
5418                         }
5419         }
5420         if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
5421                 sdev_printk(KERN_INFO, sdp,
5422                             "%s: %d device(s) found in target\n", __func__, k);
5423 lie:
5424         return SUCCESS;
5425 }
5426
5427 static int scsi_debug_bus_reset(struct scsi_cmnd *SCpnt)
5428 {
5429         struct sdebug_host_info *sdbg_host;
5430         struct sdebug_dev_info *devip;
5431         struct scsi_device *sdp;
5432         struct Scsi_Host *hp;
5433         int k = 0;
5434
5435         ++num_bus_resets;
5436         if (!(SCpnt && SCpnt->device))
5437                 goto lie;
5438         sdp = SCpnt->device;
5439         if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5440                 sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
5441         hp = sdp->host;
5442         if (hp) {
5443                 sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
5444                 if (sdbg_host) {
5445                         list_for_each_entry(devip,
5446                                             &sdbg_host->dev_info_list,
5447                                             dev_list) {
5448                                 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5449                                 ++k;
5450                         }
5451                 }
5452         }
5453         if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
5454                 sdev_printk(KERN_INFO, sdp,
5455                             "%s: %d device(s) found in host\n", __func__, k);
5456 lie:
5457         return SUCCESS;
5458 }
5459
5460 static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt)
5461 {
5462         struct sdebug_host_info *sdbg_host;
5463         struct sdebug_dev_info *devip;
5464         int k = 0;
5465
5466         ++num_host_resets;
5467         if ((SCpnt->device) && (SDEBUG_OPT_ALL_NOISE & sdebug_opts))
5468                 sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
5469         spin_lock(&sdebug_host_list_lock);
5470         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
5471                 list_for_each_entry(devip, &sdbg_host->dev_info_list,
5472                                     dev_list) {
5473                         set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5474                         ++k;
5475                 }
5476         }
5477         spin_unlock(&sdebug_host_list_lock);
5478         stop_all_queued();
5479         if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
5480                 sdev_printk(KERN_INFO, SCpnt->device,
5481                             "%s: %d device(s) found\n", __func__, k);
5482         return SUCCESS;
5483 }
5484
5485 static void sdebug_build_parts(unsigned char *ramp, unsigned long store_size)
5486 {
5487         struct msdos_partition *pp;
5488         int starts[SDEBUG_MAX_PARTS + 2], max_part_secs;
5489         int sectors_per_part, num_sectors, k;
5490         int heads_by_sects, start_sec, end_sec;
5491
5492         /* assume partition table already zeroed */
5493         if ((sdebug_num_parts < 1) || (store_size < 1048576))
5494                 return;
5495         if (sdebug_num_parts > SDEBUG_MAX_PARTS) {
5496                 sdebug_num_parts = SDEBUG_MAX_PARTS;
5497                 pr_warn("reducing partitions to %d\n", SDEBUG_MAX_PARTS);
5498         }
5499         num_sectors = (int)get_sdebug_capacity();
5500         sectors_per_part = (num_sectors - sdebug_sectors_per)
5501                            / sdebug_num_parts;
5502         heads_by_sects = sdebug_heads * sdebug_sectors_per;
5503         starts[0] = sdebug_sectors_per;
5504         max_part_secs = sectors_per_part;
5505         for (k = 1; k < sdebug_num_parts; ++k) {
5506                 starts[k] = ((k * sectors_per_part) / heads_by_sects)
5507                             * heads_by_sects;
5508                 if (starts[k] - starts[k - 1] < max_part_secs)
5509                         max_part_secs = starts[k] - starts[k - 1];
5510         }
5511         starts[sdebug_num_parts] = num_sectors;
5512         starts[sdebug_num_parts + 1] = 0;
5513
5514         ramp[510] = 0x55;       /* magic partition markings */
5515         ramp[511] = 0xAA;
5516         pp = (struct msdos_partition *)(ramp + 0x1be);
5517         for (k = 0; starts[k + 1]; ++k, ++pp) {
5518                 start_sec = starts[k];
5519                 end_sec = starts[k] + max_part_secs - 1;
5520                 pp->boot_ind = 0;
5521
5522                 pp->cyl = start_sec / heads_by_sects;
5523                 pp->head = (start_sec - (pp->cyl * heads_by_sects))
5524                            / sdebug_sectors_per;
5525                 pp->sector = (start_sec % sdebug_sectors_per) + 1;
5526
5527                 pp->end_cyl = end_sec / heads_by_sects;
5528                 pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
5529                                / sdebug_sectors_per;
5530                 pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
5531
5532                 pp->start_sect = cpu_to_le32(start_sec);
5533                 pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
5534                 pp->sys_ind = 0x83;     /* plain Linux partition */
5535         }
5536 }
5537
5538 static void block_unblock_all_queues(bool block)
5539 {
5540         int j;
5541         struct sdebug_queue *sqp;
5542
5543         for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp)
5544                 atomic_set(&sqp->blocked, (int)block);
5545 }
5546
5547 /* Adjust (by rounding down) the sdebug_cmnd_count so abs(every_nth)-1
5548  * commands will be processed normally before triggers occur.
5549  */
5550 static void tweak_cmnd_count(void)
5551 {
5552         int count, modulo;
5553
5554         modulo = abs(sdebug_every_nth);
5555         if (modulo < 2)
5556                 return;
5557         block_unblock_all_queues(true);
5558         count = atomic_read(&sdebug_cmnd_count);
5559         atomic_set(&sdebug_cmnd_count, (count / modulo) * modulo);
5560         block_unblock_all_queues(false);
5561 }
5562
5563 static void clear_queue_stats(void)
5564 {
5565         atomic_set(&sdebug_cmnd_count, 0);
5566         atomic_set(&sdebug_completions, 0);
5567         atomic_set(&sdebug_miss_cpus, 0);
5568         atomic_set(&sdebug_a_tsf, 0);
5569 }
5570
5571 static bool inject_on_this_cmd(void)
5572 {
5573         if (sdebug_every_nth == 0)
5574                 return false;
5575         return (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) == 0;
5576 }
5577
5578 #define INCLUSIVE_TIMING_MAX_NS 1000000         /* 1 millisecond */
5579
5580 /* Complete the processing of the thread that queued a SCSI command to this
5581  * driver. It either completes the command by calling cmnd_done() or
5582  * schedules a hr timer or work queue then returns 0. Returns
5583  * SCSI_MLQUEUE_HOST_BUSY if temporarily out of resources.
5584  */
5585 static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
5586                          int scsi_result,
5587                          int (*pfp)(struct scsi_cmnd *,
5588                                     struct sdebug_dev_info *),
5589                          int delta_jiff, int ndelay)
5590 {
5591         bool new_sd_dp;
5592         bool inject = false;
5593         bool polled = scsi_cmd_to_rq(cmnd)->cmd_flags & REQ_POLLED;
5594         int k, num_in_q, qdepth;
5595         unsigned long iflags;
5596         u64 ns_from_boot = 0;
5597         struct sdebug_queue *sqp;
5598         struct sdebug_queued_cmd *sqcp;
5599         struct scsi_device *sdp;
5600         struct sdebug_defer *sd_dp;
5601
5602         if (unlikely(devip == NULL)) {
5603                 if (scsi_result == 0)
5604                         scsi_result = DID_NO_CONNECT << 16;
5605                 goto respond_in_thread;
5606         }
5607         sdp = cmnd->device;
5608
5609         if (delta_jiff == 0)
5610                 goto respond_in_thread;
5611
5612         sqp = get_queue(cmnd);
5613         spin_lock_irqsave(&sqp->qc_lock, iflags);
5614         if (unlikely(atomic_read(&sqp->blocked))) {
5615                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5616                 return SCSI_MLQUEUE_HOST_BUSY;
5617         }
5618         num_in_q = atomic_read(&devip->num_in_q);
5619         qdepth = cmnd->device->queue_depth;
5620         if (unlikely((qdepth > 0) && (num_in_q >= qdepth))) {
5621                 if (scsi_result) {
5622                         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5623                         goto respond_in_thread;
5624                 } else
5625                         scsi_result = device_qfull_result;
5626         } else if (unlikely(sdebug_every_nth &&
5627                             (SDEBUG_OPT_RARE_TSF & sdebug_opts) &&
5628                             (scsi_result == 0))) {
5629                 if ((num_in_q == (qdepth - 1)) &&
5630                     (atomic_inc_return(&sdebug_a_tsf) >=
5631                      abs(sdebug_every_nth))) {
5632                         atomic_set(&sdebug_a_tsf, 0);
5633                         inject = true;
5634                         scsi_result = device_qfull_result;
5635                 }
5636         }
5637
5638         k = find_first_zero_bit(sqp->in_use_bm, sdebug_max_queue);
5639         if (unlikely(k >= sdebug_max_queue)) {
5640                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5641                 if (scsi_result)
5642                         goto respond_in_thread;
5643                 scsi_result = device_qfull_result;
5644                 if (SDEBUG_OPT_Q_NOISE & sdebug_opts)
5645                         sdev_printk(KERN_INFO, sdp, "%s: max_queue=%d exceeded: TASK SET FULL\n",
5646                                     __func__, sdebug_max_queue);
5647                 goto respond_in_thread;
5648         }
5649         set_bit(k, sqp->in_use_bm);
5650         atomic_inc(&devip->num_in_q);
5651         sqcp = &sqp->qc_arr[k];
5652         sqcp->a_cmnd = cmnd;
5653         cmnd->host_scribble = (unsigned char *)sqcp;
5654         sd_dp = sqcp->sd_dp;
5655         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5656
5657         if (!sd_dp) {
5658                 sd_dp = kzalloc(sizeof(*sd_dp), GFP_ATOMIC);
5659                 if (!sd_dp) {
5660                         atomic_dec(&devip->num_in_q);
5661                         clear_bit(k, sqp->in_use_bm);
5662                         return SCSI_MLQUEUE_HOST_BUSY;
5663                 }
5664                 new_sd_dp = true;
5665         } else {
5666                 new_sd_dp = false;
5667         }
5668
5669         /* Set the hostwide tag */
5670         if (sdebug_host_max_queue)
5671                 sd_dp->hc_idx = get_tag(cmnd);
5672
5673         if (polled)
5674                 ns_from_boot = ktime_get_boottime_ns();
5675
5676         /* one of the resp_*() response functions is called here */
5677         cmnd->result = pfp ? pfp(cmnd, devip) : 0;
5678         if (cmnd->result & SDEG_RES_IMMED_MASK) {
5679                 cmnd->result &= ~SDEG_RES_IMMED_MASK;
5680                 delta_jiff = ndelay = 0;
5681         }
5682         if (cmnd->result == 0 && scsi_result != 0)
5683                 cmnd->result = scsi_result;
5684         if (cmnd->result == 0 && unlikely(sdebug_opts & SDEBUG_OPT_TRANSPORT_ERR)) {
5685                 if (atomic_read(&sdeb_inject_pending)) {
5686                         mk_sense_buffer(cmnd, ABORTED_COMMAND, TRANSPORT_PROBLEM, ACK_NAK_TO);
5687                         atomic_set(&sdeb_inject_pending, 0);
5688                         cmnd->result = check_condition_result;
5689                 }
5690         }
5691
5692         if (unlikely(sdebug_verbose && cmnd->result))
5693                 sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
5694                             __func__, cmnd->result);
5695
5696         if (delta_jiff > 0 || ndelay > 0) {
5697                 ktime_t kt;
5698
5699                 if (delta_jiff > 0) {
5700                         u64 ns = jiffies_to_nsecs(delta_jiff);
5701
5702                         if (sdebug_random && ns < U32_MAX) {
5703                                 ns = get_random_u32_below((u32)ns);
5704                         } else if (sdebug_random) {
5705                                 ns >>= 12;      /* scale to 4 usec precision */
5706                                 if (ns < U32_MAX)       /* over 4 hours max */
5707                                         ns = get_random_u32_below((u32)ns);
5708                                 ns <<= 12;
5709                         }
5710                         kt = ns_to_ktime(ns);
5711                 } else {        /* ndelay has a 4.2 second max */
5712                         kt = sdebug_random ? get_random_u32_below((u32)ndelay) :
5713                                              (u32)ndelay;
5714                         if (ndelay < INCLUSIVE_TIMING_MAX_NS) {
5715                                 u64 d = ktime_get_boottime_ns() - ns_from_boot;
5716
5717                                 if (kt <= d) {  /* elapsed duration >= kt */
5718                                         spin_lock_irqsave(&sqp->qc_lock, iflags);
5719                                         sqcp->a_cmnd = NULL;
5720                                         atomic_dec(&devip->num_in_q);
5721                                         clear_bit(k, sqp->in_use_bm);
5722                                         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5723                                         if (new_sd_dp)
5724                                                 kfree(sd_dp);
5725                                         /* call scsi_done() from this thread */
5726                                         scsi_done(cmnd);
5727                                         return 0;
5728                                 }
5729                                 /* otherwise reduce kt by elapsed time */
5730                                 kt -= d;
5731                         }
5732                 }
5733                 if (polled) {
5734                         sd_dp->cmpl_ts = ktime_add(ns_to_ktime(ns_from_boot), kt);
5735                         spin_lock_irqsave(&sqp->qc_lock, iflags);
5736                         if (!sd_dp->init_poll) {
5737                                 sd_dp->init_poll = true;
5738                                 sqcp->sd_dp = sd_dp;
5739                                 sd_dp->sqa_idx = sqp - sdebug_q_arr;
5740                                 sd_dp->qc_idx = k;
5741                         }
5742                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_POLL);
5743                         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5744                 } else {
5745                         if (!sd_dp->init_hrt) {
5746                                 sd_dp->init_hrt = true;
5747                                 sqcp->sd_dp = sd_dp;
5748                                 hrtimer_init(&sd_dp->hrt, CLOCK_MONOTONIC,
5749                                              HRTIMER_MODE_REL_PINNED);
5750                                 sd_dp->hrt.function = sdebug_q_cmd_hrt_complete;
5751                                 sd_dp->sqa_idx = sqp - sdebug_q_arr;
5752                                 sd_dp->qc_idx = k;
5753                         }
5754                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_HRT);
5755                         /* schedule the invocation of scsi_done() for a later time */
5756                         hrtimer_start(&sd_dp->hrt, kt, HRTIMER_MODE_REL_PINNED);
5757                 }
5758                 if (sdebug_statistics)
5759                         sd_dp->issuing_cpu = raw_smp_processor_id();
5760         } else {        /* jdelay < 0, use work queue */
5761                 if (unlikely((sdebug_opts & SDEBUG_OPT_CMD_ABORT) &&
5762                              atomic_read(&sdeb_inject_pending)))
5763                         sd_dp->aborted = true;
5764                 if (polled) {
5765                         sd_dp->cmpl_ts = ns_to_ktime(ns_from_boot);
5766                         spin_lock_irqsave(&sqp->qc_lock, iflags);
5767                         if (!sd_dp->init_poll) {
5768                                 sd_dp->init_poll = true;
5769                                 sqcp->sd_dp = sd_dp;
5770                                 sd_dp->sqa_idx = sqp - sdebug_q_arr;
5771                                 sd_dp->qc_idx = k;
5772                         }
5773                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_POLL);
5774                         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
5775                 } else {
5776                         if (!sd_dp->init_wq) {
5777                                 sd_dp->init_wq = true;
5778                                 sqcp->sd_dp = sd_dp;
5779                                 sd_dp->sqa_idx = sqp - sdebug_q_arr;
5780                                 sd_dp->qc_idx = k;
5781                                 INIT_WORK(&sd_dp->ew.work, sdebug_q_cmd_wq_complete);
5782                         }
5783                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_WQ);
5784                         schedule_work(&sd_dp->ew.work);
5785                 }
5786                 if (sdebug_statistics)
5787                         sd_dp->issuing_cpu = raw_smp_processor_id();
5788                 if (unlikely(sd_dp->aborted)) {
5789                         sdev_printk(KERN_INFO, sdp, "abort request tag %d\n",
5790                                     scsi_cmd_to_rq(cmnd)->tag);
5791                         blk_abort_request(scsi_cmd_to_rq(cmnd));
5792                         atomic_set(&sdeb_inject_pending, 0);
5793                         sd_dp->aborted = false;
5794                 }
5795         }
5796         if (unlikely((SDEBUG_OPT_Q_NOISE & sdebug_opts) && scsi_result == device_qfull_result))
5797                 sdev_printk(KERN_INFO, sdp, "%s: num_in_q=%d +1, %s%s\n", __func__,
5798                             num_in_q, (inject ? "<inject> " : ""), "status: TASK SET FULL");
5799         return 0;
5800
5801 respond_in_thread:      /* call back to mid-layer using invocation thread */
5802         cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
5803         cmnd->result &= ~SDEG_RES_IMMED_MASK;
5804         if (cmnd->result == 0 && scsi_result != 0)
5805                 cmnd->result = scsi_result;
5806         scsi_done(cmnd);
5807         return 0;
5808 }
5809
5810 /* Note: The following macros create attribute files in the
5811    /sys/module/scsi_debug/parameters directory. Unfortunately this
5812    driver is unaware of a change and cannot trigger auxiliary actions
5813    as it can when the corresponding attribute in the
5814    /sys/bus/pseudo/drivers/scsi_debug directory is changed.
5815  */
5816 module_param_named(add_host, sdebug_add_host, int, S_IRUGO | S_IWUSR);
5817 module_param_named(ato, sdebug_ato, int, S_IRUGO);
5818 module_param_named(cdb_len, sdebug_cdb_len, int, 0644);
5819 module_param_named(clustering, sdebug_clustering, bool, S_IRUGO | S_IWUSR);
5820 module_param_named(delay, sdebug_jdelay, int, S_IRUGO | S_IWUSR);
5821 module_param_named(dev_size_mb, sdebug_dev_size_mb, int, S_IRUGO);
5822 module_param_named(dif, sdebug_dif, int, S_IRUGO);
5823 module_param_named(dix, sdebug_dix, int, S_IRUGO);
5824 module_param_named(dsense, sdebug_dsense, int, S_IRUGO | S_IWUSR);
5825 module_param_named(every_nth, sdebug_every_nth, int, S_IRUGO | S_IWUSR);
5826 module_param_named(fake_rw, sdebug_fake_rw, int, S_IRUGO | S_IWUSR);
5827 module_param_named(guard, sdebug_guard, uint, S_IRUGO);
5828 module_param_named(host_lock, sdebug_host_lock, bool, S_IRUGO | S_IWUSR);
5829 module_param_named(host_max_queue, sdebug_host_max_queue, int, S_IRUGO);
5830 module_param_string(inq_product, sdebug_inq_product_id,
5831                     sizeof(sdebug_inq_product_id), S_IRUGO | S_IWUSR);
5832 module_param_string(inq_rev, sdebug_inq_product_rev,
5833                     sizeof(sdebug_inq_product_rev), S_IRUGO | S_IWUSR);
5834 module_param_string(inq_vendor, sdebug_inq_vendor_id,
5835                     sizeof(sdebug_inq_vendor_id), S_IRUGO | S_IWUSR);
5836 module_param_named(lbprz, sdebug_lbprz, int, S_IRUGO);
5837 module_param_named(lbpu, sdebug_lbpu, int, S_IRUGO);
5838 module_param_named(lbpws, sdebug_lbpws, int, S_IRUGO);
5839 module_param_named(lbpws10, sdebug_lbpws10, int, S_IRUGO);
5840 module_param_named(lowest_aligned, sdebug_lowest_aligned, int, S_IRUGO);
5841 module_param_named(lun_format, sdebug_lun_am_i, int, S_IRUGO | S_IWUSR);
5842 module_param_named(max_luns, sdebug_max_luns, int, S_IRUGO | S_IWUSR);
5843 module_param_named(max_queue, sdebug_max_queue, int, S_IRUGO | S_IWUSR);
5844 module_param_named(medium_error_count, sdebug_medium_error_count, int,
5845                    S_IRUGO | S_IWUSR);
5846 module_param_named(medium_error_start, sdebug_medium_error_start, int,
5847                    S_IRUGO | S_IWUSR);
5848 module_param_named(ndelay, sdebug_ndelay, int, S_IRUGO | S_IWUSR);
5849 module_param_named(no_lun_0, sdebug_no_lun_0, int, S_IRUGO | S_IWUSR);
5850 module_param_named(no_rwlock, sdebug_no_rwlock, bool, S_IRUGO | S_IWUSR);
5851 module_param_named(no_uld, sdebug_no_uld, int, S_IRUGO);
5852 module_param_named(num_parts, sdebug_num_parts, int, S_IRUGO);
5853 module_param_named(num_tgts, sdebug_num_tgts, int, S_IRUGO | S_IWUSR);
5854 module_param_named(opt_blks, sdebug_opt_blks, int, S_IRUGO);
5855 module_param_named(opt_xferlen_exp, sdebug_opt_xferlen_exp, int, S_IRUGO);
5856 module_param_named(opts, sdebug_opts, int, S_IRUGO | S_IWUSR);
5857 module_param_named(per_host_store, sdebug_per_host_store, bool,
5858                    S_IRUGO | S_IWUSR);
5859 module_param_named(physblk_exp, sdebug_physblk_exp, int, S_IRUGO);
5860 module_param_named(ptype, sdebug_ptype, int, S_IRUGO | S_IWUSR);
5861 module_param_named(random, sdebug_random, bool, S_IRUGO | S_IWUSR);
5862 module_param_named(removable, sdebug_removable, bool, S_IRUGO | S_IWUSR);
5863 module_param_named(scsi_level, sdebug_scsi_level, int, S_IRUGO);
5864 module_param_named(sector_size, sdebug_sector_size, int, S_IRUGO);
5865 module_param_named(statistics, sdebug_statistics, bool, S_IRUGO | S_IWUSR);
5866 module_param_named(strict, sdebug_strict, bool, S_IRUGO | S_IWUSR);
5867 module_param_named(submit_queues, submit_queues, int, S_IRUGO);
5868 module_param_named(poll_queues, poll_queues, int, S_IRUGO);
5869 module_param_named(tur_ms_to_ready, sdeb_tur_ms_to_ready, int, S_IRUGO);
5870 module_param_named(unmap_alignment, sdebug_unmap_alignment, int, S_IRUGO);
5871 module_param_named(unmap_granularity, sdebug_unmap_granularity, int, S_IRUGO);
5872 module_param_named(unmap_max_blocks, sdebug_unmap_max_blocks, int, S_IRUGO);
5873 module_param_named(unmap_max_desc, sdebug_unmap_max_desc, int, S_IRUGO);
5874 module_param_named(uuid_ctl, sdebug_uuid_ctl, int, S_IRUGO);
5875 module_param_named(virtual_gb, sdebug_virtual_gb, int, S_IRUGO | S_IWUSR);
5876 module_param_named(vpd_use_hostno, sdebug_vpd_use_hostno, int,
5877                    S_IRUGO | S_IWUSR);
5878 module_param_named(wp, sdebug_wp, bool, S_IRUGO | S_IWUSR);
5879 module_param_named(write_same_length, sdebug_write_same_length, int,
5880                    S_IRUGO | S_IWUSR);
5881 module_param_named(zbc, sdeb_zbc_model_s, charp, S_IRUGO);
5882 module_param_named(zone_cap_mb, sdeb_zbc_zone_cap_mb, int, S_IRUGO);
5883 module_param_named(zone_max_open, sdeb_zbc_max_open, int, S_IRUGO);
5884 module_param_named(zone_nr_conv, sdeb_zbc_nr_conv, int, S_IRUGO);
5885 module_param_named(zone_size_mb, sdeb_zbc_zone_size_mb, int, S_IRUGO);
5886
5887 MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
5888 MODULE_DESCRIPTION("SCSI debug adapter driver");
5889 MODULE_LICENSE("GPL");
5890 MODULE_VERSION(SDEBUG_VERSION);
5891
5892 MODULE_PARM_DESC(add_host, "add n hosts, in sysfs if negative remove host(s) (def=1)");
5893 MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
5894 MODULE_PARM_DESC(cdb_len, "suggest CDB lengths to drivers (def=10)");
5895 MODULE_PARM_DESC(clustering, "when set enables larger transfers (def=0)");
5896 MODULE_PARM_DESC(delay, "response delay (def=1 jiffy); 0:imm, -1,-2:tiny");
5897 MODULE_PARM_DESC(dev_size_mb, "size in MiB of ram shared by devs(def=8)");
5898 MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
5899 MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
5900 MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
5901 MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
5902 MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
5903 MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
5904 MODULE_PARM_DESC(host_lock, "host_lock is ignored (def=0)");
5905 MODULE_PARM_DESC(host_max_queue,
5906                  "host max # of queued cmds (0 to max(def) [max_queue fixed equal for !0])");
5907 MODULE_PARM_DESC(inq_product, "SCSI INQUIRY product string (def=\"scsi_debug\")");
5908 MODULE_PARM_DESC(inq_rev, "SCSI INQUIRY revision string (def=\""
5909                  SDEBUG_VERSION "\")");
5910 MODULE_PARM_DESC(inq_vendor, "SCSI INQUIRY vendor string (def=\"Linux\")");
5911 MODULE_PARM_DESC(lbprz,
5912                  "on read unmapped LBs return 0 when 1 (def), return 0xff when 2");
5913 MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
5914 MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
5915 MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
5916 MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
5917 MODULE_PARM_DESC(lun_format, "LUN format: 0->peripheral (def); 1 --> flat address method");
5918 MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
5919 MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
5920 MODULE_PARM_DESC(medium_error_count, "count of sectors to return follow on MEDIUM error");
5921 MODULE_PARM_DESC(medium_error_start, "starting sector number to return MEDIUM error");
5922 MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
5923 MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
5924 MODULE_PARM_DESC(no_rwlock, "don't protect user data reads+writes (def=0)");
5925 MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
5926 MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
5927 MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
5928 MODULE_PARM_DESC(opt_blks, "optimal transfer length in blocks (def=1024)");
5929 MODULE_PARM_DESC(opt_xferlen_exp, "optimal transfer length granularity exponent (def=physblk_exp)");
5930 MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
5931 MODULE_PARM_DESC(per_host_store, "If set, next positive add_host will get new store (def=0)");
5932 MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
5933 MODULE_PARM_DESC(poll_queues, "support for iouring iopoll queues (1 to max(submit_queues - 1))");
5934 MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
5935 MODULE_PARM_DESC(random, "If set, uniformly randomize command duration between 0 and delay_in_ns");
5936 MODULE_PARM_DESC(removable, "claim to have removable media (def=0)");
5937 MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=7[SPC-5])");
5938 MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
5939 MODULE_PARM_DESC(statistics, "collect statistics on commands, queues (def=0)");
5940 MODULE_PARM_DESC(strict, "stricter checks: reserved field in cdb (def=0)");
5941 MODULE_PARM_DESC(submit_queues, "support for block multi-queue (def=1)");
5942 MODULE_PARM_DESC(tur_ms_to_ready, "TEST UNIT READY millisecs before initial good status (def=0)");
5943 MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
5944 MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
5945 MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
5946 MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
5947 MODULE_PARM_DESC(uuid_ctl,
5948                  "1->use uuid for lu name, 0->don't, 2->all use same (def=0)");
5949 MODULE_PARM_DESC(virtual_gb, "virtual gigabyte (GiB) size (def=0 -> use dev_size_mb)");
5950 MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
5951 MODULE_PARM_DESC(wp, "Write Protect (def=0)");
5952 MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
5953 MODULE_PARM_DESC(zbc, "'none' [0]; 'aware' [1]; 'managed' [2] (def=0). Can have 'host-' prefix");
5954 MODULE_PARM_DESC(zone_cap_mb, "Zone capacity in MiB (def=zone size)");
5955 MODULE_PARM_DESC(zone_max_open, "Maximum number of open zones; [0] for no limit (def=auto)");
5956 MODULE_PARM_DESC(zone_nr_conv, "Number of conventional zones (def=1)");
5957 MODULE_PARM_DESC(zone_size_mb, "Zone size in MiB (def=auto)");
5958
5959 #define SDEBUG_INFO_LEN 256
5960 static char sdebug_info[SDEBUG_INFO_LEN];
5961
5962 static const char *scsi_debug_info(struct Scsi_Host *shp)
5963 {
5964         int k;
5965
5966         k = scnprintf(sdebug_info, SDEBUG_INFO_LEN, "%s: version %s [%s]\n",
5967                       my_name, SDEBUG_VERSION, sdebug_version_date);
5968         if (k >= (SDEBUG_INFO_LEN - 1))
5969                 return sdebug_info;
5970         scnprintf(sdebug_info + k, SDEBUG_INFO_LEN - k,
5971                   "  dev_size_mb=%d, opts=0x%x, submit_queues=%d, %s=%d",
5972                   sdebug_dev_size_mb, sdebug_opts, submit_queues,
5973                   "statistics", (int)sdebug_statistics);
5974         return sdebug_info;
5975 }
5976
5977 /* 'echo <val> > /proc/scsi/scsi_debug/<host_id>' writes to opts */
5978 static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer,
5979                                  int length)
5980 {
5981         char arr[16];
5982         int opts;
5983         int minLen = length > 15 ? 15 : length;
5984
5985         if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
5986                 return -EACCES;
5987         memcpy(arr, buffer, minLen);
5988         arr[minLen] = '\0';
5989         if (1 != sscanf(arr, "%d", &opts))
5990                 return -EINVAL;
5991         sdebug_opts = opts;
5992         sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
5993         sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
5994         if (sdebug_every_nth != 0)
5995                 tweak_cmnd_count();
5996         return length;
5997 }
5998
5999 /* Output seen with 'cat /proc/scsi/scsi_debug/<host_id>'. It will be the
6000  * same for each scsi_debug host (if more than one). Some of the counters
6001  * output are not atomics so might be inaccurate in a busy system. */
6002 static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
6003 {
6004         int f, j, l;
6005         struct sdebug_queue *sqp;
6006         struct sdebug_host_info *sdhp;
6007
6008         seq_printf(m, "scsi_debug adapter driver, version %s [%s]\n",
6009                    SDEBUG_VERSION, sdebug_version_date);
6010         seq_printf(m, "num_tgts=%d, %ssize=%d MB, opts=0x%x, every_nth=%d\n",
6011                    sdebug_num_tgts, "shared (ram) ", sdebug_dev_size_mb,
6012                    sdebug_opts, sdebug_every_nth);
6013         seq_printf(m, "delay=%d, ndelay=%d, max_luns=%d, sector_size=%d %s\n",
6014                    sdebug_jdelay, sdebug_ndelay, sdebug_max_luns,
6015                    sdebug_sector_size, "bytes");
6016         seq_printf(m, "cylinders=%d, heads=%d, sectors=%d, command aborts=%d\n",
6017                    sdebug_cylinders_per, sdebug_heads, sdebug_sectors_per,
6018                    num_aborts);
6019         seq_printf(m, "RESETs: device=%d, target=%d, bus=%d, host=%d\n",
6020                    num_dev_resets, num_target_resets, num_bus_resets,
6021                    num_host_resets);
6022         seq_printf(m, "dix_reads=%d, dix_writes=%d, dif_errors=%d\n",
6023                    dix_reads, dix_writes, dif_errors);
6024         seq_printf(m, "usec_in_jiffy=%lu, statistics=%d\n", TICK_NSEC / 1000,
6025                    sdebug_statistics);
6026         seq_printf(m, "cmnd_count=%d, completions=%d, %s=%d, a_tsf=%d, mq_polls=%d\n",
6027                    atomic_read(&sdebug_cmnd_count),
6028                    atomic_read(&sdebug_completions),
6029                    "miss_cpus", atomic_read(&sdebug_miss_cpus),
6030                    atomic_read(&sdebug_a_tsf),
6031                    atomic_read(&sdeb_mq_poll_count));
6032
6033         seq_printf(m, "submit_queues=%d\n", submit_queues);
6034         for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
6035                 seq_printf(m, "  queue %d:\n", j);
6036                 f = find_first_bit(sqp->in_use_bm, sdebug_max_queue);
6037                 if (f != sdebug_max_queue) {
6038                         l = find_last_bit(sqp->in_use_bm, sdebug_max_queue);
6039                         seq_printf(m, "    in_use_bm BUSY: %s: %d,%d\n",
6040                                    "first,last bits", f, l);
6041                 }
6042         }
6043
6044         seq_printf(m, "this host_no=%d\n", host->host_no);
6045         if (!xa_empty(per_store_ap)) {
6046                 bool niu;
6047                 int idx;
6048                 unsigned long l_idx;
6049                 struct sdeb_store_info *sip;
6050
6051                 seq_puts(m, "\nhost list:\n");
6052                 j = 0;
6053                 list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6054                         idx = sdhp->si_idx;
6055                         seq_printf(m, "  %d: host_no=%d, si_idx=%d\n", j,
6056                                    sdhp->shost->host_no, idx);
6057                         ++j;
6058                 }
6059                 seq_printf(m, "\nper_store array [most_recent_idx=%d]:\n",
6060                            sdeb_most_recent_idx);
6061                 j = 0;
6062                 xa_for_each(per_store_ap, l_idx, sip) {
6063                         niu = xa_get_mark(per_store_ap, l_idx,
6064                                           SDEB_XA_NOT_IN_USE);
6065                         idx = (int)l_idx;
6066                         seq_printf(m, "  %d: idx=%d%s\n", j, idx,
6067                                    (niu ? "  not_in_use" : ""));
6068                         ++j;
6069                 }
6070         }
6071         return 0;
6072 }
6073
6074 static ssize_t delay_show(struct device_driver *ddp, char *buf)
6075 {
6076         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_jdelay);
6077 }
6078 /* Returns -EBUSY if jdelay is being changed and commands are queued. The unit
6079  * of delay is jiffies.
6080  */
6081 static ssize_t delay_store(struct device_driver *ddp, const char *buf,
6082                            size_t count)
6083 {
6084         int jdelay, res;
6085
6086         if (count > 0 && sscanf(buf, "%d", &jdelay) == 1) {
6087                 res = count;
6088                 if (sdebug_jdelay != jdelay) {
6089                         int j, k;
6090                         struct sdebug_queue *sqp;
6091
6092                         block_unblock_all_queues(true);
6093                         for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
6094                              ++j, ++sqp) {
6095                                 k = find_first_bit(sqp->in_use_bm,
6096                                                    sdebug_max_queue);
6097                                 if (k != sdebug_max_queue) {
6098                                         res = -EBUSY;   /* queued commands */
6099                                         break;
6100                                 }
6101                         }
6102                         if (res > 0) {
6103                                 sdebug_jdelay = jdelay;
6104                                 sdebug_ndelay = 0;
6105                         }
6106                         block_unblock_all_queues(false);
6107                 }
6108                 return res;
6109         }
6110         return -EINVAL;
6111 }
6112 static DRIVER_ATTR_RW(delay);
6113
6114 static ssize_t ndelay_show(struct device_driver *ddp, char *buf)
6115 {
6116         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ndelay);
6117 }
6118 /* Returns -EBUSY if ndelay is being changed and commands are queued */
6119 /* If > 0 and accepted then sdebug_jdelay is set to JDELAY_OVERRIDDEN */
6120 static ssize_t ndelay_store(struct device_driver *ddp, const char *buf,
6121                             size_t count)
6122 {
6123         int ndelay, res;
6124
6125         if ((count > 0) && (1 == sscanf(buf, "%d", &ndelay)) &&
6126             (ndelay >= 0) && (ndelay < (1000 * 1000 * 1000))) {
6127                 res = count;
6128                 if (sdebug_ndelay != ndelay) {
6129                         int j, k;
6130                         struct sdebug_queue *sqp;
6131
6132                         block_unblock_all_queues(true);
6133                         for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
6134                              ++j, ++sqp) {
6135                                 k = find_first_bit(sqp->in_use_bm,
6136                                                    sdebug_max_queue);
6137                                 if (k != sdebug_max_queue) {
6138                                         res = -EBUSY;   /* queued commands */
6139                                         break;
6140                                 }
6141                         }
6142                         if (res > 0) {
6143                                 sdebug_ndelay = ndelay;
6144                                 sdebug_jdelay = ndelay  ? JDELAY_OVERRIDDEN
6145                                                         : DEF_JDELAY;
6146                         }
6147                         block_unblock_all_queues(false);
6148                 }
6149                 return res;
6150         }
6151         return -EINVAL;
6152 }
6153 static DRIVER_ATTR_RW(ndelay);
6154
6155 static ssize_t opts_show(struct device_driver *ddp, char *buf)
6156 {
6157         return scnprintf(buf, PAGE_SIZE, "0x%x\n", sdebug_opts);
6158 }
6159
6160 static ssize_t opts_store(struct device_driver *ddp, const char *buf,
6161                           size_t count)
6162 {
6163         int opts;
6164         char work[20];
6165
6166         if (sscanf(buf, "%10s", work) == 1) {
6167                 if (strncasecmp(work, "0x", 2) == 0) {
6168                         if (kstrtoint(work + 2, 16, &opts) == 0)
6169                                 goto opts_done;
6170                 } else {
6171                         if (kstrtoint(work, 10, &opts) == 0)
6172                                 goto opts_done;
6173                 }
6174         }
6175         return -EINVAL;
6176 opts_done:
6177         sdebug_opts = opts;
6178         sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
6179         sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
6180         tweak_cmnd_count();
6181         return count;
6182 }
6183 static DRIVER_ATTR_RW(opts);
6184
6185 static ssize_t ptype_show(struct device_driver *ddp, char *buf)
6186 {
6187         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ptype);
6188 }
6189 static ssize_t ptype_store(struct device_driver *ddp, const char *buf,
6190                            size_t count)
6191 {
6192         int n;
6193
6194         /* Cannot change from or to TYPE_ZBC with sysfs */
6195         if (sdebug_ptype == TYPE_ZBC)
6196                 return -EINVAL;
6197
6198         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6199                 if (n == TYPE_ZBC)
6200                         return -EINVAL;
6201                 sdebug_ptype = n;
6202                 return count;
6203         }
6204         return -EINVAL;
6205 }
6206 static DRIVER_ATTR_RW(ptype);
6207
6208 static ssize_t dsense_show(struct device_driver *ddp, char *buf)
6209 {
6210         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dsense);
6211 }
6212 static ssize_t dsense_store(struct device_driver *ddp, const char *buf,
6213                             size_t count)
6214 {
6215         int n;
6216
6217         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6218                 sdebug_dsense = n;
6219                 return count;
6220         }
6221         return -EINVAL;
6222 }
6223 static DRIVER_ATTR_RW(dsense);
6224
6225 static ssize_t fake_rw_show(struct device_driver *ddp, char *buf)
6226 {
6227         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_fake_rw);
6228 }
6229 static ssize_t fake_rw_store(struct device_driver *ddp, const char *buf,
6230                              size_t count)
6231 {
6232         int n, idx;
6233
6234         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6235                 bool want_store = (n == 0);
6236                 struct sdebug_host_info *sdhp;
6237
6238                 n = (n > 0);
6239                 sdebug_fake_rw = (sdebug_fake_rw > 0);
6240                 if (sdebug_fake_rw == n)
6241                         return count;   /* not transitioning so do nothing */
6242
6243                 if (want_store) {       /* 1 --> 0 transition, set up store */
6244                         if (sdeb_first_idx < 0) {
6245                                 idx = sdebug_add_store();
6246                                 if (idx < 0)
6247                                         return idx;
6248                         } else {
6249                                 idx = sdeb_first_idx;
6250                                 xa_clear_mark(per_store_ap, idx,
6251                                               SDEB_XA_NOT_IN_USE);
6252                         }
6253                         /* make all hosts use same store */
6254                         list_for_each_entry(sdhp, &sdebug_host_list,
6255                                             host_list) {
6256                                 if (sdhp->si_idx != idx) {
6257                                         xa_set_mark(per_store_ap, sdhp->si_idx,
6258                                                     SDEB_XA_NOT_IN_USE);
6259                                         sdhp->si_idx = idx;
6260                                 }
6261                         }
6262                         sdeb_most_recent_idx = idx;
6263                 } else {        /* 0 --> 1 transition is trigger for shrink */
6264                         sdebug_erase_all_stores(true /* apart from first */);
6265                 }
6266                 sdebug_fake_rw = n;
6267                 return count;
6268         }
6269         return -EINVAL;
6270 }
6271 static DRIVER_ATTR_RW(fake_rw);
6272
6273 static ssize_t no_lun_0_show(struct device_driver *ddp, char *buf)
6274 {
6275         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_lun_0);
6276 }
6277 static ssize_t no_lun_0_store(struct device_driver *ddp, const char *buf,
6278                               size_t count)
6279 {
6280         int n;
6281
6282         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6283                 sdebug_no_lun_0 = n;
6284                 return count;
6285         }
6286         return -EINVAL;
6287 }
6288 static DRIVER_ATTR_RW(no_lun_0);
6289
6290 static ssize_t num_tgts_show(struct device_driver *ddp, char *buf)
6291 {
6292         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_tgts);
6293 }
6294 static ssize_t num_tgts_store(struct device_driver *ddp, const char *buf,
6295                               size_t count)
6296 {
6297         int n;
6298
6299         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6300                 sdebug_num_tgts = n;
6301                 sdebug_max_tgts_luns();
6302                 return count;
6303         }
6304         return -EINVAL;
6305 }
6306 static DRIVER_ATTR_RW(num_tgts);
6307
6308 static ssize_t dev_size_mb_show(struct device_driver *ddp, char *buf)
6309 {
6310         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dev_size_mb);
6311 }
6312 static DRIVER_ATTR_RO(dev_size_mb);
6313
6314 static ssize_t per_host_store_show(struct device_driver *ddp, char *buf)
6315 {
6316         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_per_host_store);
6317 }
6318
6319 static ssize_t per_host_store_store(struct device_driver *ddp, const char *buf,
6320                                     size_t count)
6321 {
6322         bool v;
6323
6324         if (kstrtobool(buf, &v))
6325                 return -EINVAL;
6326
6327         sdebug_per_host_store = v;
6328         return count;
6329 }
6330 static DRIVER_ATTR_RW(per_host_store);
6331
6332 static ssize_t num_parts_show(struct device_driver *ddp, char *buf)
6333 {
6334         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_parts);
6335 }
6336 static DRIVER_ATTR_RO(num_parts);
6337
6338 static ssize_t every_nth_show(struct device_driver *ddp, char *buf)
6339 {
6340         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_every_nth);
6341 }
6342 static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
6343                                size_t count)
6344 {
6345         int nth;
6346         char work[20];
6347
6348         if (sscanf(buf, "%10s", work) == 1) {
6349                 if (strncasecmp(work, "0x", 2) == 0) {
6350                         if (kstrtoint(work + 2, 16, &nth) == 0)
6351                                 goto every_nth_done;
6352                 } else {
6353                         if (kstrtoint(work, 10, &nth) == 0)
6354                                 goto every_nth_done;
6355                 }
6356         }
6357         return -EINVAL;
6358
6359 every_nth_done:
6360         sdebug_every_nth = nth;
6361         if (nth && !sdebug_statistics) {
6362                 pr_info("every_nth needs statistics=1, set it\n");
6363                 sdebug_statistics = true;
6364         }
6365         tweak_cmnd_count();
6366         return count;
6367 }
6368 static DRIVER_ATTR_RW(every_nth);
6369
6370 static ssize_t lun_format_show(struct device_driver *ddp, char *buf)
6371 {
6372         return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_lun_am);
6373 }
6374 static ssize_t lun_format_store(struct device_driver *ddp, const char *buf,
6375                                 size_t count)
6376 {
6377         int n;
6378         bool changed;
6379
6380         if (kstrtoint(buf, 0, &n))
6381                 return -EINVAL;
6382         if (n >= 0) {
6383                 if (n > (int)SAM_LUN_AM_FLAT) {
6384                         pr_warn("only LUN address methods 0 and 1 are supported\n");
6385                         return -EINVAL;
6386                 }
6387                 changed = ((int)sdebug_lun_am != n);
6388                 sdebug_lun_am = n;
6389                 if (changed && sdebug_scsi_level >= 5) {        /* >= SPC-3 */
6390                         struct sdebug_host_info *sdhp;
6391                         struct sdebug_dev_info *dp;
6392
6393                         spin_lock(&sdebug_host_list_lock);
6394                         list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6395                                 list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
6396                                         set_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
6397                                 }
6398                         }
6399                         spin_unlock(&sdebug_host_list_lock);
6400                 }
6401                 return count;
6402         }
6403         return -EINVAL;
6404 }
6405 static DRIVER_ATTR_RW(lun_format);
6406
6407 static ssize_t max_luns_show(struct device_driver *ddp, char *buf)
6408 {
6409         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_luns);
6410 }
6411 static ssize_t max_luns_store(struct device_driver *ddp, const char *buf,
6412                               size_t count)
6413 {
6414         int n;
6415         bool changed;
6416
6417         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6418                 if (n > 256) {
6419                         pr_warn("max_luns can be no more than 256\n");
6420                         return -EINVAL;
6421                 }
6422                 changed = (sdebug_max_luns != n);
6423                 sdebug_max_luns = n;
6424                 sdebug_max_tgts_luns();
6425                 if (changed && (sdebug_scsi_level >= 5)) {      /* >= SPC-3 */
6426                         struct sdebug_host_info *sdhp;
6427                         struct sdebug_dev_info *dp;
6428
6429                         spin_lock(&sdebug_host_list_lock);
6430                         list_for_each_entry(sdhp, &sdebug_host_list,
6431                                             host_list) {
6432                                 list_for_each_entry(dp, &sdhp->dev_info_list,
6433                                                     dev_list) {
6434                                         set_bit(SDEBUG_UA_LUNS_CHANGED,
6435                                                 dp->uas_bm);
6436                                 }
6437                         }
6438                         spin_unlock(&sdebug_host_list_lock);
6439                 }
6440                 return count;
6441         }
6442         return -EINVAL;
6443 }
6444 static DRIVER_ATTR_RW(max_luns);
6445
6446 static ssize_t max_queue_show(struct device_driver *ddp, char *buf)
6447 {
6448         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_queue);
6449 }
6450 /* N.B. max_queue can be changed while there are queued commands. In flight
6451  * commands beyond the new max_queue will be completed. */
6452 static ssize_t max_queue_store(struct device_driver *ddp, const char *buf,
6453                                size_t count)
6454 {
6455         int j, n, k, a;
6456         struct sdebug_queue *sqp;
6457
6458         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
6459             (n <= SDEBUG_CANQUEUE) &&
6460             (sdebug_host_max_queue == 0)) {
6461                 block_unblock_all_queues(true);
6462                 k = 0;
6463                 for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
6464                      ++j, ++sqp) {
6465                         a = find_last_bit(sqp->in_use_bm, SDEBUG_CANQUEUE);
6466                         if (a > k)
6467                                 k = a;
6468                 }
6469                 sdebug_max_queue = n;
6470                 if (k == SDEBUG_CANQUEUE)
6471                         atomic_set(&retired_max_queue, 0);
6472                 else if (k >= n)
6473                         atomic_set(&retired_max_queue, k + 1);
6474                 else
6475                         atomic_set(&retired_max_queue, 0);
6476                 block_unblock_all_queues(false);
6477                 return count;
6478         }
6479         return -EINVAL;
6480 }
6481 static DRIVER_ATTR_RW(max_queue);
6482
6483 static ssize_t host_max_queue_show(struct device_driver *ddp, char *buf)
6484 {
6485         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_host_max_queue);
6486 }
6487
6488 static ssize_t no_rwlock_show(struct device_driver *ddp, char *buf)
6489 {
6490         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_rwlock);
6491 }
6492
6493 static ssize_t no_rwlock_store(struct device_driver *ddp, const char *buf, size_t count)
6494 {
6495         bool v;
6496
6497         if (kstrtobool(buf, &v))
6498                 return -EINVAL;
6499
6500         sdebug_no_rwlock = v;
6501         return count;
6502 }
6503 static DRIVER_ATTR_RW(no_rwlock);
6504
6505 /*
6506  * Since this is used for .can_queue, and we get the hc_idx tag from the bitmap
6507  * in range [0, sdebug_host_max_queue), we can't change it.
6508  */
6509 static DRIVER_ATTR_RO(host_max_queue);
6510
6511 static ssize_t no_uld_show(struct device_driver *ddp, char *buf)
6512 {
6513         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_uld);
6514 }
6515 static DRIVER_ATTR_RO(no_uld);
6516
6517 static ssize_t scsi_level_show(struct device_driver *ddp, char *buf)
6518 {
6519         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_scsi_level);
6520 }
6521 static DRIVER_ATTR_RO(scsi_level);
6522
6523 static ssize_t virtual_gb_show(struct device_driver *ddp, char *buf)
6524 {
6525         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_virtual_gb);
6526 }
6527 static ssize_t virtual_gb_store(struct device_driver *ddp, const char *buf,
6528                                 size_t count)
6529 {
6530         int n;
6531         bool changed;
6532
6533         /* Ignore capacity change for ZBC drives for now */
6534         if (sdeb_zbc_in_use)
6535                 return -ENOTSUPP;
6536
6537         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6538                 changed = (sdebug_virtual_gb != n);
6539                 sdebug_virtual_gb = n;
6540                 sdebug_capacity = get_sdebug_capacity();
6541                 if (changed) {
6542                         struct sdebug_host_info *sdhp;
6543                         struct sdebug_dev_info *dp;
6544
6545                         spin_lock(&sdebug_host_list_lock);
6546                         list_for_each_entry(sdhp, &sdebug_host_list,
6547                                             host_list) {
6548                                 list_for_each_entry(dp, &sdhp->dev_info_list,
6549                                                     dev_list) {
6550                                         set_bit(SDEBUG_UA_CAPACITY_CHANGED,
6551                                                 dp->uas_bm);
6552                                 }
6553                         }
6554                         spin_unlock(&sdebug_host_list_lock);
6555                 }
6556                 return count;
6557         }
6558         return -EINVAL;
6559 }
6560 static DRIVER_ATTR_RW(virtual_gb);
6561
6562 static ssize_t add_host_show(struct device_driver *ddp, char *buf)
6563 {
6564         /* absolute number of hosts currently active is what is shown */
6565         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_hosts);
6566 }
6567
6568 static ssize_t add_host_store(struct device_driver *ddp, const char *buf,
6569                               size_t count)
6570 {
6571         bool found;
6572         unsigned long idx;
6573         struct sdeb_store_info *sip;
6574         bool want_phs = (sdebug_fake_rw == 0) && sdebug_per_host_store;
6575         int delta_hosts;
6576
6577         if (sscanf(buf, "%d", &delta_hosts) != 1)
6578                 return -EINVAL;
6579         if (delta_hosts > 0) {
6580                 do {
6581                         found = false;
6582                         if (want_phs) {
6583                                 xa_for_each_marked(per_store_ap, idx, sip,
6584                                                    SDEB_XA_NOT_IN_USE) {
6585                                         sdeb_most_recent_idx = (int)idx;
6586                                         found = true;
6587                                         break;
6588                                 }
6589                                 if (found)      /* re-use case */
6590                                         sdebug_add_host_helper((int)idx);
6591                                 else
6592                                         sdebug_do_add_host(true);
6593                         } else {
6594                                 sdebug_do_add_host(false);
6595                         }
6596                 } while (--delta_hosts);
6597         } else if (delta_hosts < 0) {
6598                 do {
6599                         sdebug_do_remove_host(false);
6600                 } while (++delta_hosts);
6601         }
6602         return count;
6603 }
6604 static DRIVER_ATTR_RW(add_host);
6605
6606 static ssize_t vpd_use_hostno_show(struct device_driver *ddp, char *buf)
6607 {
6608         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_vpd_use_hostno);
6609 }
6610 static ssize_t vpd_use_hostno_store(struct device_driver *ddp, const char *buf,
6611                                     size_t count)
6612 {
6613         int n;
6614
6615         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6616                 sdebug_vpd_use_hostno = n;
6617                 return count;
6618         }
6619         return -EINVAL;
6620 }
6621 static DRIVER_ATTR_RW(vpd_use_hostno);
6622
6623 static ssize_t statistics_show(struct device_driver *ddp, char *buf)
6624 {
6625         return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_statistics);
6626 }
6627 static ssize_t statistics_store(struct device_driver *ddp, const char *buf,
6628                                 size_t count)
6629 {
6630         int n;
6631
6632         if ((count > 0) && (sscanf(buf, "%d", &n) == 1) && (n >= 0)) {
6633                 if (n > 0)
6634                         sdebug_statistics = true;
6635                 else {
6636                         clear_queue_stats();
6637                         sdebug_statistics = false;
6638                 }
6639                 return count;
6640         }
6641         return -EINVAL;
6642 }
6643 static DRIVER_ATTR_RW(statistics);
6644
6645 static ssize_t sector_size_show(struct device_driver *ddp, char *buf)
6646 {
6647         return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_sector_size);
6648 }
6649 static DRIVER_ATTR_RO(sector_size);
6650
6651 static ssize_t submit_queues_show(struct device_driver *ddp, char *buf)
6652 {
6653         return scnprintf(buf, PAGE_SIZE, "%d\n", submit_queues);
6654 }
6655 static DRIVER_ATTR_RO(submit_queues);
6656
6657 static ssize_t dix_show(struct device_driver *ddp, char *buf)
6658 {
6659         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dix);
6660 }
6661 static DRIVER_ATTR_RO(dix);
6662
6663 static ssize_t dif_show(struct device_driver *ddp, char *buf)
6664 {
6665         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dif);
6666 }
6667 static DRIVER_ATTR_RO(dif);
6668
6669 static ssize_t guard_show(struct device_driver *ddp, char *buf)
6670 {
6671         return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_guard);
6672 }
6673 static DRIVER_ATTR_RO(guard);
6674
6675 static ssize_t ato_show(struct device_driver *ddp, char *buf)
6676 {
6677         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ato);
6678 }
6679 static DRIVER_ATTR_RO(ato);
6680
6681 static ssize_t map_show(struct device_driver *ddp, char *buf)
6682 {
6683         ssize_t count = 0;
6684
6685         if (!scsi_debug_lbp())
6686                 return scnprintf(buf, PAGE_SIZE, "0-%u\n",
6687                                  sdebug_store_sectors);
6688
6689         if (sdebug_fake_rw == 0 && !xa_empty(per_store_ap)) {
6690                 struct sdeb_store_info *sip = xa_load(per_store_ap, 0);
6691
6692                 if (sip)
6693                         count = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
6694                                           (int)map_size, sip->map_storep);
6695         }
6696         buf[count++] = '\n';
6697         buf[count] = '\0';
6698
6699         return count;
6700 }
6701 static DRIVER_ATTR_RO(map);
6702
6703 static ssize_t random_show(struct device_driver *ddp, char *buf)
6704 {
6705         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_random);
6706 }
6707
6708 static ssize_t random_store(struct device_driver *ddp, const char *buf,
6709                             size_t count)
6710 {
6711         bool v;
6712
6713         if (kstrtobool(buf, &v))
6714                 return -EINVAL;
6715
6716         sdebug_random = v;
6717         return count;
6718 }
6719 static DRIVER_ATTR_RW(random);
6720
6721 static ssize_t removable_show(struct device_driver *ddp, char *buf)
6722 {
6723         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_removable ? 1 : 0);
6724 }
6725 static ssize_t removable_store(struct device_driver *ddp, const char *buf,
6726                                size_t count)
6727 {
6728         int n;
6729
6730         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6731                 sdebug_removable = (n > 0);
6732                 return count;
6733         }
6734         return -EINVAL;
6735 }
6736 static DRIVER_ATTR_RW(removable);
6737
6738 static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
6739 {
6740         return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_host_lock);
6741 }
6742 /* N.B. sdebug_host_lock does nothing, kept for backward compatibility */
6743 static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
6744                                size_t count)
6745 {
6746         int n;
6747
6748         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6749                 sdebug_host_lock = (n > 0);
6750                 return count;
6751         }
6752         return -EINVAL;
6753 }
6754 static DRIVER_ATTR_RW(host_lock);
6755
6756 static ssize_t strict_show(struct device_driver *ddp, char *buf)
6757 {
6758         return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_strict);
6759 }
6760 static ssize_t strict_store(struct device_driver *ddp, const char *buf,
6761                             size_t count)
6762 {
6763         int n;
6764
6765         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6766                 sdebug_strict = (n > 0);
6767                 return count;
6768         }
6769         return -EINVAL;
6770 }
6771 static DRIVER_ATTR_RW(strict);
6772
6773 static ssize_t uuid_ctl_show(struct device_driver *ddp, char *buf)
6774 {
6775         return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_uuid_ctl);
6776 }
6777 static DRIVER_ATTR_RO(uuid_ctl);
6778
6779 static ssize_t cdb_len_show(struct device_driver *ddp, char *buf)
6780 {
6781         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_cdb_len);
6782 }
6783 static ssize_t cdb_len_store(struct device_driver *ddp, const char *buf,
6784                              size_t count)
6785 {
6786         int ret, n;
6787
6788         ret = kstrtoint(buf, 0, &n);
6789         if (ret)
6790                 return ret;
6791         sdebug_cdb_len = n;
6792         all_config_cdb_len();
6793         return count;
6794 }
6795 static DRIVER_ATTR_RW(cdb_len);
6796
6797 static const char * const zbc_model_strs_a[] = {
6798         [BLK_ZONED_NONE] = "none",
6799         [BLK_ZONED_HA]   = "host-aware",
6800         [BLK_ZONED_HM]   = "host-managed",
6801 };
6802
6803 static const char * const zbc_model_strs_b[] = {
6804         [BLK_ZONED_NONE] = "no",
6805         [BLK_ZONED_HA]   = "aware",
6806         [BLK_ZONED_HM]   = "managed",
6807 };
6808
6809 static const char * const zbc_model_strs_c[] = {
6810         [BLK_ZONED_NONE] = "0",
6811         [BLK_ZONED_HA]   = "1",
6812         [BLK_ZONED_HM]   = "2",
6813 };
6814
6815 static int sdeb_zbc_model_str(const char *cp)
6816 {
6817         int res = sysfs_match_string(zbc_model_strs_a, cp);
6818
6819         if (res < 0) {
6820                 res = sysfs_match_string(zbc_model_strs_b, cp);
6821                 if (res < 0) {
6822                         res = sysfs_match_string(zbc_model_strs_c, cp);
6823                         if (res < 0)
6824                                 return -EINVAL;
6825                 }
6826         }
6827         return res;
6828 }
6829
6830 static ssize_t zbc_show(struct device_driver *ddp, char *buf)
6831 {
6832         return scnprintf(buf, PAGE_SIZE, "%s\n",
6833                          zbc_model_strs_a[sdeb_zbc_model]);
6834 }
6835 static DRIVER_ATTR_RO(zbc);
6836
6837 static ssize_t tur_ms_to_ready_show(struct device_driver *ddp, char *buf)
6838 {
6839         return scnprintf(buf, PAGE_SIZE, "%d\n", sdeb_tur_ms_to_ready);
6840 }
6841 static DRIVER_ATTR_RO(tur_ms_to_ready);
6842
6843 /* Note: The following array creates attribute files in the
6844    /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
6845    files (over those found in the /sys/module/scsi_debug/parameters
6846    directory) is that auxiliary actions can be triggered when an attribute
6847    is changed. For example see: add_host_store() above.
6848  */
6849
6850 static struct attribute *sdebug_drv_attrs[] = {
6851         &driver_attr_delay.attr,
6852         &driver_attr_opts.attr,
6853         &driver_attr_ptype.attr,
6854         &driver_attr_dsense.attr,
6855         &driver_attr_fake_rw.attr,
6856         &driver_attr_host_max_queue.attr,
6857         &driver_attr_no_lun_0.attr,
6858         &driver_attr_num_tgts.attr,
6859         &driver_attr_dev_size_mb.attr,
6860         &driver_attr_num_parts.attr,
6861         &driver_attr_every_nth.attr,
6862         &driver_attr_lun_format.attr,
6863         &driver_attr_max_luns.attr,
6864         &driver_attr_max_queue.attr,
6865         &driver_attr_no_rwlock.attr,
6866         &driver_attr_no_uld.attr,
6867         &driver_attr_scsi_level.attr,
6868         &driver_attr_virtual_gb.attr,
6869         &driver_attr_add_host.attr,
6870         &driver_attr_per_host_store.attr,
6871         &driver_attr_vpd_use_hostno.attr,
6872         &driver_attr_sector_size.attr,
6873         &driver_attr_statistics.attr,
6874         &driver_attr_submit_queues.attr,
6875         &driver_attr_dix.attr,
6876         &driver_attr_dif.attr,
6877         &driver_attr_guard.attr,
6878         &driver_attr_ato.attr,
6879         &driver_attr_map.attr,
6880         &driver_attr_random.attr,
6881         &driver_attr_removable.attr,
6882         &driver_attr_host_lock.attr,
6883         &driver_attr_ndelay.attr,
6884         &driver_attr_strict.attr,
6885         &driver_attr_uuid_ctl.attr,
6886         &driver_attr_cdb_len.attr,
6887         &driver_attr_tur_ms_to_ready.attr,
6888         &driver_attr_zbc.attr,
6889         NULL,
6890 };
6891 ATTRIBUTE_GROUPS(sdebug_drv);
6892
6893 static struct device *pseudo_primary;
6894
6895 static int __init scsi_debug_init(void)
6896 {
6897         bool want_store = (sdebug_fake_rw == 0);
6898         unsigned long sz;
6899         int k, ret, hosts_to_add;
6900         int idx = -1;
6901
6902         ramdisk_lck_a[0] = &atomic_rw;
6903         ramdisk_lck_a[1] = &atomic_rw2;
6904         atomic_set(&retired_max_queue, 0);
6905
6906         if (sdebug_ndelay >= 1000 * 1000 * 1000) {
6907                 pr_warn("ndelay must be less than 1 second, ignored\n");
6908                 sdebug_ndelay = 0;
6909         } else if (sdebug_ndelay > 0)
6910                 sdebug_jdelay = JDELAY_OVERRIDDEN;
6911
6912         switch (sdebug_sector_size) {
6913         case  512:
6914         case 1024:
6915         case 2048:
6916         case 4096:
6917                 break;
6918         default:
6919                 pr_err("invalid sector_size %d\n", sdebug_sector_size);
6920                 return -EINVAL;
6921         }
6922
6923         switch (sdebug_dif) {
6924         case T10_PI_TYPE0_PROTECTION:
6925                 break;
6926         case T10_PI_TYPE1_PROTECTION:
6927         case T10_PI_TYPE2_PROTECTION:
6928         case T10_PI_TYPE3_PROTECTION:
6929                 have_dif_prot = true;
6930                 break;
6931
6932         default:
6933                 pr_err("dif must be 0, 1, 2 or 3\n");
6934                 return -EINVAL;
6935         }
6936
6937         if (sdebug_num_tgts < 0) {
6938                 pr_err("num_tgts must be >= 0\n");
6939                 return -EINVAL;
6940         }
6941
6942         if (sdebug_guard > 1) {
6943                 pr_err("guard must be 0 or 1\n");
6944                 return -EINVAL;
6945         }
6946
6947         if (sdebug_ato > 1) {
6948                 pr_err("ato must be 0 or 1\n");
6949                 return -EINVAL;
6950         }
6951
6952         if (sdebug_physblk_exp > 15) {
6953                 pr_err("invalid physblk_exp %u\n", sdebug_physblk_exp);
6954                 return -EINVAL;
6955         }
6956
6957         sdebug_lun_am = sdebug_lun_am_i;
6958         if (sdebug_lun_am > SAM_LUN_AM_FLAT) {
6959                 pr_warn("Invalid LUN format %u, using default\n", (int)sdebug_lun_am);
6960                 sdebug_lun_am = SAM_LUN_AM_PERIPHERAL;
6961         }
6962
6963         if (sdebug_max_luns > 256) {
6964                 if (sdebug_max_luns > 16384) {
6965                         pr_warn("max_luns can be no more than 16384, use default\n");
6966                         sdebug_max_luns = DEF_MAX_LUNS;
6967                 }
6968                 sdebug_lun_am = SAM_LUN_AM_FLAT;
6969         }
6970
6971         if (sdebug_lowest_aligned > 0x3fff) {
6972                 pr_err("lowest_aligned too big: %u\n", sdebug_lowest_aligned);
6973                 return -EINVAL;
6974         }
6975
6976         if (submit_queues < 1) {
6977                 pr_err("submit_queues must be 1 or more\n");
6978                 return -EINVAL;
6979         }
6980
6981         if ((sdebug_max_queue > SDEBUG_CANQUEUE) || (sdebug_max_queue < 1)) {
6982                 pr_err("max_queue must be in range [1, %d]\n", SDEBUG_CANQUEUE);
6983                 return -EINVAL;
6984         }
6985
6986         if ((sdebug_host_max_queue > SDEBUG_CANQUEUE) ||
6987             (sdebug_host_max_queue < 0)) {
6988                 pr_err("host_max_queue must be in range [0 %d]\n",
6989                        SDEBUG_CANQUEUE);
6990                 return -EINVAL;
6991         }
6992
6993         if (sdebug_host_max_queue &&
6994             (sdebug_max_queue != sdebug_host_max_queue)) {
6995                 sdebug_max_queue = sdebug_host_max_queue;
6996                 pr_warn("fixing max submit queue depth to host max queue depth, %d\n",
6997                         sdebug_max_queue);
6998         }
6999
7000         sdebug_q_arr = kcalloc(submit_queues, sizeof(struct sdebug_queue),
7001                                GFP_KERNEL);
7002         if (sdebug_q_arr == NULL)
7003                 return -ENOMEM;
7004         for (k = 0; k < submit_queues; ++k)
7005                 spin_lock_init(&sdebug_q_arr[k].qc_lock);
7006
7007         /*
7008          * check for host managed zoned block device specified with
7009          * ptype=0x14 or zbc=XXX.
7010          */
7011         if (sdebug_ptype == TYPE_ZBC) {
7012                 sdeb_zbc_model = BLK_ZONED_HM;
7013         } else if (sdeb_zbc_model_s && *sdeb_zbc_model_s) {
7014                 k = sdeb_zbc_model_str(sdeb_zbc_model_s);
7015                 if (k < 0) {
7016                         ret = k;
7017                         goto free_q_arr;
7018                 }
7019                 sdeb_zbc_model = k;
7020                 switch (sdeb_zbc_model) {
7021                 case BLK_ZONED_NONE:
7022                 case BLK_ZONED_HA:
7023                         sdebug_ptype = TYPE_DISK;
7024                         break;
7025                 case BLK_ZONED_HM:
7026                         sdebug_ptype = TYPE_ZBC;
7027                         break;
7028                 default:
7029                         pr_err("Invalid ZBC model\n");
7030                         ret = -EINVAL;
7031                         goto free_q_arr;
7032                 }
7033         }
7034         if (sdeb_zbc_model != BLK_ZONED_NONE) {
7035                 sdeb_zbc_in_use = true;
7036                 if (sdebug_dev_size_mb == DEF_DEV_SIZE_PRE_INIT)
7037                         sdebug_dev_size_mb = DEF_ZBC_DEV_SIZE_MB;
7038         }
7039
7040         if (sdebug_dev_size_mb == DEF_DEV_SIZE_PRE_INIT)
7041                 sdebug_dev_size_mb = DEF_DEV_SIZE_MB;
7042         if (sdebug_dev_size_mb < 1)
7043                 sdebug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
7044         sz = (unsigned long)sdebug_dev_size_mb * 1048576;
7045         sdebug_store_sectors = sz / sdebug_sector_size;
7046         sdebug_capacity = get_sdebug_capacity();
7047
7048         /* play around with geometry, don't waste too much on track 0 */
7049         sdebug_heads = 8;
7050         sdebug_sectors_per = 32;
7051         if (sdebug_dev_size_mb >= 256)
7052                 sdebug_heads = 64;
7053         else if (sdebug_dev_size_mb >= 16)
7054                 sdebug_heads = 32;
7055         sdebug_cylinders_per = (unsigned long)sdebug_capacity /
7056                                (sdebug_sectors_per * sdebug_heads);
7057         if (sdebug_cylinders_per >= 1024) {
7058                 /* other LLDs do this; implies >= 1GB ram disk ... */
7059                 sdebug_heads = 255;
7060                 sdebug_sectors_per = 63;
7061                 sdebug_cylinders_per = (unsigned long)sdebug_capacity /
7062                                (sdebug_sectors_per * sdebug_heads);
7063         }
7064         if (scsi_debug_lbp()) {
7065                 sdebug_unmap_max_blocks =
7066                         clamp(sdebug_unmap_max_blocks, 0U, 0xffffffffU);
7067
7068                 sdebug_unmap_max_desc =
7069                         clamp(sdebug_unmap_max_desc, 0U, 256U);
7070
7071                 sdebug_unmap_granularity =
7072                         clamp(sdebug_unmap_granularity, 1U, 0xffffffffU);
7073
7074                 if (sdebug_unmap_alignment &&
7075                     sdebug_unmap_granularity <=
7076                     sdebug_unmap_alignment) {
7077                         pr_err("ERR: unmap_granularity <= unmap_alignment\n");
7078                         ret = -EINVAL;
7079                         goto free_q_arr;
7080                 }
7081         }
7082         xa_init_flags(per_store_ap, XA_FLAGS_ALLOC | XA_FLAGS_LOCK_IRQ);
7083         if (want_store) {
7084                 idx = sdebug_add_store();
7085                 if (idx < 0) {
7086                         ret = idx;
7087                         goto free_q_arr;
7088                 }
7089         }
7090
7091         pseudo_primary = root_device_register("pseudo_0");
7092         if (IS_ERR(pseudo_primary)) {
7093                 pr_warn("root_device_register() error\n");
7094                 ret = PTR_ERR(pseudo_primary);
7095                 goto free_vm;
7096         }
7097         ret = bus_register(&pseudo_lld_bus);
7098         if (ret < 0) {
7099                 pr_warn("bus_register error: %d\n", ret);
7100                 goto dev_unreg;
7101         }
7102         ret = driver_register(&sdebug_driverfs_driver);
7103         if (ret < 0) {
7104                 pr_warn("driver_register error: %d\n", ret);
7105                 goto bus_unreg;
7106         }
7107
7108         hosts_to_add = sdebug_add_host;
7109         sdebug_add_host = 0;
7110
7111         for (k = 0; k < hosts_to_add; k++) {
7112                 if (want_store && k == 0) {
7113                         ret = sdebug_add_host_helper(idx);
7114                         if (ret < 0) {
7115                                 pr_err("add_host_helper k=%d, error=%d\n",
7116                                        k, -ret);
7117                                 break;
7118                         }
7119                 } else {
7120                         ret = sdebug_do_add_host(want_store &&
7121                                                  sdebug_per_host_store);
7122                         if (ret < 0) {
7123                                 pr_err("add_host k=%d error=%d\n", k, -ret);
7124                                 break;
7125                         }
7126                 }
7127         }
7128         if (sdebug_verbose)
7129                 pr_info("built %d host(s)\n", sdebug_num_hosts);
7130
7131         return 0;
7132
7133 bus_unreg:
7134         bus_unregister(&pseudo_lld_bus);
7135 dev_unreg:
7136         root_device_unregister(pseudo_primary);
7137 free_vm:
7138         sdebug_erase_store(idx, NULL);
7139 free_q_arr:
7140         kfree(sdebug_q_arr);
7141         return ret;
7142 }
7143
7144 static void __exit scsi_debug_exit(void)
7145 {
7146         int k = sdebug_num_hosts;
7147
7148         stop_all_queued();
7149         for (; k; k--)
7150                 sdebug_do_remove_host(true);
7151         free_all_queued();
7152         driver_unregister(&sdebug_driverfs_driver);
7153         bus_unregister(&pseudo_lld_bus);
7154         root_device_unregister(pseudo_primary);
7155
7156         sdebug_erase_all_stores(false);
7157         xa_destroy(per_store_ap);
7158         kfree(sdebug_q_arr);
7159 }
7160
7161 device_initcall(scsi_debug_init);
7162 module_exit(scsi_debug_exit);
7163
7164 static void sdebug_release_adapter(struct device *dev)
7165 {
7166         struct sdebug_host_info *sdbg_host;
7167
7168         sdbg_host = to_sdebug_host(dev);
7169         kfree(sdbg_host);
7170 }
7171
7172 /* idx must be valid, if sip is NULL then it will be obtained using idx */
7173 static void sdebug_erase_store(int idx, struct sdeb_store_info *sip)
7174 {
7175         if (idx < 0)
7176                 return;
7177         if (!sip) {
7178                 if (xa_empty(per_store_ap))
7179                         return;
7180                 sip = xa_load(per_store_ap, idx);
7181                 if (!sip)
7182                         return;
7183         }
7184         vfree(sip->map_storep);
7185         vfree(sip->dif_storep);
7186         vfree(sip->storep);
7187         xa_erase(per_store_ap, idx);
7188         kfree(sip);
7189 }
7190
7191 /* Assume apart_from_first==false only in shutdown case. */
7192 static void sdebug_erase_all_stores(bool apart_from_first)
7193 {
7194         unsigned long idx;
7195         struct sdeb_store_info *sip = NULL;
7196
7197         xa_for_each(per_store_ap, idx, sip) {
7198                 if (apart_from_first)
7199                         apart_from_first = false;
7200                 else
7201                         sdebug_erase_store(idx, sip);
7202         }
7203         if (apart_from_first)
7204                 sdeb_most_recent_idx = sdeb_first_idx;
7205 }
7206
7207 /*
7208  * Returns store xarray new element index (idx) if >=0 else negated errno.
7209  * Limit the number of stores to 65536.
7210  */
7211 static int sdebug_add_store(void)
7212 {
7213         int res;
7214         u32 n_idx;
7215         unsigned long iflags;
7216         unsigned long sz = (unsigned long)sdebug_dev_size_mb * 1048576;
7217         struct sdeb_store_info *sip = NULL;
7218         struct xa_limit xal = { .max = 1 << 16, .min = 0 };
7219
7220         sip = kzalloc(sizeof(*sip), GFP_KERNEL);
7221         if (!sip)
7222                 return -ENOMEM;
7223
7224         xa_lock_irqsave(per_store_ap, iflags);
7225         res = __xa_alloc(per_store_ap, &n_idx, sip, xal, GFP_ATOMIC);
7226         if (unlikely(res < 0)) {
7227                 xa_unlock_irqrestore(per_store_ap, iflags);
7228                 kfree(sip);
7229                 pr_warn("%s: xa_alloc() errno=%d\n", __func__, -res);
7230                 return res;
7231         }
7232         sdeb_most_recent_idx = n_idx;
7233         if (sdeb_first_idx < 0)
7234                 sdeb_first_idx = n_idx;
7235         xa_unlock_irqrestore(per_store_ap, iflags);
7236
7237         res = -ENOMEM;
7238         sip->storep = vzalloc(sz);
7239         if (!sip->storep) {
7240                 pr_err("user data oom\n");
7241                 goto err;
7242         }
7243         if (sdebug_num_parts > 0)
7244                 sdebug_build_parts(sip->storep, sz);
7245
7246         /* DIF/DIX: what T10 calls Protection Information (PI) */
7247         if (sdebug_dix) {
7248                 int dif_size;
7249
7250                 dif_size = sdebug_store_sectors * sizeof(struct t10_pi_tuple);
7251                 sip->dif_storep = vmalloc(dif_size);
7252
7253                 pr_info("dif_storep %u bytes @ %pK\n", dif_size,
7254                         sip->dif_storep);
7255
7256                 if (!sip->dif_storep) {
7257                         pr_err("DIX oom\n");
7258                         goto err;
7259                 }
7260                 memset(sip->dif_storep, 0xff, dif_size);
7261         }
7262         /* Logical Block Provisioning */
7263         if (scsi_debug_lbp()) {
7264                 map_size = lba_to_map_index(sdebug_store_sectors - 1) + 1;
7265                 sip->map_storep = vmalloc(array_size(sizeof(long),
7266                                                      BITS_TO_LONGS(map_size)));
7267
7268                 pr_info("%lu provisioning blocks\n", map_size);
7269
7270                 if (!sip->map_storep) {
7271                         pr_err("LBP map oom\n");
7272                         goto err;
7273                 }
7274
7275                 bitmap_zero(sip->map_storep, map_size);
7276
7277                 /* Map first 1KB for partition table */
7278                 if (sdebug_num_parts)
7279                         map_region(sip, 0, 2);
7280         }
7281
7282         rwlock_init(&sip->macc_lck);
7283         return (int)n_idx;
7284 err:
7285         sdebug_erase_store((int)n_idx, sip);
7286         pr_warn("%s: failed, errno=%d\n", __func__, -res);
7287         return res;
7288 }
7289
7290 static int sdebug_add_host_helper(int per_host_idx)
7291 {
7292         int k, devs_per_host, idx;
7293         int error = -ENOMEM;
7294         struct sdebug_host_info *sdbg_host;
7295         struct sdebug_dev_info *sdbg_devinfo, *tmp;
7296
7297         sdbg_host = kzalloc(sizeof(*sdbg_host), GFP_KERNEL);
7298         if (!sdbg_host)
7299                 return -ENOMEM;
7300         idx = (per_host_idx < 0) ? sdeb_first_idx : per_host_idx;
7301         if (xa_get_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE))
7302                 xa_clear_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE);
7303         sdbg_host->si_idx = idx;
7304
7305         INIT_LIST_HEAD(&sdbg_host->dev_info_list);
7306
7307         devs_per_host = sdebug_num_tgts * sdebug_max_luns;
7308         for (k = 0; k < devs_per_host; k++) {
7309                 sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
7310                 if (!sdbg_devinfo)
7311                         goto clean;
7312         }
7313
7314         spin_lock(&sdebug_host_list_lock);
7315         list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
7316         spin_unlock(&sdebug_host_list_lock);
7317
7318         sdbg_host->dev.bus = &pseudo_lld_bus;
7319         sdbg_host->dev.parent = pseudo_primary;
7320         sdbg_host->dev.release = &sdebug_release_adapter;
7321         dev_set_name(&sdbg_host->dev, "adapter%d", sdebug_num_hosts);
7322
7323         error = device_register(&sdbg_host->dev);
7324         if (error) {
7325                 spin_lock(&sdebug_host_list_lock);
7326                 list_del(&sdbg_host->host_list);
7327                 spin_unlock(&sdebug_host_list_lock);
7328                 goto clean;
7329         }
7330
7331         ++sdebug_num_hosts;
7332         return 0;
7333
7334 clean:
7335         list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
7336                                  dev_list) {
7337                 list_del(&sdbg_devinfo->dev_list);
7338                 kfree(sdbg_devinfo->zstate);
7339                 kfree(sdbg_devinfo);
7340         }
7341         if (sdbg_host->dev.release)
7342                 put_device(&sdbg_host->dev);
7343         else
7344                 kfree(sdbg_host);
7345         pr_warn("%s: failed, errno=%d\n", __func__, -error);
7346         return error;
7347 }
7348
7349 static int sdebug_do_add_host(bool mk_new_store)
7350 {
7351         int ph_idx = sdeb_most_recent_idx;
7352
7353         if (mk_new_store) {
7354                 ph_idx = sdebug_add_store();
7355                 if (ph_idx < 0)
7356                         return ph_idx;
7357         }
7358         return sdebug_add_host_helper(ph_idx);
7359 }
7360
7361 static void sdebug_do_remove_host(bool the_end)
7362 {
7363         int idx = -1;
7364         struct sdebug_host_info *sdbg_host = NULL;
7365         struct sdebug_host_info *sdbg_host2;
7366
7367         spin_lock(&sdebug_host_list_lock);
7368         if (!list_empty(&sdebug_host_list)) {
7369                 sdbg_host = list_entry(sdebug_host_list.prev,
7370                                        struct sdebug_host_info, host_list);
7371                 idx = sdbg_host->si_idx;
7372         }
7373         if (!the_end && idx >= 0) {
7374                 bool unique = true;
7375
7376                 list_for_each_entry(sdbg_host2, &sdebug_host_list, host_list) {
7377                         if (sdbg_host2 == sdbg_host)
7378                                 continue;
7379                         if (idx == sdbg_host2->si_idx) {
7380                                 unique = false;
7381                                 break;
7382                         }
7383                 }
7384                 if (unique) {
7385                         xa_set_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE);
7386                         if (idx == sdeb_most_recent_idx)
7387                                 --sdeb_most_recent_idx;
7388                 }
7389         }
7390         if (sdbg_host)
7391                 list_del(&sdbg_host->host_list);
7392         spin_unlock(&sdebug_host_list_lock);
7393
7394         if (!sdbg_host)
7395                 return;
7396
7397         device_unregister(&sdbg_host->dev);
7398         --sdebug_num_hosts;
7399 }
7400
7401 static int sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
7402 {
7403         int num_in_q = 0;
7404         struct sdebug_dev_info *devip;
7405
7406         block_unblock_all_queues(true);
7407         devip = (struct sdebug_dev_info *)sdev->hostdata;
7408         if (NULL == devip) {
7409                 block_unblock_all_queues(false);
7410                 return  -ENODEV;
7411         }
7412         num_in_q = atomic_read(&devip->num_in_q);
7413
7414         if (qdepth > SDEBUG_CANQUEUE) {
7415                 qdepth = SDEBUG_CANQUEUE;
7416                 pr_warn("%s: requested qdepth [%d] exceeds canqueue [%d], trim\n", __func__,
7417                         qdepth, SDEBUG_CANQUEUE);
7418         }
7419         if (qdepth < 1)
7420                 qdepth = 1;
7421         if (qdepth != sdev->queue_depth)
7422                 scsi_change_queue_depth(sdev, qdepth);
7423
7424         if (SDEBUG_OPT_Q_NOISE & sdebug_opts) {
7425                 sdev_printk(KERN_INFO, sdev, "%s: qdepth=%d, num_in_q=%d\n",
7426                             __func__, qdepth, num_in_q);
7427         }
7428         block_unblock_all_queues(false);
7429         return sdev->queue_depth;
7430 }
7431
7432 static bool fake_timeout(struct scsi_cmnd *scp)
7433 {
7434         if (0 == (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth))) {
7435                 if (sdebug_every_nth < -1)
7436                         sdebug_every_nth = -1;
7437                 if (SDEBUG_OPT_TIMEOUT & sdebug_opts)
7438                         return true; /* ignore command causing timeout */
7439                 else if (SDEBUG_OPT_MAC_TIMEOUT & sdebug_opts &&
7440                          scsi_medium_access_command(scp))
7441                         return true; /* time out reads and writes */
7442         }
7443         return false;
7444 }
7445
7446 /* Response to TUR or media access command when device stopped */
7447 static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
7448 {
7449         int stopped_state;
7450         u64 diff_ns = 0;
7451         ktime_t now_ts = ktime_get_boottime();
7452         struct scsi_device *sdp = scp->device;
7453
7454         stopped_state = atomic_read(&devip->stopped);
7455         if (stopped_state == 2) {
7456                 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
7457                         diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
7458                         if (diff_ns >= ((u64)sdeb_tur_ms_to_ready * 1000000)) {
7459                                 /* tur_ms_to_ready timer extinguished */
7460                                 atomic_set(&devip->stopped, 0);
7461                                 return 0;
7462                         }
7463                 }
7464                 mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x1);
7465                 if (sdebug_verbose)
7466                         sdev_printk(KERN_INFO, sdp,
7467                                     "%s: Not ready: in process of becoming ready\n", my_name);
7468                 if (scp->cmnd[0] == TEST_UNIT_READY) {
7469                         u64 tur_nanosecs_to_ready = (u64)sdeb_tur_ms_to_ready * 1000000;
7470
7471                         if (diff_ns <= tur_nanosecs_to_ready)
7472                                 diff_ns = tur_nanosecs_to_ready - diff_ns;
7473                         else
7474                                 diff_ns = tur_nanosecs_to_ready;
7475                         /* As per 20-061r2 approved for spc6 by T10 on 20200716 */
7476                         do_div(diff_ns, 1000000);       /* diff_ns becomes milliseconds */
7477                         scsi_set_sense_information(scp->sense_buffer, SCSI_SENSE_BUFFERSIZE,
7478                                                    diff_ns);
7479                         return check_condition_result;
7480                 }
7481         }
7482         mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
7483         if (sdebug_verbose)
7484                 sdev_printk(KERN_INFO, sdp, "%s: Not ready: initializing command required\n",
7485                             my_name);
7486         return check_condition_result;
7487 }
7488
7489 static void sdebug_map_queues(struct Scsi_Host *shost)
7490 {
7491         int i, qoff;
7492
7493         if (shost->nr_hw_queues == 1)
7494                 return;
7495
7496         for (i = 0, qoff = 0; i < HCTX_MAX_TYPES; i++) {
7497                 struct blk_mq_queue_map *map = &shost->tag_set.map[i];
7498
7499                 map->nr_queues  = 0;
7500
7501                 if (i == HCTX_TYPE_DEFAULT)
7502                         map->nr_queues = submit_queues - poll_queues;
7503                 else if (i == HCTX_TYPE_POLL)
7504                         map->nr_queues = poll_queues;
7505
7506                 if (!map->nr_queues) {
7507                         BUG_ON(i == HCTX_TYPE_DEFAULT);
7508                         continue;
7509                 }
7510
7511                 map->queue_offset = qoff;
7512                 blk_mq_map_queues(map);
7513
7514                 qoff += map->nr_queues;
7515         }
7516 }
7517
7518 static int sdebug_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num)
7519 {
7520         bool first;
7521         bool retiring = false;
7522         int num_entries = 0;
7523         unsigned int qc_idx = 0;
7524         unsigned long iflags;
7525         ktime_t kt_from_boot = ktime_get_boottime();
7526         struct sdebug_queue *sqp;
7527         struct sdebug_queued_cmd *sqcp;
7528         struct scsi_cmnd *scp;
7529         struct sdebug_dev_info *devip;
7530         struct sdebug_defer *sd_dp;
7531
7532         sqp = sdebug_q_arr + queue_num;
7533
7534         spin_lock_irqsave(&sqp->qc_lock, iflags);
7535
7536         qc_idx = find_first_bit(sqp->in_use_bm, sdebug_max_queue);
7537         if (qc_idx >= sdebug_max_queue)
7538                 goto unlock;
7539
7540         for (first = true; first || qc_idx + 1 < sdebug_max_queue; )   {
7541                 if (first) {
7542                         first = false;
7543                         if (!test_bit(qc_idx, sqp->in_use_bm))
7544                                 continue;
7545                 } else {
7546                         qc_idx = find_next_bit(sqp->in_use_bm, sdebug_max_queue, qc_idx + 1);
7547                 }
7548                 if (qc_idx >= sdebug_max_queue)
7549                         break;
7550
7551                 sqcp = &sqp->qc_arr[qc_idx];
7552                 sd_dp = sqcp->sd_dp;
7553                 if (unlikely(!sd_dp))
7554                         continue;
7555                 scp = sqcp->a_cmnd;
7556                 if (unlikely(scp == NULL)) {
7557                         pr_err("scp is NULL, queue_num=%d, qc_idx=%u from %s\n",
7558                                queue_num, qc_idx, __func__);
7559                         break;
7560                 }
7561                 if (READ_ONCE(sd_dp->defer_t) == SDEB_DEFER_POLL) {
7562                         if (kt_from_boot < sd_dp->cmpl_ts)
7563                                 continue;
7564
7565                 } else          /* ignoring non REQ_POLLED requests */
7566                         continue;
7567                 devip = (struct sdebug_dev_info *)scp->device->hostdata;
7568                 if (likely(devip))
7569                         atomic_dec(&devip->num_in_q);
7570                 else
7571                         pr_err("devip=NULL from %s\n", __func__);
7572                 if (unlikely(atomic_read(&retired_max_queue) > 0))
7573                         retiring = true;
7574
7575                 sqcp->a_cmnd = NULL;
7576                 if (unlikely(!test_and_clear_bit(qc_idx, sqp->in_use_bm))) {
7577                         pr_err("Unexpected completion sqp %p queue_num=%d qc_idx=%u from %s\n",
7578                                 sqp, queue_num, qc_idx, __func__);
7579                         break;
7580                 }
7581                 if (unlikely(retiring)) {       /* user has reduced max_queue */
7582                         int k, retval;
7583
7584                         retval = atomic_read(&retired_max_queue);
7585                         if (qc_idx >= retval) {
7586                                 pr_err("index %d too large\n", retval);
7587                                 break;
7588                         }
7589                         k = find_last_bit(sqp->in_use_bm, retval);
7590                         if ((k < sdebug_max_queue) || (k == retval))
7591                                 atomic_set(&retired_max_queue, 0);
7592                         else
7593                                 atomic_set(&retired_max_queue, k + 1);
7594                 }
7595                 WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_NONE);
7596                 spin_unlock_irqrestore(&sqp->qc_lock, iflags);
7597                 scsi_done(scp); /* callback to mid level */
7598                 num_entries++;
7599                 spin_lock_irqsave(&sqp->qc_lock, iflags);
7600                 if (find_first_bit(sqp->in_use_bm, sdebug_max_queue) >= sdebug_max_queue)
7601                         break;
7602         }
7603
7604 unlock:
7605         spin_unlock_irqrestore(&sqp->qc_lock, iflags);
7606
7607         if (num_entries > 0)
7608                 atomic_add(num_entries, &sdeb_mq_poll_count);
7609         return num_entries;
7610 }
7611
7612 static int scsi_debug_queuecommand(struct Scsi_Host *shost,
7613                                    struct scsi_cmnd *scp)
7614 {
7615         u8 sdeb_i;
7616         struct scsi_device *sdp = scp->device;
7617         const struct opcode_info_t *oip;
7618         const struct opcode_info_t *r_oip;
7619         struct sdebug_dev_info *devip;
7620         u8 *cmd = scp->cmnd;
7621         int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
7622         int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *) = NULL;
7623         int k, na;
7624         int errsts = 0;
7625         u64 lun_index = sdp->lun & 0x3FFF;
7626         u32 flags;
7627         u16 sa;
7628         u8 opcode = cmd[0];
7629         bool has_wlun_rl;
7630         bool inject_now;
7631
7632         scsi_set_resid(scp, 0);
7633         if (sdebug_statistics) {
7634                 atomic_inc(&sdebug_cmnd_count);
7635                 inject_now = inject_on_this_cmd();
7636         } else {
7637                 inject_now = false;
7638         }
7639         if (unlikely(sdebug_verbose &&
7640                      !(SDEBUG_OPT_NO_CDB_NOISE & sdebug_opts))) {
7641                 char b[120];
7642                 int n, len, sb;
7643
7644                 len = scp->cmd_len;
7645                 sb = (int)sizeof(b);
7646                 if (len > 32)
7647                         strcpy(b, "too long, over 32 bytes");
7648                 else {
7649                         for (k = 0, n = 0; k < len && n < sb; ++k)
7650                                 n += scnprintf(b + n, sb - n, "%02x ",
7651                                                (u32)cmd[k]);
7652                 }
7653                 sdev_printk(KERN_INFO, sdp, "%s: tag=%#x, cmd %s\n", my_name,
7654                             blk_mq_unique_tag(scsi_cmd_to_rq(scp)), b);
7655         }
7656         if (unlikely(inject_now && (sdebug_opts & SDEBUG_OPT_HOST_BUSY)))
7657                 return SCSI_MLQUEUE_HOST_BUSY;
7658         has_wlun_rl = (sdp->lun == SCSI_W_LUN_REPORT_LUNS);
7659         if (unlikely(lun_index >= sdebug_max_luns && !has_wlun_rl))
7660                 goto err_out;
7661
7662         sdeb_i = opcode_ind_arr[opcode];        /* fully mapped */
7663         oip = &opcode_info_arr[sdeb_i];         /* safe if table consistent */
7664         devip = (struct sdebug_dev_info *)sdp->hostdata;
7665         if (unlikely(!devip)) {
7666                 devip = find_build_dev_info(sdp);
7667                 if (NULL == devip)
7668                         goto err_out;
7669         }
7670         if (unlikely(inject_now && !atomic_read(&sdeb_inject_pending)))
7671                 atomic_set(&sdeb_inject_pending, 1);
7672
7673         na = oip->num_attached;
7674         r_pfp = oip->pfp;
7675         if (na) {       /* multiple commands with this opcode */
7676                 r_oip = oip;
7677                 if (FF_SA & r_oip->flags) {
7678                         if (F_SA_LOW & oip->flags)
7679                                 sa = 0x1f & cmd[1];
7680                         else
7681                                 sa = get_unaligned_be16(cmd + 8);
7682                         for (k = 0; k <= na; oip = r_oip->arrp + k++) {
7683                                 if (opcode == oip->opcode && sa == oip->sa)
7684                                         break;
7685                         }
7686                 } else {   /* since no service action only check opcode */
7687                         for (k = 0; k <= na; oip = r_oip->arrp + k++) {
7688                                 if (opcode == oip->opcode)
7689                                         break;
7690                         }
7691                 }
7692                 if (k > na) {
7693                         if (F_SA_LOW & r_oip->flags)
7694                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 4);
7695                         else if (F_SA_HIGH & r_oip->flags)
7696                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 8, 7);
7697                         else
7698                                 mk_sense_invalid_opcode(scp);
7699                         goto check_cond;
7700                 }
7701         }       /* else (when na==0) we assume the oip is a match */
7702         flags = oip->flags;
7703         if (unlikely(F_INV_OP & flags)) {
7704                 mk_sense_invalid_opcode(scp);
7705                 goto check_cond;
7706         }
7707         if (unlikely(has_wlun_rl && !(F_RL_WLUN_OK & flags))) {
7708                 if (sdebug_verbose)
7709                         sdev_printk(KERN_INFO, sdp, "%s: Opcode 0x%x not%s\n",
7710                                     my_name, opcode, " supported for wlun");
7711                 mk_sense_invalid_opcode(scp);
7712                 goto check_cond;
7713         }
7714         if (unlikely(sdebug_strict)) {  /* check cdb against mask */
7715                 u8 rem;
7716                 int j;
7717
7718                 for (k = 1; k < oip->len_mask[0] && k < 16; ++k) {
7719                         rem = ~oip->len_mask[k] & cmd[k];
7720                         if (rem) {
7721                                 for (j = 7; j >= 0; --j, rem <<= 1) {
7722                                         if (0x80 & rem)
7723                                                 break;
7724                                 }
7725                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, k, j);
7726                                 goto check_cond;
7727                         }
7728                 }
7729         }
7730         if (unlikely(!(F_SKIP_UA & flags) &&
7731                      find_first_bit(devip->uas_bm,
7732                                     SDEBUG_NUM_UAS) != SDEBUG_NUM_UAS)) {
7733                 errsts = make_ua(scp, devip);
7734                 if (errsts)
7735                         goto check_cond;
7736         }
7737         if (unlikely(((F_M_ACCESS & flags) || scp->cmnd[0] == TEST_UNIT_READY) &&
7738                      atomic_read(&devip->stopped))) {
7739                 errsts = resp_not_ready(scp, devip);
7740                 if (errsts)
7741                         goto fini;
7742         }
7743         if (sdebug_fake_rw && (F_FAKE_RW & flags))
7744                 goto fini;
7745         if (unlikely(sdebug_every_nth)) {
7746                 if (fake_timeout(scp))
7747                         return 0;       /* ignore command: make trouble */
7748         }
7749         if (likely(oip->pfp))
7750                 pfp = oip->pfp; /* calls a resp_* function */
7751         else
7752                 pfp = r_pfp;    /* if leaf function ptr NULL, try the root's */
7753
7754 fini:
7755         if (F_DELAY_OVERR & flags)      /* cmds like INQUIRY respond asap */
7756                 return schedule_resp(scp, devip, errsts, pfp, 0, 0);
7757         else if ((flags & F_LONG_DELAY) && (sdebug_jdelay > 0 ||
7758                                             sdebug_ndelay > 10000)) {
7759                 /*
7760                  * Skip long delays if ndelay <= 10 microseconds. Otherwise
7761                  * for Start Stop Unit (SSU) want at least 1 second delay and
7762                  * if sdebug_jdelay>1 want a long delay of that many seconds.
7763                  * For Synchronize Cache want 1/20 of SSU's delay.
7764                  */
7765                 int jdelay = (sdebug_jdelay < 2) ? 1 : sdebug_jdelay;
7766                 int denom = (flags & F_SYNC_DELAY) ? 20 : 1;
7767
7768                 jdelay = mult_frac(USER_HZ * jdelay, HZ, denom * USER_HZ);
7769                 return schedule_resp(scp, devip, errsts, pfp, jdelay, 0);
7770         } else
7771                 return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay,
7772                                      sdebug_ndelay);
7773 check_cond:
7774         return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0);
7775 err_out:
7776         return schedule_resp(scp, NULL, DID_NO_CONNECT << 16, NULL, 0, 0);
7777 }
7778
7779 static struct scsi_host_template sdebug_driver_template = {
7780         .show_info =            scsi_debug_show_info,
7781         .write_info =           scsi_debug_write_info,
7782         .proc_name =            sdebug_proc_name,
7783         .name =                 "SCSI DEBUG",
7784         .info =                 scsi_debug_info,
7785         .slave_alloc =          scsi_debug_slave_alloc,
7786         .slave_configure =      scsi_debug_slave_configure,
7787         .slave_destroy =        scsi_debug_slave_destroy,
7788         .ioctl =                scsi_debug_ioctl,
7789         .queuecommand =         scsi_debug_queuecommand,
7790         .change_queue_depth =   sdebug_change_qdepth,
7791         .map_queues =           sdebug_map_queues,
7792         .mq_poll =              sdebug_blk_mq_poll,
7793         .eh_abort_handler =     scsi_debug_abort,
7794         .eh_device_reset_handler = scsi_debug_device_reset,
7795         .eh_target_reset_handler = scsi_debug_target_reset,
7796         .eh_bus_reset_handler = scsi_debug_bus_reset,
7797         .eh_host_reset_handler = scsi_debug_host_reset,
7798         .can_queue =            SDEBUG_CANQUEUE,
7799         .this_id =              7,
7800         .sg_tablesize =         SG_MAX_SEGMENTS,
7801         .cmd_per_lun =          DEF_CMD_PER_LUN,
7802         .max_sectors =          -1U,
7803         .max_segment_size =     -1U,
7804         .module =               THIS_MODULE,
7805         .track_queue_depth =    1,
7806 };
7807
7808 static int sdebug_driver_probe(struct device *dev)
7809 {
7810         int error = 0;
7811         struct sdebug_host_info *sdbg_host;
7812         struct Scsi_Host *hpnt;
7813         int hprot;
7814
7815         sdbg_host = to_sdebug_host(dev);
7816
7817         sdebug_driver_template.can_queue = sdebug_max_queue;
7818         sdebug_driver_template.cmd_per_lun = sdebug_max_queue;
7819         if (!sdebug_clustering)
7820                 sdebug_driver_template.dma_boundary = PAGE_SIZE - 1;
7821
7822         hpnt = scsi_host_alloc(&sdebug_driver_template, sizeof(sdbg_host));
7823         if (NULL == hpnt) {
7824                 pr_err("scsi_host_alloc failed\n");
7825                 error = -ENODEV;
7826                 return error;
7827         }
7828         if (submit_queues > nr_cpu_ids) {
7829                 pr_warn("%s: trim submit_queues (was %d) to nr_cpu_ids=%u\n",
7830                         my_name, submit_queues, nr_cpu_ids);
7831                 submit_queues = nr_cpu_ids;
7832         }
7833         /*
7834          * Decide whether to tell scsi subsystem that we want mq. The
7835          * following should give the same answer for each host.
7836          */
7837         hpnt->nr_hw_queues = submit_queues;
7838         if (sdebug_host_max_queue)
7839                 hpnt->host_tagset = 1;
7840
7841         /* poll queues are possible for nr_hw_queues > 1 */
7842         if (hpnt->nr_hw_queues == 1 || (poll_queues < 1)) {
7843                 pr_warn("%s: trim poll_queues to 0. poll_q/nr_hw = (%d/%d)\n",
7844                          my_name, poll_queues, hpnt->nr_hw_queues);
7845                 poll_queues = 0;
7846         }
7847
7848         /*
7849          * Poll queues don't need interrupts, but we need at least one I/O queue
7850          * left over for non-polled I/O.
7851          * If condition not met, trim poll_queues to 1 (just for simplicity).
7852          */
7853         if (poll_queues >= submit_queues) {
7854                 if (submit_queues < 3)
7855                         pr_warn("%s: trim poll_queues to 1\n", my_name);
7856                 else
7857                         pr_warn("%s: trim poll_queues to 1. Perhaps try poll_queues=%d\n",
7858                                 my_name, submit_queues - 1);
7859                 poll_queues = 1;
7860         }
7861         if (poll_queues)
7862                 hpnt->nr_maps = 3;
7863
7864         sdbg_host->shost = hpnt;
7865         *((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
7866         if ((hpnt->this_id >= 0) && (sdebug_num_tgts > hpnt->this_id))
7867                 hpnt->max_id = sdebug_num_tgts + 1;
7868         else
7869                 hpnt->max_id = sdebug_num_tgts;
7870         /* = sdebug_max_luns; */
7871         hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
7872
7873         hprot = 0;
7874
7875         switch (sdebug_dif) {
7876
7877         case T10_PI_TYPE1_PROTECTION:
7878                 hprot = SHOST_DIF_TYPE1_PROTECTION;
7879                 if (sdebug_dix)
7880                         hprot |= SHOST_DIX_TYPE1_PROTECTION;
7881                 break;
7882
7883         case T10_PI_TYPE2_PROTECTION:
7884                 hprot = SHOST_DIF_TYPE2_PROTECTION;
7885                 if (sdebug_dix)
7886                         hprot |= SHOST_DIX_TYPE2_PROTECTION;
7887                 break;
7888
7889         case T10_PI_TYPE3_PROTECTION:
7890                 hprot = SHOST_DIF_TYPE3_PROTECTION;
7891                 if (sdebug_dix)
7892                         hprot |= SHOST_DIX_TYPE3_PROTECTION;
7893                 break;
7894
7895         default:
7896                 if (sdebug_dix)
7897                         hprot |= SHOST_DIX_TYPE0_PROTECTION;
7898                 break;
7899         }
7900
7901         scsi_host_set_prot(hpnt, hprot);
7902
7903         if (have_dif_prot || sdebug_dix)
7904                 pr_info("host protection%s%s%s%s%s%s%s\n",
7905                         (hprot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
7906                         (hprot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
7907                         (hprot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
7908                         (hprot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
7909                         (hprot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
7910                         (hprot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
7911                         (hprot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
7912
7913         if (sdebug_guard == 1)
7914                 scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
7915         else
7916                 scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
7917
7918         sdebug_verbose = !!(SDEBUG_OPT_NOISE & sdebug_opts);
7919         sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & sdebug_opts);
7920         if (sdebug_every_nth)   /* need stats counters for every_nth */
7921                 sdebug_statistics = true;
7922         error = scsi_add_host(hpnt, &sdbg_host->dev);
7923         if (error) {
7924                 pr_err("scsi_add_host failed\n");
7925                 error = -ENODEV;
7926                 scsi_host_put(hpnt);
7927         } else {
7928                 scsi_scan_host(hpnt);
7929         }
7930
7931         return error;
7932 }
7933
7934 static void sdebug_driver_remove(struct device *dev)
7935 {
7936         struct sdebug_host_info *sdbg_host;
7937         struct sdebug_dev_info *sdbg_devinfo, *tmp;
7938
7939         sdbg_host = to_sdebug_host(dev);
7940
7941         scsi_remove_host(sdbg_host->shost);
7942
7943         list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
7944                                  dev_list) {
7945                 list_del(&sdbg_devinfo->dev_list);
7946                 kfree(sdbg_devinfo->zstate);
7947                 kfree(sdbg_devinfo);
7948         }
7949
7950         scsi_host_put(sdbg_host->shost);
7951 }
7952
7953 static int pseudo_lld_bus_match(struct device *dev,
7954                                 struct device_driver *dev_driver)
7955 {
7956         return 1;
7957 }
7958
7959 static struct bus_type pseudo_lld_bus = {
7960         .name = "pseudo",
7961         .match = pseudo_lld_bus_match,
7962         .probe = sdebug_driver_probe,
7963         .remove = sdebug_driver_remove,
7964         .drv_groups = sdebug_drv_groups,
7965 };