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