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