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