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