xref: /openbmc/linux/drivers/scsi/scsi_debug.c (revision fca3aa16)
1 /*
2  * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
3  *  Copyright (C) 1992  Eric Youngdale
4  *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
5  *  to make sure that we are not getting blocks mixed up, and PANIC if
6  *  anything out of the ordinary is seen.
7  * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8  *
9  * Copyright (C) 2001 - 2018 Douglas Gilbert
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2, or (at your option)
14  * any later version.
15  *
16  *  For documentation see http://sg.danny.cz/sg/sdebug26.html
17  *
18  */
19 
20 
21 #define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
22 
23 #include <linux/module.h>
24 
25 #include <linux/kernel.h>
26 #include <linux/errno.h>
27 #include <linux/jiffies.h>
28 #include <linux/slab.h>
29 #include <linux/types.h>
30 #include <linux/string.h>
31 #include <linux/genhd.h>
32 #include <linux/fs.h>
33 #include <linux/init.h>
34 #include <linux/proc_fs.h>
35 #include <linux/vmalloc.h>
36 #include <linux/moduleparam.h>
37 #include <linux/scatterlist.h>
38 #include <linux/blkdev.h>
39 #include <linux/crc-t10dif.h>
40 #include <linux/spinlock.h>
41 #include <linux/interrupt.h>
42 #include <linux/atomic.h>
43 #include <linux/hrtimer.h>
44 #include <linux/uuid.h>
45 #include <linux/t10-pi.h>
46 
47 #include <net/checksum.h>
48 
49 #include <asm/unaligned.h>
50 
51 #include <scsi/scsi.h>
52 #include <scsi/scsi_cmnd.h>
53 #include <scsi/scsi_device.h>
54 #include <scsi/scsi_host.h>
55 #include <scsi/scsicam.h>
56 #include <scsi/scsi_eh.h>
57 #include <scsi/scsi_tcq.h>
58 #include <scsi/scsi_dbg.h>
59 
60 #include "sd.h"
61 #include "scsi_logging.h"
62 
63 /* make sure inq_product_rev string corresponds to this version */
64 #define SDEBUG_VERSION "0188"	/* format to fit INQUIRY revision field */
65 static const char *sdebug_version_date = "20180128";
66 
67 #define MY_NAME "scsi_debug"
68 
69 /* Additional Sense Code (ASC) */
70 #define NO_ADDITIONAL_SENSE 0x0
71 #define LOGICAL_UNIT_NOT_READY 0x4
72 #define LOGICAL_UNIT_COMMUNICATION_FAILURE 0x8
73 #define UNRECOVERED_READ_ERR 0x11
74 #define PARAMETER_LIST_LENGTH_ERR 0x1a
75 #define INVALID_OPCODE 0x20
76 #define LBA_OUT_OF_RANGE 0x21
77 #define INVALID_FIELD_IN_CDB 0x24
78 #define INVALID_FIELD_IN_PARAM_LIST 0x26
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 
98 /* Additional Sense Code Qualifier (ASCQ) */
99 #define ACK_NAK_TO 0x3
100 
101 /* Default values for driver parameters */
102 #define DEF_NUM_HOST   1
103 #define DEF_NUM_TGTS   1
104 #define DEF_MAX_LUNS   1
105 /* With these defaults, this driver will make 1 host with 1 target
106  * (id 0) containing 1 logical unit (lun 0). That is 1 device.
107  */
108 #define DEF_ATO 1
109 #define DEF_CDB_LEN 10
110 #define DEF_JDELAY   1		/* if > 0 unit is a jiffy */
111 #define DEF_DEV_SIZE_MB   8
112 #define DEF_DIF 0
113 #define DEF_DIX 0
114 #define DEF_D_SENSE   0
115 #define DEF_EVERY_NTH   0
116 #define DEF_FAKE_RW	0
117 #define DEF_GUARD 0
118 #define DEF_HOST_LOCK 0
119 #define DEF_LBPU 0
120 #define DEF_LBPWS 0
121 #define DEF_LBPWS10 0
122 #define DEF_LBPRZ 1
123 #define DEF_LOWEST_ALIGNED 0
124 #define DEF_NDELAY   0		/* if > 0 unit is a nanosecond */
125 #define DEF_NO_LUN_0   0
126 #define DEF_NUM_PARTS   0
127 #define DEF_OPTS   0
128 #define DEF_OPT_BLKS 1024
129 #define DEF_PHYSBLK_EXP 0
130 #define DEF_OPT_XFERLEN_EXP 0
131 #define DEF_PTYPE   TYPE_DISK
132 #define DEF_REMOVABLE false
133 #define DEF_SCSI_LEVEL   7    /* INQUIRY, byte2 [6->SPC-4; 7->SPC-5] */
134 #define DEF_SECTOR_SIZE 512
135 #define DEF_UNMAP_ALIGNMENT 0
136 #define DEF_UNMAP_GRANULARITY 1
137 #define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
138 #define DEF_UNMAP_MAX_DESC 256
139 #define DEF_VIRTUAL_GB   0
140 #define DEF_VPD_USE_HOSTNO 1
141 #define DEF_WRITESAME_LENGTH 0xFFFF
142 #define DEF_STRICT 0
143 #define DEF_STATISTICS false
144 #define DEF_SUBMIT_QUEUES 1
145 #define DEF_UUID_CTL 0
146 #define JDELAY_OVERRIDDEN -9999
147 
148 #define SDEBUG_LUN_0_VAL 0
149 
150 /* bit mask values for sdebug_opts */
151 #define SDEBUG_OPT_NOISE		1
152 #define SDEBUG_OPT_MEDIUM_ERR		2
153 #define SDEBUG_OPT_TIMEOUT		4
154 #define SDEBUG_OPT_RECOVERED_ERR	8
155 #define SDEBUG_OPT_TRANSPORT_ERR	16
156 #define SDEBUG_OPT_DIF_ERR		32
157 #define SDEBUG_OPT_DIX_ERR		64
158 #define SDEBUG_OPT_MAC_TIMEOUT		128
159 #define SDEBUG_OPT_SHORT_TRANSFER	0x100
160 #define SDEBUG_OPT_Q_NOISE		0x200
161 #define SDEBUG_OPT_ALL_TSF		0x400
162 #define SDEBUG_OPT_RARE_TSF		0x800
163 #define SDEBUG_OPT_N_WCE		0x1000
164 #define SDEBUG_OPT_RESET_NOISE		0x2000
165 #define SDEBUG_OPT_NO_CDB_NOISE		0x4000
166 #define SDEBUG_OPT_HOST_BUSY		0x8000
167 #define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \
168 			      SDEBUG_OPT_RESET_NOISE)
169 #define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \
170 				  SDEBUG_OPT_TRANSPORT_ERR | \
171 				  SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \
172 				  SDEBUG_OPT_SHORT_TRANSFER | \
173 				  SDEBUG_OPT_HOST_BUSY)
174 /* When "every_nth" > 0 then modulo "every_nth" commands:
175  *   - a missing response is simulated if SDEBUG_OPT_TIMEOUT is set
176  *   - a RECOVERED_ERROR is simulated on successful read and write
177  *     commands if SDEBUG_OPT_RECOVERED_ERR is set.
178  *   - a TRANSPORT_ERROR is simulated on successful read and write
179  *     commands if SDEBUG_OPT_TRANSPORT_ERR is set.
180  *
181  * When "every_nth" < 0 then after "- every_nth" commands:
182  *   - a missing response is simulated if SDEBUG_OPT_TIMEOUT is set
183  *   - a RECOVERED_ERROR is simulated on successful read and write
184  *     commands if SDEBUG_OPT_RECOVERED_ERR is set.
185  *   - a TRANSPORT_ERROR is simulated on successful read and write
186  *     commands if _DEBUG_OPT_TRANSPORT_ERR is set.
187  * This will continue on every subsequent command until some other action
188  * occurs (e.g. the user * writing a new value (other than -1 or 1) to
189  * every_nth via sysfs).
190  */
191 
192 /* As indicated in SAM-5 and SPC-4 Unit Attentions (UAs) are returned in
193  * priority order. In the subset implemented here lower numbers have higher
194  * priority. The UA numbers should be a sequence starting from 0 with
195  * SDEBUG_NUM_UAS being 1 higher than the highest numbered UA. */
196 #define SDEBUG_UA_POR 0		/* Power on, reset, or bus device reset */
197 #define SDEBUG_UA_BUS_RESET 1
198 #define SDEBUG_UA_MODE_CHANGED 2
199 #define SDEBUG_UA_CAPACITY_CHANGED 3
200 #define SDEBUG_UA_LUNS_CHANGED 4
201 #define SDEBUG_UA_MICROCODE_CHANGED 5	/* simulate firmware change */
202 #define SDEBUG_UA_MICROCODE_CHANGED_WO_RESET 6
203 #define SDEBUG_NUM_UAS 7
204 
205 /* when 1==SDEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
206  * sector on read commands: */
207 #define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
208 #define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
209 
210 /* If REPORT LUNS has luns >= 256 it can choose "flat space" (value 1)
211  * or "peripheral device" addressing (value 0) */
212 #define SAM2_LUN_ADDRESS_METHOD 0
213 
214 /* SDEBUG_CANQUEUE is the maximum number of commands that can be queued
215  * (for response) per submit queue at one time. Can be reduced by max_queue
216  * option. Command responses are not queued when jdelay=0 and ndelay=0. The
217  * per-device DEF_CMD_PER_LUN can be changed via sysfs:
218  * /sys/class/scsi_device/<h:c:t:l>/device/queue_depth
219  * but cannot exceed SDEBUG_CANQUEUE .
220  */
221 #define SDEBUG_CANQUEUE_WORDS  3	/* a WORD is bits in a long */
222 #define SDEBUG_CANQUEUE  (SDEBUG_CANQUEUE_WORDS * BITS_PER_LONG)
223 #define DEF_CMD_PER_LUN  255
224 
225 #define F_D_IN			1
226 #define F_D_OUT			2
227 #define F_D_OUT_MAYBE		4	/* WRITE SAME, NDOB bit */
228 #define F_D_UNKN		8
229 #define F_RL_WLUN_OK		0x10
230 #define F_SKIP_UA		0x20
231 #define F_DELAY_OVERR		0x40
232 #define F_SA_LOW		0x80	/* cdb byte 1, bits 4 to 0 */
233 #define F_SA_HIGH		0x100	/* as used by variable length cdbs */
234 #define F_INV_OP		0x200
235 #define F_FAKE_RW		0x400
236 #define F_M_ACCESS		0x800	/* media access */
237 #define F_LONG_DELAY		0x1000
238 
239 #define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
240 #define FF_MEDIA_IO (F_M_ACCESS | F_FAKE_RW)
241 #define FF_SA (F_SA_HIGH | F_SA_LOW)
242 
243 #define SDEBUG_MAX_PARTS 4
244 
245 #define SDEBUG_MAX_CMD_LEN 32
246 
247 
248 struct sdebug_dev_info {
249 	struct list_head dev_list;
250 	unsigned int channel;
251 	unsigned int target;
252 	u64 lun;
253 	uuid_t lu_name;
254 	struct sdebug_host_info *sdbg_host;
255 	unsigned long uas_bm[1];
256 	atomic_t num_in_q;
257 	atomic_t stopped;
258 	bool used;
259 };
260 
261 struct sdebug_host_info {
262 	struct list_head host_list;
263 	struct Scsi_Host *shost;
264 	struct device dev;
265 	struct list_head dev_info_list;
266 };
267 
268 #define to_sdebug_host(d)	\
269 	container_of(d, struct sdebug_host_info, dev)
270 
271 enum sdeb_defer_type {SDEB_DEFER_NONE = 0, SDEB_DEFER_HRT = 1,
272 		      SDEB_DEFER_WQ = 2};
273 
274 struct sdebug_defer {
275 	struct hrtimer hrt;
276 	struct execute_work ew;
277 	int sqa_idx;	/* index of sdebug_queue array */
278 	int qc_idx;	/* index of sdebug_queued_cmd array within sqa_idx */
279 	int issuing_cpu;
280 	bool init_hrt;
281 	bool init_wq;
282 	enum sdeb_defer_type defer_t;
283 };
284 
285 struct sdebug_queued_cmd {
286 	/* corresponding bit set in in_use_bm[] in owning struct sdebug_queue
287 	 * instance indicates this slot is in use.
288 	 */
289 	struct sdebug_defer *sd_dp;
290 	struct scsi_cmnd *a_cmnd;
291 	unsigned int inj_recovered:1;
292 	unsigned int inj_transport:1;
293 	unsigned int inj_dif:1;
294 	unsigned int inj_dix:1;
295 	unsigned int inj_short:1;
296 	unsigned int inj_host_busy:1;
297 };
298 
299 struct sdebug_queue {
300 	struct sdebug_queued_cmd qc_arr[SDEBUG_CANQUEUE];
301 	unsigned long in_use_bm[SDEBUG_CANQUEUE_WORDS];
302 	spinlock_t qc_lock;
303 	atomic_t blocked;	/* to temporarily stop more being queued */
304 };
305 
306 static atomic_t sdebug_cmnd_count;   /* number of incoming commands */
307 static atomic_t sdebug_completions;  /* count of deferred completions */
308 static atomic_t sdebug_miss_cpus;    /* submission + completion cpus differ */
309 static atomic_t sdebug_a_tsf;	     /* 'almost task set full' counter */
310 
311 struct opcode_info_t {
312 	u8 num_attached;	/* 0 if this is it (i.e. a leaf); use 0xff */
313 				/* for terminating element */
314 	u8 opcode;		/* if num_attached > 0, preferred */
315 	u16 sa;			/* service action */
316 	u32 flags;		/* OR-ed set of SDEB_F_* */
317 	int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
318 	const struct opcode_info_t *arrp;  /* num_attached elements or NULL */
319 	u8 len_mask[16];	/* len_mask[0]-->cdb_len, then mask for cdb */
320 				/* 1 to min(cdb_len, 15); ignore cdb[15...] */
321 };
322 
323 /* SCSI opcodes (first byte of cdb) of interest mapped onto these indexes */
324 enum sdeb_opcode_index {
325 	SDEB_I_INVALID_OPCODE =	0,
326 	SDEB_I_INQUIRY = 1,
327 	SDEB_I_REPORT_LUNS = 2,
328 	SDEB_I_REQUEST_SENSE = 3,
329 	SDEB_I_TEST_UNIT_READY = 4,
330 	SDEB_I_MODE_SENSE = 5,		/* 6, 10 */
331 	SDEB_I_MODE_SELECT = 6,		/* 6, 10 */
332 	SDEB_I_LOG_SENSE = 7,
333 	SDEB_I_READ_CAPACITY = 8,	/* 10; 16 is in SA_IN(16) */
334 	SDEB_I_READ = 9,		/* 6, 10, 12, 16 */
335 	SDEB_I_WRITE = 10,		/* 6, 10, 12, 16 */
336 	SDEB_I_START_STOP = 11,
337 	SDEB_I_SERV_ACT_IN_16 = 12,	/* add ...SERV_ACT_IN_12 if needed */
338 	SDEB_I_SERV_ACT_OUT_16 = 13,	/* add ...SERV_ACT_OUT_12 if needed */
339 	SDEB_I_MAINT_IN = 14,
340 	SDEB_I_MAINT_OUT = 15,
341 	SDEB_I_VERIFY = 16,		/* 10 only */
342 	SDEB_I_VARIABLE_LEN = 17,	/* READ(32), WRITE(32), WR_SCAT(32) */
343 	SDEB_I_RESERVE = 18,		/* 6, 10 */
344 	SDEB_I_RELEASE = 19,		/* 6, 10 */
345 	SDEB_I_ALLOW_REMOVAL = 20,	/* PREVENT ALLOW MEDIUM REMOVAL */
346 	SDEB_I_REZERO_UNIT = 21,	/* REWIND in SSC */
347 	SDEB_I_ATA_PT = 22,		/* 12, 16 */
348 	SDEB_I_SEND_DIAG = 23,
349 	SDEB_I_UNMAP = 24,
350 	SDEB_I_XDWRITEREAD = 25,	/* 10 only */
351 	SDEB_I_WRITE_BUFFER = 26,
352 	SDEB_I_WRITE_SAME = 27,		/* 10, 16 */
353 	SDEB_I_SYNC_CACHE = 28,		/* 10, 16 */
354 	SDEB_I_COMP_WRITE = 29,
355 	SDEB_I_LAST_ELEMENT = 30,	/* keep this last (previous + 1) */
356 };
357 
358 
359 static const unsigned char opcode_ind_arr[256] = {
360 /* 0x0; 0x0->0x1f: 6 byte cdbs */
361 	SDEB_I_TEST_UNIT_READY, SDEB_I_REZERO_UNIT, 0, SDEB_I_REQUEST_SENSE,
362 	    0, 0, 0, 0,
363 	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, 0,
364 	0, 0, SDEB_I_INQUIRY, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
365 	    SDEB_I_RELEASE,
366 	0, 0, SDEB_I_MODE_SENSE, SDEB_I_START_STOP, 0, SDEB_I_SEND_DIAG,
367 	    SDEB_I_ALLOW_REMOVAL, 0,
368 /* 0x20; 0x20->0x3f: 10 byte cdbs */
369 	0, 0, 0, 0, 0, SDEB_I_READ_CAPACITY, 0, 0,
370 	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, SDEB_I_VERIFY,
371 	0, 0, 0, 0, 0, SDEB_I_SYNC_CACHE, 0, 0,
372 	0, 0, 0, SDEB_I_WRITE_BUFFER, 0, 0, 0, 0,
373 /* 0x40; 0x40->0x5f: 10 byte cdbs */
374 	0, SDEB_I_WRITE_SAME, SDEB_I_UNMAP, 0, 0, 0, 0, 0,
375 	0, 0, 0, 0, 0, SDEB_I_LOG_SENSE, 0, 0,
376 	0, 0, 0, SDEB_I_XDWRITEREAD, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
377 	    SDEB_I_RELEASE,
378 	0, 0, SDEB_I_MODE_SENSE, 0, 0, 0, 0, 0,
379 /* 0x60; 0x60->0x7d are reserved, 0x7e is "extended cdb" */
380 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
381 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
382 	0, SDEB_I_VARIABLE_LEN,
383 /* 0x80; 0x80->0x9f: 16 byte cdbs */
384 	0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
385 	SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0, 0, 0, 0, 0,
386 	0, SDEB_I_SYNC_CACHE, 0, SDEB_I_WRITE_SAME, 0, 0, 0, 0,
387 	0, 0, 0, 0, 0, 0, SDEB_I_SERV_ACT_IN_16, SDEB_I_SERV_ACT_OUT_16,
388 /* 0xa0; 0xa0->0xbf: 12 byte cdbs */
389 	SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
390 	     SDEB_I_MAINT_OUT, 0, 0, 0,
391 	SDEB_I_READ, 0 /* SDEB_I_SERV_ACT_OUT_12 */, SDEB_I_WRITE,
392 	     0 /* SDEB_I_SERV_ACT_IN_12 */, 0, 0, 0, 0,
393 	0, 0, 0, 0, 0, 0, 0, 0,
394 	0, 0, 0, 0, 0, 0, 0, 0,
395 /* 0xc0; 0xc0->0xff: vendor specific */
396 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
397 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
398 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
399 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
400 };
401 
402 /*
403  * The following "response" functions return the SCSI mid-level's 4 byte
404  * tuple-in-an-int. To handle commands with an IMMED bit, for a faster
405  * command completion, they can mask their return value with
406  * SDEG_RES_IMMED_MASK .
407  */
408 #define SDEG_RES_IMMED_MASK 0x40000000
409 
410 static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
411 static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
412 static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
413 static int resp_mode_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
414 static int resp_mode_select(struct scsi_cmnd *, struct sdebug_dev_info *);
415 static int resp_log_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
416 static int resp_readcap(struct scsi_cmnd *, struct sdebug_dev_info *);
417 static int resp_read_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
418 static int resp_write_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
419 static int resp_write_scat(struct scsi_cmnd *, struct sdebug_dev_info *);
420 static int resp_start_stop(struct scsi_cmnd *, struct sdebug_dev_info *);
421 static int resp_readcap16(struct scsi_cmnd *, struct sdebug_dev_info *);
422 static int resp_get_lba_status(struct scsi_cmnd *, struct sdebug_dev_info *);
423 static int resp_report_tgtpgs(struct scsi_cmnd *, struct sdebug_dev_info *);
424 static int resp_unmap(struct scsi_cmnd *, struct sdebug_dev_info *);
425 static int resp_rsup_opcodes(struct scsi_cmnd *, struct sdebug_dev_info *);
426 static int resp_rsup_tmfs(struct scsi_cmnd *, struct sdebug_dev_info *);
427 static int resp_write_same_10(struct scsi_cmnd *, struct sdebug_dev_info *);
428 static int resp_write_same_16(struct scsi_cmnd *, struct sdebug_dev_info *);
429 static int resp_xdwriteread_10(struct scsi_cmnd *, struct sdebug_dev_info *);
430 static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
431 static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
432 static int resp_sync_cache(struct scsi_cmnd *, struct sdebug_dev_info *);
433 
434 /*
435  * The following are overflow arrays for cdbs that "hit" the same index in
436  * the opcode_info_arr array. The most time sensitive (or commonly used) cdb
437  * should be placed in opcode_info_arr[], the others should be placed here.
438  */
439 static const struct opcode_info_t msense_iarr[] = {
440 	{0, 0x1a, 0, F_D_IN, NULL, NULL,
441 	    {6,  0xe8, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
442 };
443 
444 static const struct opcode_info_t mselect_iarr[] = {
445 	{0, 0x15, 0, F_D_OUT, NULL, NULL,
446 	    {6,  0xf1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
447 };
448 
449 static const struct opcode_info_t read_iarr[] = {
450 	{0, 0x28, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(10) */
451 	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
452 	     0, 0, 0, 0} },
453 	{0, 0x8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL, /* READ(6) */
454 	    {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
455 	{0, 0xa8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(12) */
456 	    {12,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
457 	     0xc7, 0, 0, 0, 0} },
458 };
459 
460 static const struct opcode_info_t write_iarr[] = {
461 	{0, 0x2a, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(10) */
462 	    NULL, {10,  0xfb, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7,
463 		   0, 0, 0, 0, 0, 0} },
464 	{0, 0xa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,   /* WRITE(6) */
465 	    NULL, {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0,
466 		   0, 0, 0} },
467 	{0, 0xaa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(12) */
468 	    NULL, {12,  0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
469 		   0xbf, 0xc7, 0, 0, 0, 0} },
470 };
471 
472 static const struct opcode_info_t sa_in_16_iarr[] = {
473 	{0, 0x9e, 0x12, F_SA_LOW | F_D_IN, resp_get_lba_status, NULL,
474 	    {16,  0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
475 	     0xff, 0xff, 0xff, 0, 0xc7} },	/* GET LBA STATUS(16) */
476 };
477 
478 static const struct opcode_info_t vl_iarr[] = {	/* VARIABLE LENGTH */
479 	{0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_dt0,
480 	    NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0xb, 0xfa,
481 		   0, 0xff, 0xff, 0xff, 0xff} },	/* WRITE(32) */
482 	{0, 0x7f, 0x11, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
483 	    NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x11, 0xf8,
484 		   0, 0xff, 0xff, 0x0, 0x0} },	/* WRITE SCATTERED(32) */
485 };
486 
487 static const struct opcode_info_t maint_in_iarr[] = {	/* MAINT IN */
488 	{0, 0xa3, 0xc, F_SA_LOW | F_D_IN, resp_rsup_opcodes, NULL,
489 	    {12,  0xc, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
490 	     0xc7, 0, 0, 0, 0} }, /* REPORT SUPPORTED OPERATION CODES */
491 	{0, 0xa3, 0xd, F_SA_LOW | F_D_IN, resp_rsup_tmfs, NULL,
492 	    {12,  0xd, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
493 	     0, 0} },	/* REPORTED SUPPORTED TASK MANAGEMENT FUNCTIONS */
494 };
495 
496 static const struct opcode_info_t write_same_iarr[] = {
497 	{0, 0x93, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, resp_write_same_16, NULL,
498 	    {16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
499 	     0xff, 0xff, 0xff, 0x3f, 0xc7} },		/* WRITE SAME(16) */
500 };
501 
502 static const struct opcode_info_t reserve_iarr[] = {
503 	{0, 0x16, 0, F_D_OUT, NULL, NULL,		/* RESERVE(6) */
504 	    {6,  0x1f, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
505 };
506 
507 static const struct opcode_info_t release_iarr[] = {
508 	{0, 0x17, 0, F_D_OUT, NULL, NULL,		/* RELEASE(6) */
509 	    {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
510 };
511 
512 static const struct opcode_info_t sync_cache_iarr[] = {
513 	{0, 0x91, 0, F_LONG_DELAY | F_M_ACCESS, resp_sync_cache, NULL,
514 	    {16,  0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
515 	     0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },	/* SYNC_CACHE (16) */
516 };
517 
518 
519 /* This array is accessed via SDEB_I_* values. Make sure all are mapped,
520  * plus the terminating elements for logic that scans this table such as
521  * REPORT SUPPORTED OPERATION CODES. */
522 static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEMENT + 1] = {
523 /* 0 */
524 	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL,	/* unknown opcodes */
525 	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
526 	{0, 0x12, 0, FF_RESPOND | F_D_IN, resp_inquiry, NULL, /* INQUIRY */
527 	    {6,  0xe3, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
528 	{0, 0xa0, 0, FF_RESPOND | F_D_IN, resp_report_luns, NULL,
529 	    {12,  0xe3, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
530 	     0, 0} },					/* REPORT LUNS */
531 	{0, 0x3, 0, FF_RESPOND | F_D_IN, resp_requests, NULL,
532 	    {6,  0xe1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
533 	{0, 0x0, 0, F_M_ACCESS | F_RL_WLUN_OK, NULL, NULL,/* TEST UNIT READY */
534 	    {6,  0, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
535 /* 5 */
536 	{ARRAY_SIZE(msense_iarr), 0x5a, 0, F_D_IN,	/* MODE SENSE(10) */
537 	    resp_mode_sense, msense_iarr, {10,  0xf8, 0xff, 0xff, 0, 0, 0,
538 		0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
539 	{ARRAY_SIZE(mselect_iarr), 0x55, 0, F_D_OUT,	/* MODE SELECT(10) */
540 	    resp_mode_select, mselect_iarr, {10,  0xf1, 0, 0, 0, 0, 0, 0xff,
541 		0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
542 	{0, 0x4d, 0, F_D_IN, resp_log_sense, NULL,	/* LOG SENSE */
543 	    {10,  0xe3, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0,
544 	     0, 0, 0} },
545 	{0, 0x25, 0, F_D_IN, resp_readcap, NULL,    /* READ CAPACITY(10) */
546 	    {10,  0xe1, 0xff, 0xff, 0xff, 0xff, 0, 0, 0x1, 0xc7, 0, 0, 0, 0,
547 	     0, 0} },
548 	{ARRAY_SIZE(read_iarr), 0x88, 0, F_D_IN | FF_MEDIA_IO, /* READ(16) */
549 	    resp_read_dt0, read_iarr, {16,  0xfe, 0xff, 0xff, 0xff, 0xff,
550 	    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
551 /* 10 */
552 	{ARRAY_SIZE(write_iarr), 0x8a, 0, F_D_OUT | FF_MEDIA_IO,
553 	    resp_write_dt0, write_iarr,			/* WRITE(16) */
554 		{16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
555 		 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
556 	{0, 0x1b, 0, F_LONG_DELAY, resp_start_stop, NULL,/* START STOP UNIT */
557 	    {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
558 	{ARRAY_SIZE(sa_in_16_iarr), 0x9e, 0x10, F_SA_LOW | F_D_IN,
559 	    resp_readcap16, sa_in_16_iarr, /* SA_IN(16), READ CAPACITY(16) */
560 		{16,  0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
561 		 0xff, 0xff, 0xff, 0xff, 0x1, 0xc7} },
562 	{0, 0x9f, 0x12, F_SA_LOW | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
563 	    NULL, {16,  0x12, 0xf9, 0x0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff,
564 	    0xff, 0xff, 0xff, 0xff, 0xc7} },  /* SA_OUT(16), WRITE SCAT(16) */
565 	{ARRAY_SIZE(maint_in_iarr), 0xa3, 0xa, F_SA_LOW | F_D_IN,
566 	    resp_report_tgtpgs,	/* MAINT IN, REPORT TARGET PORT GROUPS */
567 		maint_in_iarr, {12,  0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff,
568 				0xff, 0, 0xc7, 0, 0, 0, 0} },
569 /* 15 */
570 	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* MAINT OUT */
571 	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
572 	{0, 0x2f, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, NULL, NULL, /* VERIFY(10) */
573 	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7,
574 	     0, 0, 0, 0, 0, 0} },
575 	{ARRAY_SIZE(vl_iarr), 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_MEDIA_IO,
576 	    resp_read_dt0, vl_iarr,	/* VARIABLE LENGTH, READ(32) */
577 	    {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x9, 0xfe, 0, 0xff, 0xff,
578 	     0xff, 0xff} },
579 	{ARRAY_SIZE(reserve_iarr), 0x56, 0, F_D_OUT,
580 	    NULL, reserve_iarr,	/* RESERVE(10) <no response function> */
581 	    {10,  0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
582 	     0} },
583 	{ARRAY_SIZE(release_iarr), 0x57, 0, F_D_OUT,
584 	    NULL, release_iarr, /* RELEASE(10) <no response function> */
585 	    {10,  0x13, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
586 	     0} },
587 /* 20 */
588 	{0, 0x1e, 0, 0, NULL, NULL, /* ALLOW REMOVAL */
589 	    {6,  0, 0, 0, 0x3, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
590 	{0, 0x1, 0, 0, resp_start_stop, NULL, /* REWIND ?? */
591 	    {6,  0x1, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
592 	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ATA_PT */
593 	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
594 	{0, 0x1d, F_D_OUT, 0, NULL, NULL,	/* SEND DIAGNOSTIC */
595 	    {6,  0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
596 	{0, 0x42, 0, F_D_OUT | FF_MEDIA_IO, resp_unmap, NULL, /* UNMAP */
597 	    {10,  0x1, 0, 0, 0, 0, 0x3f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
598 /* 25 */
599 	{0, 0x53, 0, F_D_IN | F_D_OUT | FF_MEDIA_IO, resp_xdwriteread_10,
600 	    NULL, {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7,
601 		   0, 0, 0, 0, 0, 0} },		/* XDWRITEREAD(10) */
602 	{0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
603 	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
604 	     0, 0, 0, 0} },			/* WRITE_BUFFER */
605 	{ARRAY_SIZE(write_same_iarr), 0x41, 0, F_D_OUT_MAYBE | FF_MEDIA_IO,
606 	    resp_write_same_10, write_same_iarr,	/* WRITE SAME(10) */
607 		{10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0,
608 		 0, 0, 0, 0, 0} },
609 	{ARRAY_SIZE(sync_cache_iarr), 0x35, 0, F_LONG_DELAY | F_M_ACCESS,
610 	    resp_sync_cache, sync_cache_iarr,
611 	    {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
612 	     0, 0, 0, 0} },			/* SYNC_CACHE (10) */
613 	{0, 0x89, 0, F_D_OUT | FF_MEDIA_IO, resp_comp_write, NULL,
614 	    {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
615 	     0, 0xff, 0x3f, 0xc7} },		/* COMPARE AND WRITE */
616 
617 /* 30 */
618 	{0xff, 0, 0, 0, NULL, NULL,		/* terminating element */
619 	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
620 };
621 
622 static int sdebug_add_host = DEF_NUM_HOST;
623 static int sdebug_ato = DEF_ATO;
624 static int sdebug_cdb_len = DEF_CDB_LEN;
625 static int sdebug_jdelay = DEF_JDELAY;	/* if > 0 then unit is jiffies */
626 static int sdebug_dev_size_mb = DEF_DEV_SIZE_MB;
627 static int sdebug_dif = DEF_DIF;
628 static int sdebug_dix = DEF_DIX;
629 static int sdebug_dsense = DEF_D_SENSE;
630 static int sdebug_every_nth = DEF_EVERY_NTH;
631 static int sdebug_fake_rw = DEF_FAKE_RW;
632 static unsigned int sdebug_guard = DEF_GUARD;
633 static int sdebug_lowest_aligned = DEF_LOWEST_ALIGNED;
634 static int sdebug_max_luns = DEF_MAX_LUNS;
635 static int sdebug_max_queue = SDEBUG_CANQUEUE;	/* per submit queue */
636 static unsigned int sdebug_medium_error_start = OPT_MEDIUM_ERR_ADDR;
637 static int sdebug_medium_error_count = OPT_MEDIUM_ERR_NUM;
638 static atomic_t retired_max_queue;	/* if > 0 then was prior max_queue */
639 static int sdebug_ndelay = DEF_NDELAY;	/* if > 0 then unit is nanoseconds */
640 static int sdebug_no_lun_0 = DEF_NO_LUN_0;
641 static int sdebug_no_uld;
642 static int sdebug_num_parts = DEF_NUM_PARTS;
643 static int sdebug_num_tgts = DEF_NUM_TGTS; /* targets per host */
644 static int sdebug_opt_blks = DEF_OPT_BLKS;
645 static int sdebug_opts = DEF_OPTS;
646 static int sdebug_physblk_exp = DEF_PHYSBLK_EXP;
647 static int sdebug_opt_xferlen_exp = DEF_OPT_XFERLEN_EXP;
648 static int sdebug_ptype = DEF_PTYPE; /* SCSI peripheral device type */
649 static int sdebug_scsi_level = DEF_SCSI_LEVEL;
650 static int sdebug_sector_size = DEF_SECTOR_SIZE;
651 static int sdebug_virtual_gb = DEF_VIRTUAL_GB;
652 static int sdebug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
653 static unsigned int sdebug_lbpu = DEF_LBPU;
654 static unsigned int sdebug_lbpws = DEF_LBPWS;
655 static unsigned int sdebug_lbpws10 = DEF_LBPWS10;
656 static unsigned int sdebug_lbprz = DEF_LBPRZ;
657 static unsigned int sdebug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
658 static unsigned int sdebug_unmap_granularity = DEF_UNMAP_GRANULARITY;
659 static unsigned int sdebug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
660 static unsigned int sdebug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
661 static unsigned int sdebug_write_same_length = DEF_WRITESAME_LENGTH;
662 static int sdebug_uuid_ctl = DEF_UUID_CTL;
663 static bool sdebug_removable = DEF_REMOVABLE;
664 static bool sdebug_clustering;
665 static bool sdebug_host_lock = DEF_HOST_LOCK;
666 static bool sdebug_strict = DEF_STRICT;
667 static bool sdebug_any_injecting_opt;
668 static bool sdebug_verbose;
669 static bool have_dif_prot;
670 static bool sdebug_statistics = DEF_STATISTICS;
671 
672 static unsigned int sdebug_store_sectors;
673 static sector_t sdebug_capacity;	/* in sectors */
674 
675 /* old BIOS stuff, kernel may get rid of them but some mode sense pages
676    may still need them */
677 static int sdebug_heads;		/* heads per disk */
678 static int sdebug_cylinders_per;	/* cylinders per surface */
679 static int sdebug_sectors_per;		/* sectors per cylinder */
680 
681 static LIST_HEAD(sdebug_host_list);
682 static DEFINE_SPINLOCK(sdebug_host_list_lock);
683 
684 static unsigned char *fake_storep;	/* ramdisk storage */
685 static struct t10_pi_tuple *dif_storep;	/* protection info */
686 static void *map_storep;		/* provisioning map */
687 
688 static unsigned long map_size;
689 static int num_aborts;
690 static int num_dev_resets;
691 static int num_target_resets;
692 static int num_bus_resets;
693 static int num_host_resets;
694 static int dix_writes;
695 static int dix_reads;
696 static int dif_errors;
697 
698 static int submit_queues = DEF_SUBMIT_QUEUES;  /* > 1 for multi-queue (mq) */
699 static struct sdebug_queue *sdebug_q_arr;  /* ptr to array of submit queues */
700 
701 static DEFINE_RWLOCK(atomic_rw);
702 
703 static char sdebug_proc_name[] = MY_NAME;
704 static const char *my_name = MY_NAME;
705 
706 static struct bus_type pseudo_lld_bus;
707 
708 static struct device_driver sdebug_driverfs_driver = {
709 	.name 		= sdebug_proc_name,
710 	.bus		= &pseudo_lld_bus,
711 };
712 
713 static const int check_condition_result =
714 		(DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
715 
716 static const int illegal_condition_result =
717 	(DRIVER_SENSE << 24) | (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
718 
719 static const int device_qfull_result =
720 	(DID_OK << 16) | (COMMAND_COMPLETE << 8) | SAM_STAT_TASK_SET_FULL;
721 
722 
723 /* Only do the extra work involved in logical block provisioning if one or
724  * more of the lbpu, lbpws or lbpws10 parameters are given and we are doing
725  * real reads and writes (i.e. not skipping them for speed).
726  */
727 static inline bool scsi_debug_lbp(void)
728 {
729 	return 0 == sdebug_fake_rw &&
730 		(sdebug_lbpu || sdebug_lbpws || sdebug_lbpws10);
731 }
732 
733 static void *fake_store(unsigned long long lba)
734 {
735 	lba = do_div(lba, sdebug_store_sectors);
736 
737 	return fake_storep + lba * sdebug_sector_size;
738 }
739 
740 static struct t10_pi_tuple *dif_store(sector_t sector)
741 {
742 	sector = sector_div(sector, sdebug_store_sectors);
743 
744 	return dif_storep + sector;
745 }
746 
747 static void sdebug_max_tgts_luns(void)
748 {
749 	struct sdebug_host_info *sdbg_host;
750 	struct Scsi_Host *hpnt;
751 
752 	spin_lock(&sdebug_host_list_lock);
753 	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
754 		hpnt = sdbg_host->shost;
755 		if ((hpnt->this_id >= 0) &&
756 		    (sdebug_num_tgts > hpnt->this_id))
757 			hpnt->max_id = sdebug_num_tgts + 1;
758 		else
759 			hpnt->max_id = sdebug_num_tgts;
760 		/* sdebug_max_luns; */
761 		hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
762 	}
763 	spin_unlock(&sdebug_host_list_lock);
764 }
765 
766 enum sdeb_cmd_data {SDEB_IN_DATA = 0, SDEB_IN_CDB = 1};
767 
768 /* Set in_bit to -1 to indicate no bit position of invalid field */
769 static void mk_sense_invalid_fld(struct scsi_cmnd *scp,
770 				 enum sdeb_cmd_data c_d,
771 				 int in_byte, int in_bit)
772 {
773 	unsigned char *sbuff;
774 	u8 sks[4];
775 	int sl, asc;
776 
777 	sbuff = scp->sense_buffer;
778 	if (!sbuff) {
779 		sdev_printk(KERN_ERR, scp->device,
780 			    "%s: sense_buffer is NULL\n", __func__);
781 		return;
782 	}
783 	asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
784 	memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
785 	scsi_build_sense_buffer(sdebug_dsense, sbuff, ILLEGAL_REQUEST, asc, 0);
786 	memset(sks, 0, sizeof(sks));
787 	sks[0] = 0x80;
788 	if (c_d)
789 		sks[0] |= 0x40;
790 	if (in_bit >= 0) {
791 		sks[0] |= 0x8;
792 		sks[0] |= 0x7 & in_bit;
793 	}
794 	put_unaligned_be16(in_byte, sks + 1);
795 	if (sdebug_dsense) {
796 		sl = sbuff[7] + 8;
797 		sbuff[7] = sl;
798 		sbuff[sl] = 0x2;
799 		sbuff[sl + 1] = 0x6;
800 		memcpy(sbuff + sl + 4, sks, 3);
801 	} else
802 		memcpy(sbuff + 15, sks, 3);
803 	if (sdebug_verbose)
804 		sdev_printk(KERN_INFO, scp->device, "%s:  [sense_key,asc,ascq"
805 			    "]: [0x5,0x%x,0x0] %c byte=%d, bit=%d\n",
806 			    my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
807 }
808 
809 static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
810 {
811 	unsigned char *sbuff;
812 
813 	sbuff = scp->sense_buffer;
814 	if (!sbuff) {
815 		sdev_printk(KERN_ERR, scp->device,
816 			    "%s: sense_buffer is NULL\n", __func__);
817 		return;
818 	}
819 	memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
820 
821 	scsi_build_sense_buffer(sdebug_dsense, sbuff, key, asc, asq);
822 
823 	if (sdebug_verbose)
824 		sdev_printk(KERN_INFO, scp->device,
825 			    "%s:  [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
826 			    my_name, key, asc, asq);
827 }
828 
829 static void mk_sense_invalid_opcode(struct scsi_cmnd *scp)
830 {
831 	mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
832 }
833 
834 static int scsi_debug_ioctl(struct scsi_device *dev, int cmd, void __user *arg)
835 {
836 	if (sdebug_verbose) {
837 		if (0x1261 == cmd)
838 			sdev_printk(KERN_INFO, dev,
839 				    "%s: BLKFLSBUF [0x1261]\n", __func__);
840 		else if (0x5331 == cmd)
841 			sdev_printk(KERN_INFO, dev,
842 				    "%s: CDROM_GET_CAPABILITY [0x5331]\n",
843 				    __func__);
844 		else
845 			sdev_printk(KERN_INFO, dev, "%s: cmd=0x%x\n",
846 				    __func__, cmd);
847 	}
848 	return -EINVAL;
849 	/* return -ENOTTY; // correct return but upsets fdisk */
850 }
851 
852 static void config_cdb_len(struct scsi_device *sdev)
853 {
854 	switch (sdebug_cdb_len) {
855 	case 6:	/* suggest 6 byte READ, WRITE and MODE SENSE/SELECT */
856 		sdev->use_10_for_rw = false;
857 		sdev->use_16_for_rw = false;
858 		sdev->use_10_for_ms = false;
859 		break;
860 	case 10: /* suggest 10 byte RWs and 6 byte MODE SENSE/SELECT */
861 		sdev->use_10_for_rw = true;
862 		sdev->use_16_for_rw = false;
863 		sdev->use_10_for_ms = false;
864 		break;
865 	case 12: /* suggest 10 byte RWs and 10 byte MODE SENSE/SELECT */
866 		sdev->use_10_for_rw = true;
867 		sdev->use_16_for_rw = false;
868 		sdev->use_10_for_ms = true;
869 		break;
870 	case 16:
871 		sdev->use_10_for_rw = false;
872 		sdev->use_16_for_rw = true;
873 		sdev->use_10_for_ms = true;
874 		break;
875 	case 32: /* No knobs to suggest this so same as 16 for now */
876 		sdev->use_10_for_rw = false;
877 		sdev->use_16_for_rw = true;
878 		sdev->use_10_for_ms = true;
879 		break;
880 	default:
881 		pr_warn("unexpected cdb_len=%d, force to 10\n",
882 			sdebug_cdb_len);
883 		sdev->use_10_for_rw = true;
884 		sdev->use_16_for_rw = false;
885 		sdev->use_10_for_ms = false;
886 		sdebug_cdb_len = 10;
887 		break;
888 	}
889 }
890 
891 static void all_config_cdb_len(void)
892 {
893 	struct sdebug_host_info *sdbg_host;
894 	struct Scsi_Host *shost;
895 	struct scsi_device *sdev;
896 
897 	spin_lock(&sdebug_host_list_lock);
898 	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
899 		shost = sdbg_host->shost;
900 		shost_for_each_device(sdev, shost) {
901 			config_cdb_len(sdev);
902 		}
903 	}
904 	spin_unlock(&sdebug_host_list_lock);
905 }
906 
907 static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
908 {
909 	struct sdebug_host_info *sdhp;
910 	struct sdebug_dev_info *dp;
911 
912 	spin_lock(&sdebug_host_list_lock);
913 	list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
914 		list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
915 			if ((devip->sdbg_host == dp->sdbg_host) &&
916 			    (devip->target == dp->target))
917 				clear_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
918 		}
919 	}
920 	spin_unlock(&sdebug_host_list_lock);
921 }
922 
923 static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
924 {
925 	int k;
926 
927 	k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
928 	if (k != SDEBUG_NUM_UAS) {
929 		const char *cp = NULL;
930 
931 		switch (k) {
932 		case SDEBUG_UA_POR:
933 			mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
934 					POWER_ON_RESET_ASCQ);
935 			if (sdebug_verbose)
936 				cp = "power on reset";
937 			break;
938 		case SDEBUG_UA_BUS_RESET:
939 			mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
940 					BUS_RESET_ASCQ);
941 			if (sdebug_verbose)
942 				cp = "bus reset";
943 			break;
944 		case SDEBUG_UA_MODE_CHANGED:
945 			mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
946 					MODE_CHANGED_ASCQ);
947 			if (sdebug_verbose)
948 				cp = "mode parameters changed";
949 			break;
950 		case SDEBUG_UA_CAPACITY_CHANGED:
951 			mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
952 					CAPACITY_CHANGED_ASCQ);
953 			if (sdebug_verbose)
954 				cp = "capacity data changed";
955 			break;
956 		case SDEBUG_UA_MICROCODE_CHANGED:
957 			mk_sense_buffer(scp, UNIT_ATTENTION,
958 					TARGET_CHANGED_ASC,
959 					MICROCODE_CHANGED_ASCQ);
960 			if (sdebug_verbose)
961 				cp = "microcode has been changed";
962 			break;
963 		case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
964 			mk_sense_buffer(scp, UNIT_ATTENTION,
965 					TARGET_CHANGED_ASC,
966 					MICROCODE_CHANGED_WO_RESET_ASCQ);
967 			if (sdebug_verbose)
968 				cp = "microcode has been changed without reset";
969 			break;
970 		case SDEBUG_UA_LUNS_CHANGED:
971 			/*
972 			 * SPC-3 behavior is to report a UNIT ATTENTION with
973 			 * ASC/ASCQ REPORTED LUNS DATA HAS CHANGED on every LUN
974 			 * on the target, until a REPORT LUNS command is
975 			 * received.  SPC-4 behavior is to report it only once.
976 			 * NOTE:  sdebug_scsi_level does not use the same
977 			 * values as struct scsi_device->scsi_level.
978 			 */
979 			if (sdebug_scsi_level >= 6)	/* SPC-4 and above */
980 				clear_luns_changed_on_target(devip);
981 			mk_sense_buffer(scp, UNIT_ATTENTION,
982 					TARGET_CHANGED_ASC,
983 					LUNS_CHANGED_ASCQ);
984 			if (sdebug_verbose)
985 				cp = "reported luns data has changed";
986 			break;
987 		default:
988 			pr_warn("unexpected unit attention code=%d\n", k);
989 			if (sdebug_verbose)
990 				cp = "unknown";
991 			break;
992 		}
993 		clear_bit(k, devip->uas_bm);
994 		if (sdebug_verbose)
995 			sdev_printk(KERN_INFO, scp->device,
996 				   "%s reports: Unit attention: %s\n",
997 				   my_name, cp);
998 		return check_condition_result;
999 	}
1000 	return 0;
1001 }
1002 
1003 /* Build SCSI "data-in" buffer. Returns 0 if ok else (DID_ERROR << 16). */
1004 static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1005 				int arr_len)
1006 {
1007 	int act_len;
1008 	struct scsi_data_buffer *sdb = scsi_in(scp);
1009 
1010 	if (!sdb->length)
1011 		return 0;
1012 	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_FROM_DEVICE))
1013 		return DID_ERROR << 16;
1014 
1015 	act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
1016 				      arr, arr_len);
1017 	sdb->resid = scsi_bufflen(scp) - act_len;
1018 
1019 	return 0;
1020 }
1021 
1022 /* Partial build of SCSI "data-in" buffer. Returns 0 if ok else
1023  * (DID_ERROR << 16). Can write to offset in data-in buffer. If multiple
1024  * calls, not required to write in ascending offset order. Assumes resid
1025  * set to scsi_bufflen() prior to any calls.
1026  */
1027 static int p_fill_from_dev_buffer(struct scsi_cmnd *scp, const void *arr,
1028 				  int arr_len, unsigned int off_dst)
1029 {
1030 	int act_len, n;
1031 	struct scsi_data_buffer *sdb = scsi_in(scp);
1032 	off_t skip = off_dst;
1033 
1034 	if (sdb->length <= off_dst)
1035 		return 0;
1036 	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_FROM_DEVICE))
1037 		return DID_ERROR << 16;
1038 
1039 	act_len = sg_pcopy_from_buffer(sdb->table.sgl, sdb->table.nents,
1040 				       arr, arr_len, skip);
1041 	pr_debug("%s: off_dst=%u, scsi_bufflen=%u, act_len=%u, resid=%d\n",
1042 		 __func__, off_dst, scsi_bufflen(scp), act_len, sdb->resid);
1043 	n = (int)scsi_bufflen(scp) - ((int)off_dst + act_len);
1044 	sdb->resid = min(sdb->resid, n);
1045 	return 0;
1046 }
1047 
1048 /* Fetches from SCSI "data-out" buffer. Returns number of bytes fetched into
1049  * 'arr' or -1 if error.
1050  */
1051 static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1052 			       int arr_len)
1053 {
1054 	if (!scsi_bufflen(scp))
1055 		return 0;
1056 	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_TO_DEVICE))
1057 		return -1;
1058 
1059 	return scsi_sg_copy_to_buffer(scp, arr, arr_len);
1060 }
1061 
1062 
1063 static char sdebug_inq_vendor_id[9] = "Linux   ";
1064 static char sdebug_inq_product_id[17] = "scsi_debug      ";
1065 static char sdebug_inq_product_rev[5] = SDEBUG_VERSION;
1066 /* Use some locally assigned NAAs for SAS addresses. */
1067 static const u64 naa3_comp_a = 0x3222222000000000ULL;
1068 static const u64 naa3_comp_b = 0x3333333000000000ULL;
1069 static const u64 naa3_comp_c = 0x3111111000000000ULL;
1070 
1071 /* Device identification VPD page. Returns number of bytes placed in arr */
1072 static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
1073 			  int target_dev_id, int dev_id_num,
1074 			  const char *dev_id_str, int dev_id_str_len,
1075 			  const uuid_t *lu_name)
1076 {
1077 	int num, port_a;
1078 	char b[32];
1079 
1080 	port_a = target_dev_id + 1;
1081 	/* T10 vendor identifier field format (faked) */
1082 	arr[0] = 0x2;	/* ASCII */
1083 	arr[1] = 0x1;
1084 	arr[2] = 0x0;
1085 	memcpy(&arr[4], sdebug_inq_vendor_id, 8);
1086 	memcpy(&arr[12], sdebug_inq_product_id, 16);
1087 	memcpy(&arr[28], dev_id_str, dev_id_str_len);
1088 	num = 8 + 16 + dev_id_str_len;
1089 	arr[3] = num;
1090 	num += 4;
1091 	if (dev_id_num >= 0) {
1092 		if (sdebug_uuid_ctl) {
1093 			/* Locally assigned UUID */
1094 			arr[num++] = 0x1;  /* binary (not necessarily sas) */
1095 			arr[num++] = 0xa;  /* PIV=0, lu, naa */
1096 			arr[num++] = 0x0;
1097 			arr[num++] = 0x12;
1098 			arr[num++] = 0x10; /* uuid type=1, locally assigned */
1099 			arr[num++] = 0x0;
1100 			memcpy(arr + num, lu_name, 16);
1101 			num += 16;
1102 		} else {
1103 			/* NAA-3, Logical unit identifier (binary) */
1104 			arr[num++] = 0x1;  /* binary (not necessarily sas) */
1105 			arr[num++] = 0x3;  /* PIV=0, lu, naa */
1106 			arr[num++] = 0x0;
1107 			arr[num++] = 0x8;
1108 			put_unaligned_be64(naa3_comp_b + dev_id_num, arr + num);
1109 			num += 8;
1110 		}
1111 		/* Target relative port number */
1112 		arr[num++] = 0x61;	/* proto=sas, binary */
1113 		arr[num++] = 0x94;	/* PIV=1, target port, rel port */
1114 		arr[num++] = 0x0;	/* reserved */
1115 		arr[num++] = 0x4;	/* length */
1116 		arr[num++] = 0x0;	/* reserved */
1117 		arr[num++] = 0x0;	/* reserved */
1118 		arr[num++] = 0x0;
1119 		arr[num++] = 0x1;	/* relative port A */
1120 	}
1121 	/* NAA-3, Target port identifier */
1122 	arr[num++] = 0x61;	/* proto=sas, binary */
1123 	arr[num++] = 0x93;	/* piv=1, target port, naa */
1124 	arr[num++] = 0x0;
1125 	arr[num++] = 0x8;
1126 	put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1127 	num += 8;
1128 	/* NAA-3, Target port group identifier */
1129 	arr[num++] = 0x61;	/* proto=sas, binary */
1130 	arr[num++] = 0x95;	/* piv=1, target port group id */
1131 	arr[num++] = 0x0;
1132 	arr[num++] = 0x4;
1133 	arr[num++] = 0;
1134 	arr[num++] = 0;
1135 	put_unaligned_be16(port_group_id, arr + num);
1136 	num += 2;
1137 	/* NAA-3, Target device identifier */
1138 	arr[num++] = 0x61;	/* proto=sas, binary */
1139 	arr[num++] = 0xa3;	/* piv=1, target device, naa */
1140 	arr[num++] = 0x0;
1141 	arr[num++] = 0x8;
1142 	put_unaligned_be64(naa3_comp_a + target_dev_id, arr + num);
1143 	num += 8;
1144 	/* SCSI name string: Target device identifier */
1145 	arr[num++] = 0x63;	/* proto=sas, UTF-8 */
1146 	arr[num++] = 0xa8;	/* piv=1, target device, SCSI name string */
1147 	arr[num++] = 0x0;
1148 	arr[num++] = 24;
1149 	memcpy(arr + num, "naa.32222220", 12);
1150 	num += 12;
1151 	snprintf(b, sizeof(b), "%08X", target_dev_id);
1152 	memcpy(arr + num, b, 8);
1153 	num += 8;
1154 	memset(arr + num, 0, 4);
1155 	num += 4;
1156 	return num;
1157 }
1158 
1159 static unsigned char vpd84_data[] = {
1160 /* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
1161     0x22,0x22,0x22,0x0,0xbb,0x1,
1162     0x22,0x22,0x22,0x0,0xbb,0x2,
1163 };
1164 
1165 /*  Software interface identification VPD page */
1166 static int inquiry_vpd_84(unsigned char *arr)
1167 {
1168 	memcpy(arr, vpd84_data, sizeof(vpd84_data));
1169 	return sizeof(vpd84_data);
1170 }
1171 
1172 /* Management network addresses VPD page */
1173 static int inquiry_vpd_85(unsigned char *arr)
1174 {
1175 	int num = 0;
1176 	const char *na1 = "https://www.kernel.org/config";
1177 	const char *na2 = "http://www.kernel.org/log";
1178 	int plen, olen;
1179 
1180 	arr[num++] = 0x1;	/* lu, storage config */
1181 	arr[num++] = 0x0;	/* reserved */
1182 	arr[num++] = 0x0;
1183 	olen = strlen(na1);
1184 	plen = olen + 1;
1185 	if (plen % 4)
1186 		plen = ((plen / 4) + 1) * 4;
1187 	arr[num++] = plen;	/* length, null termianted, padded */
1188 	memcpy(arr + num, na1, olen);
1189 	memset(arr + num + olen, 0, plen - olen);
1190 	num += plen;
1191 
1192 	arr[num++] = 0x4;	/* lu, logging */
1193 	arr[num++] = 0x0;	/* reserved */
1194 	arr[num++] = 0x0;
1195 	olen = strlen(na2);
1196 	plen = olen + 1;
1197 	if (plen % 4)
1198 		plen = ((plen / 4) + 1) * 4;
1199 	arr[num++] = plen;	/* length, null terminated, padded */
1200 	memcpy(arr + num, na2, olen);
1201 	memset(arr + num + olen, 0, plen - olen);
1202 	num += plen;
1203 
1204 	return num;
1205 }
1206 
1207 /* SCSI ports VPD page */
1208 static int inquiry_vpd_88(unsigned char *arr, int target_dev_id)
1209 {
1210 	int num = 0;
1211 	int port_a, port_b;
1212 
1213 	port_a = target_dev_id + 1;
1214 	port_b = port_a + 1;
1215 	arr[num++] = 0x0;	/* reserved */
1216 	arr[num++] = 0x0;	/* reserved */
1217 	arr[num++] = 0x0;
1218 	arr[num++] = 0x1;	/* relative port 1 (primary) */
1219 	memset(arr + num, 0, 6);
1220 	num += 6;
1221 	arr[num++] = 0x0;
1222 	arr[num++] = 12;	/* length tp descriptor */
1223 	/* naa-5 target port identifier (A) */
1224 	arr[num++] = 0x61;	/* proto=sas, binary */
1225 	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1226 	arr[num++] = 0x0;	/* reserved */
1227 	arr[num++] = 0x8;	/* length */
1228 	put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1229 	num += 8;
1230 	arr[num++] = 0x0;	/* reserved */
1231 	arr[num++] = 0x0;	/* reserved */
1232 	arr[num++] = 0x0;
1233 	arr[num++] = 0x2;	/* relative port 2 (secondary) */
1234 	memset(arr + num, 0, 6);
1235 	num += 6;
1236 	arr[num++] = 0x0;
1237 	arr[num++] = 12;	/* length tp descriptor */
1238 	/* naa-5 target port identifier (B) */
1239 	arr[num++] = 0x61;	/* proto=sas, binary */
1240 	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1241 	arr[num++] = 0x0;	/* reserved */
1242 	arr[num++] = 0x8;	/* length */
1243 	put_unaligned_be64(naa3_comp_a + port_b, arr + num);
1244 	num += 8;
1245 
1246 	return num;
1247 }
1248 
1249 
1250 static unsigned char vpd89_data[] = {
1251 /* from 4th byte */ 0,0,0,0,
1252 'l','i','n','u','x',' ',' ',' ',
1253 'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
1254 '1','2','3','4',
1255 0x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
1256 0xec,0,0,0,
1257 0x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
1258 0,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
1259 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
1260 0x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
1261 0x53,0x41,
1262 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
1263 0x20,0x20,
1264 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
1265 0x10,0x80,
1266 0,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
1267 0x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
1268 0x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
1269 0,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
1270 0x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
1271 0x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
1272 0,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
1273 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1274 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1275 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1276 0x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
1277 0,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
1278 0xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
1279 0,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
1280 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1281 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1282 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1283 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1284 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1285 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1286 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1287 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1288 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1289 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1290 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1291 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
1292 };
1293 
1294 /* ATA Information VPD page */
1295 static int inquiry_vpd_89(unsigned char *arr)
1296 {
1297 	memcpy(arr, vpd89_data, sizeof(vpd89_data));
1298 	return sizeof(vpd89_data);
1299 }
1300 
1301 
1302 static unsigned char vpdb0_data[] = {
1303 	/* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
1304 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1305 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1306 	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1307 };
1308 
1309 /* Block limits VPD page (SBC-3) */
1310 static int inquiry_vpd_b0(unsigned char *arr)
1311 {
1312 	unsigned int gran;
1313 
1314 	memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
1315 
1316 	/* Optimal transfer length granularity */
1317 	if (sdebug_opt_xferlen_exp != 0 &&
1318 	    sdebug_physblk_exp < sdebug_opt_xferlen_exp)
1319 		gran = 1 << sdebug_opt_xferlen_exp;
1320 	else
1321 		gran = 1 << sdebug_physblk_exp;
1322 	put_unaligned_be16(gran, arr + 2);
1323 
1324 	/* Maximum Transfer Length */
1325 	if (sdebug_store_sectors > 0x400)
1326 		put_unaligned_be32(sdebug_store_sectors, arr + 4);
1327 
1328 	/* Optimal Transfer Length */
1329 	put_unaligned_be32(sdebug_opt_blks, &arr[8]);
1330 
1331 	if (sdebug_lbpu) {
1332 		/* Maximum Unmap LBA Count */
1333 		put_unaligned_be32(sdebug_unmap_max_blocks, &arr[16]);
1334 
1335 		/* Maximum Unmap Block Descriptor Count */
1336 		put_unaligned_be32(sdebug_unmap_max_desc, &arr[20]);
1337 	}
1338 
1339 	/* Unmap Granularity Alignment */
1340 	if (sdebug_unmap_alignment) {
1341 		put_unaligned_be32(sdebug_unmap_alignment, &arr[28]);
1342 		arr[28] |= 0x80; /* UGAVALID */
1343 	}
1344 
1345 	/* Optimal Unmap Granularity */
1346 	put_unaligned_be32(sdebug_unmap_granularity, &arr[24]);
1347 
1348 	/* Maximum WRITE SAME Length */
1349 	put_unaligned_be64(sdebug_write_same_length, &arr[32]);
1350 
1351 	return 0x3c; /* Mandatory page length for Logical Block Provisioning */
1352 
1353 	return sizeof(vpdb0_data);
1354 }
1355 
1356 /* Block device characteristics VPD page (SBC-3) */
1357 static int inquiry_vpd_b1(unsigned char *arr)
1358 {
1359 	memset(arr, 0, 0x3c);
1360 	arr[0] = 0;
1361 	arr[1] = 1;	/* non rotating medium (e.g. solid state) */
1362 	arr[2] = 0;
1363 	arr[3] = 5;	/* less than 1.8" */
1364 
1365 	return 0x3c;
1366 }
1367 
1368 /* Logical block provisioning VPD page (SBC-4) */
1369 static int inquiry_vpd_b2(unsigned char *arr)
1370 {
1371 	memset(arr, 0, 0x4);
1372 	arr[0] = 0;			/* threshold exponent */
1373 	if (sdebug_lbpu)
1374 		arr[1] = 1 << 7;
1375 	if (sdebug_lbpws)
1376 		arr[1] |= 1 << 6;
1377 	if (sdebug_lbpws10)
1378 		arr[1] |= 1 << 5;
1379 	if (sdebug_lbprz && scsi_debug_lbp())
1380 		arr[1] |= (sdebug_lbprz & 0x7) << 2;  /* sbc4r07 and later */
1381 	/* anc_sup=0; dp=0 (no provisioning group descriptor) */
1382 	/* minimum_percentage=0; provisioning_type=0 (unknown) */
1383 	/* threshold_percentage=0 */
1384 	return 0x4;
1385 }
1386 
1387 #define SDEBUG_LONG_INQ_SZ 96
1388 #define SDEBUG_MAX_INQ_ARR_SZ 584
1389 
1390 static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1391 {
1392 	unsigned char pq_pdt;
1393 	unsigned char *arr;
1394 	unsigned char *cmd = scp->cmnd;
1395 	int alloc_len, n, ret;
1396 	bool have_wlun, is_disk;
1397 
1398 	alloc_len = get_unaligned_be16(cmd + 3);
1399 	arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
1400 	if (! arr)
1401 		return DID_REQUEUE << 16;
1402 	is_disk = (sdebug_ptype == TYPE_DISK);
1403 	have_wlun = scsi_is_wlun(scp->device->lun);
1404 	if (have_wlun)
1405 		pq_pdt = TYPE_WLUN;	/* present, wlun */
1406 	else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL))
1407 		pq_pdt = 0x7f;	/* not present, PQ=3, PDT=0x1f */
1408 	else
1409 		pq_pdt = (sdebug_ptype & 0x1f);
1410 	arr[0] = pq_pdt;
1411 	if (0x2 & cmd[1]) {  /* CMDDT bit set */
1412 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 1);
1413 		kfree(arr);
1414 		return check_condition_result;
1415 	} else if (0x1 & cmd[1]) {  /* EVPD bit set */
1416 		int lu_id_num, port_group_id, target_dev_id, len;
1417 		char lu_id_str[6];
1418 		int host_no = devip->sdbg_host->shost->host_no;
1419 
1420 		port_group_id = (((host_no + 1) & 0x7f) << 8) +
1421 		    (devip->channel & 0x7f);
1422 		if (sdebug_vpd_use_hostno == 0)
1423 			host_no = 0;
1424 		lu_id_num = have_wlun ? -1 : (((host_no + 1) * 2000) +
1425 			    (devip->target * 1000) + devip->lun);
1426 		target_dev_id = ((host_no + 1) * 2000) +
1427 				 (devip->target * 1000) - 3;
1428 		len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
1429 		if (0 == cmd[2]) { /* supported vital product data pages */
1430 			arr[1] = cmd[2];	/*sanity */
1431 			n = 4;
1432 			arr[n++] = 0x0;   /* this page */
1433 			arr[n++] = 0x80;  /* unit serial number */
1434 			arr[n++] = 0x83;  /* device identification */
1435 			arr[n++] = 0x84;  /* software interface ident. */
1436 			arr[n++] = 0x85;  /* management network addresses */
1437 			arr[n++] = 0x86;  /* extended inquiry */
1438 			arr[n++] = 0x87;  /* mode page policy */
1439 			arr[n++] = 0x88;  /* SCSI ports */
1440 			if (is_disk) {	  /* SBC only */
1441 				arr[n++] = 0x89;  /* ATA information */
1442 				arr[n++] = 0xb0;  /* Block limits */
1443 				arr[n++] = 0xb1;  /* Block characteristics */
1444 				arr[n++] = 0xb2;  /* Logical Block Prov */
1445 			}
1446 			arr[3] = n - 4;	  /* number of supported VPD pages */
1447 		} else if (0x80 == cmd[2]) { /* unit serial number */
1448 			arr[1] = cmd[2];	/*sanity */
1449 			arr[3] = len;
1450 			memcpy(&arr[4], lu_id_str, len);
1451 		} else if (0x83 == cmd[2]) { /* device identification */
1452 			arr[1] = cmd[2];	/*sanity */
1453 			arr[3] = inquiry_vpd_83(&arr[4], port_group_id,
1454 						target_dev_id, lu_id_num,
1455 						lu_id_str, len,
1456 						&devip->lu_name);
1457 		} else if (0x84 == cmd[2]) { /* Software interface ident. */
1458 			arr[1] = cmd[2];	/*sanity */
1459 			arr[3] = inquiry_vpd_84(&arr[4]);
1460 		} else if (0x85 == cmd[2]) { /* Management network addresses */
1461 			arr[1] = cmd[2];	/*sanity */
1462 			arr[3] = inquiry_vpd_85(&arr[4]);
1463 		} else if (0x86 == cmd[2]) { /* extended inquiry */
1464 			arr[1] = cmd[2];	/*sanity */
1465 			arr[3] = 0x3c;	/* number of following entries */
1466 			if (sdebug_dif == T10_PI_TYPE3_PROTECTION)
1467 				arr[4] = 0x4;	/* SPT: GRD_CHK:1 */
1468 			else if (have_dif_prot)
1469 				arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
1470 			else
1471 				arr[4] = 0x0;   /* no protection stuff */
1472 			arr[5] = 0x7;   /* head of q, ordered + simple q's */
1473 		} else if (0x87 == cmd[2]) { /* mode page policy */
1474 			arr[1] = cmd[2];	/*sanity */
1475 			arr[3] = 0x8;	/* number of following entries */
1476 			arr[4] = 0x2;	/* disconnect-reconnect mp */
1477 			arr[6] = 0x80;	/* mlus, shared */
1478 			arr[8] = 0x18;	 /* protocol specific lu */
1479 			arr[10] = 0x82;	 /* mlus, per initiator port */
1480 		} else if (0x88 == cmd[2]) { /* SCSI Ports */
1481 			arr[1] = cmd[2];	/*sanity */
1482 			arr[3] = inquiry_vpd_88(&arr[4], target_dev_id);
1483 		} else if (is_disk && 0x89 == cmd[2]) { /* ATA information */
1484 			arr[1] = cmd[2];        /*sanity */
1485 			n = inquiry_vpd_89(&arr[4]);
1486 			put_unaligned_be16(n, arr + 2);
1487 		} else if (is_disk && 0xb0 == cmd[2]) { /* Block limits */
1488 			arr[1] = cmd[2];        /*sanity */
1489 			arr[3] = inquiry_vpd_b0(&arr[4]);
1490 		} else if (is_disk && 0xb1 == cmd[2]) { /* Block char. */
1491 			arr[1] = cmd[2];        /*sanity */
1492 			arr[3] = inquiry_vpd_b1(&arr[4]);
1493 		} else if (is_disk && 0xb2 == cmd[2]) { /* LB Prov. */
1494 			arr[1] = cmd[2];        /*sanity */
1495 			arr[3] = inquiry_vpd_b2(&arr[4]);
1496 		} else {
1497 			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
1498 			kfree(arr);
1499 			return check_condition_result;
1500 		}
1501 		len = min(get_unaligned_be16(arr + 2) + 4, alloc_len);
1502 		ret = fill_from_dev_buffer(scp, arr,
1503 			    min(len, SDEBUG_MAX_INQ_ARR_SZ));
1504 		kfree(arr);
1505 		return ret;
1506 	}
1507 	/* drops through here for a standard inquiry */
1508 	arr[1] = sdebug_removable ? 0x80 : 0;	/* Removable disk */
1509 	arr[2] = sdebug_scsi_level;
1510 	arr[3] = 2;    /* response_data_format==2 */
1511 	arr[4] = SDEBUG_LONG_INQ_SZ - 5;
1512 	arr[5] = (int)have_dif_prot;	/* PROTECT bit */
1513 	if (sdebug_vpd_use_hostno == 0)
1514 		arr[5] |= 0x10; /* claim: implicit TPGS */
1515 	arr[6] = 0x10; /* claim: MultiP */
1516 	/* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
1517 	arr[7] = 0xa; /* claim: LINKED + CMDQUE */
1518 	memcpy(&arr[8], sdebug_inq_vendor_id, 8);
1519 	memcpy(&arr[16], sdebug_inq_product_id, 16);
1520 	memcpy(&arr[32], sdebug_inq_product_rev, 4);
1521 	/* Use Vendor Specific area to place driver date in ASCII hex */
1522 	memcpy(&arr[36], sdebug_version_date, 8);
1523 	/* version descriptors (2 bytes each) follow */
1524 	put_unaligned_be16(0xc0, arr + 58);   /* SAM-6 no version claimed */
1525 	put_unaligned_be16(0x5c0, arr + 60);  /* SPC-5 no version claimed */
1526 	n = 62;
1527 	if (is_disk) {		/* SBC-4 no version claimed */
1528 		put_unaligned_be16(0x600, arr + n);
1529 		n += 2;
1530 	} else if (sdebug_ptype == TYPE_TAPE) {	/* SSC-4 rev 3 */
1531 		put_unaligned_be16(0x525, arr + n);
1532 		n += 2;
1533 	}
1534 	put_unaligned_be16(0x2100, arr + n);	/* SPL-4 no version claimed */
1535 	ret = fill_from_dev_buffer(scp, arr,
1536 			    min(alloc_len, SDEBUG_LONG_INQ_SZ));
1537 	kfree(arr);
1538 	return ret;
1539 }
1540 
1541 static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1542 				   0, 0, 0x0, 0x0};
1543 
1544 static int resp_requests(struct scsi_cmnd *scp,
1545 			 struct sdebug_dev_info *devip)
1546 {
1547 	unsigned char *sbuff;
1548 	unsigned char *cmd = scp->cmnd;
1549 	unsigned char arr[SCSI_SENSE_BUFFERSIZE];
1550 	bool dsense;
1551 	int len = 18;
1552 
1553 	memset(arr, 0, sizeof(arr));
1554 	dsense = !!(cmd[1] & 1);
1555 	sbuff = scp->sense_buffer;
1556 	if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
1557 		if (dsense) {
1558 			arr[0] = 0x72;
1559 			arr[1] = 0x0;		/* NO_SENSE in sense_key */
1560 			arr[2] = THRESHOLD_EXCEEDED;
1561 			arr[3] = 0xff;		/* TEST set and MRIE==6 */
1562 			len = 8;
1563 		} else {
1564 			arr[0] = 0x70;
1565 			arr[2] = 0x0;		/* NO_SENSE in sense_key */
1566 			arr[7] = 0xa;   	/* 18 byte sense buffer */
1567 			arr[12] = THRESHOLD_EXCEEDED;
1568 			arr[13] = 0xff;		/* TEST set and MRIE==6 */
1569 		}
1570 	} else {
1571 		memcpy(arr, sbuff, SCSI_SENSE_BUFFERSIZE);
1572 		if (arr[0] >= 0x70 && dsense == sdebug_dsense)
1573 			;	/* have sense and formats match */
1574 		else if (arr[0] <= 0x70) {
1575 			if (dsense) {
1576 				memset(arr, 0, 8);
1577 				arr[0] = 0x72;
1578 				len = 8;
1579 			} else {
1580 				memset(arr, 0, 18);
1581 				arr[0] = 0x70;
1582 				arr[7] = 0xa;
1583 			}
1584 		} else if (dsense) {
1585 			memset(arr, 0, 8);
1586 			arr[0] = 0x72;
1587 			arr[1] = sbuff[2];     /* sense key */
1588 			arr[2] = sbuff[12];    /* asc */
1589 			arr[3] = sbuff[13];    /* ascq */
1590 			len = 8;
1591 		} else {
1592 			memset(arr, 0, 18);
1593 			arr[0] = 0x70;
1594 			arr[2] = sbuff[1];
1595 			arr[7] = 0xa;
1596 			arr[12] = sbuff[1];
1597 			arr[13] = sbuff[3];
1598 		}
1599 
1600 	}
1601 	mk_sense_buffer(scp, 0, NO_ADDITIONAL_SENSE, 0);
1602 	return fill_from_dev_buffer(scp, arr, len);
1603 }
1604 
1605 static int resp_start_stop(struct scsi_cmnd *scp,
1606 			   struct sdebug_dev_info *devip)
1607 {
1608 	unsigned char *cmd = scp->cmnd;
1609 	int power_cond, stop;
1610 
1611 	power_cond = (cmd[4] & 0xf0) >> 4;
1612 	if (power_cond) {
1613 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 7);
1614 		return check_condition_result;
1615 	}
1616 	stop = !(cmd[4] & 1);
1617 	atomic_xchg(&devip->stopped, stop);
1618 	return (cmd[1] & 0x1) ? SDEG_RES_IMMED_MASK : 0; /* check IMMED bit */
1619 }
1620 
1621 static sector_t get_sdebug_capacity(void)
1622 {
1623 	static const unsigned int gibibyte = 1073741824;
1624 
1625 	if (sdebug_virtual_gb > 0)
1626 		return (sector_t)sdebug_virtual_gb *
1627 			(gibibyte / sdebug_sector_size);
1628 	else
1629 		return sdebug_store_sectors;
1630 }
1631 
1632 #define SDEBUG_READCAP_ARR_SZ 8
1633 static int resp_readcap(struct scsi_cmnd *scp,
1634 			struct sdebug_dev_info *devip)
1635 {
1636 	unsigned char arr[SDEBUG_READCAP_ARR_SZ];
1637 	unsigned int capac;
1638 
1639 	/* following just in case virtual_gb changed */
1640 	sdebug_capacity = get_sdebug_capacity();
1641 	memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
1642 	if (sdebug_capacity < 0xffffffff) {
1643 		capac = (unsigned int)sdebug_capacity - 1;
1644 		put_unaligned_be32(capac, arr + 0);
1645 	} else
1646 		put_unaligned_be32(0xffffffff, arr + 0);
1647 	put_unaligned_be16(sdebug_sector_size, arr + 6);
1648 	return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
1649 }
1650 
1651 #define SDEBUG_READCAP16_ARR_SZ 32
1652 static int resp_readcap16(struct scsi_cmnd *scp,
1653 			  struct sdebug_dev_info *devip)
1654 {
1655 	unsigned char *cmd = scp->cmnd;
1656 	unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
1657 	int alloc_len;
1658 
1659 	alloc_len = get_unaligned_be32(cmd + 10);
1660 	/* following just in case virtual_gb changed */
1661 	sdebug_capacity = get_sdebug_capacity();
1662 	memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
1663 	put_unaligned_be64((u64)(sdebug_capacity - 1), arr + 0);
1664 	put_unaligned_be32(sdebug_sector_size, arr + 8);
1665 	arr[13] = sdebug_physblk_exp & 0xf;
1666 	arr[14] = (sdebug_lowest_aligned >> 8) & 0x3f;
1667 
1668 	if (scsi_debug_lbp()) {
1669 		arr[14] |= 0x80; /* LBPME */
1670 		/* from sbc4r07, this LBPRZ field is 1 bit, but the LBPRZ in
1671 		 * the LB Provisioning VPD page is 3 bits. Note that lbprz=2
1672 		 * in the wider field maps to 0 in this field.
1673 		 */
1674 		if (sdebug_lbprz & 1)	/* precisely what the draft requires */
1675 			arr[14] |= 0x40;
1676 	}
1677 
1678 	arr[15] = sdebug_lowest_aligned & 0xff;
1679 
1680 	if (have_dif_prot) {
1681 		arr[12] = (sdebug_dif - 1) << 1; /* P_TYPE */
1682 		arr[12] |= 1; /* PROT_EN */
1683 	}
1684 
1685 	return fill_from_dev_buffer(scp, arr,
1686 				    min(alloc_len, SDEBUG_READCAP16_ARR_SZ));
1687 }
1688 
1689 #define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
1690 
1691 static int resp_report_tgtpgs(struct scsi_cmnd *scp,
1692 			      struct sdebug_dev_info *devip)
1693 {
1694 	unsigned char *cmd = scp->cmnd;
1695 	unsigned char *arr;
1696 	int host_no = devip->sdbg_host->shost->host_no;
1697 	int n, ret, alen, rlen;
1698 	int port_group_a, port_group_b, port_a, port_b;
1699 
1700 	alen = get_unaligned_be32(cmd + 6);
1701 	arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
1702 	if (! arr)
1703 		return DID_REQUEUE << 16;
1704 	/*
1705 	 * EVPD page 0x88 states we have two ports, one
1706 	 * real and a fake port with no device connected.
1707 	 * So we create two port groups with one port each
1708 	 * and set the group with port B to unavailable.
1709 	 */
1710 	port_a = 0x1; /* relative port A */
1711 	port_b = 0x2; /* relative port B */
1712 	port_group_a = (((host_no + 1) & 0x7f) << 8) +
1713 			(devip->channel & 0x7f);
1714 	port_group_b = (((host_no + 1) & 0x7f) << 8) +
1715 			(devip->channel & 0x7f) + 0x80;
1716 
1717 	/*
1718 	 * The asymmetric access state is cycled according to the host_id.
1719 	 */
1720 	n = 4;
1721 	if (sdebug_vpd_use_hostno == 0) {
1722 		arr[n++] = host_no % 3; /* Asymm access state */
1723 		arr[n++] = 0x0F; /* claim: all states are supported */
1724 	} else {
1725 		arr[n++] = 0x0; /* Active/Optimized path */
1726 		arr[n++] = 0x01; /* only support active/optimized paths */
1727 	}
1728 	put_unaligned_be16(port_group_a, arr + n);
1729 	n += 2;
1730 	arr[n++] = 0;    /* Reserved */
1731 	arr[n++] = 0;    /* Status code */
1732 	arr[n++] = 0;    /* Vendor unique */
1733 	arr[n++] = 0x1;  /* One port per group */
1734 	arr[n++] = 0;    /* Reserved */
1735 	arr[n++] = 0;    /* Reserved */
1736 	put_unaligned_be16(port_a, arr + n);
1737 	n += 2;
1738 	arr[n++] = 3;    /* Port unavailable */
1739 	arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
1740 	put_unaligned_be16(port_group_b, arr + n);
1741 	n += 2;
1742 	arr[n++] = 0;    /* Reserved */
1743 	arr[n++] = 0;    /* Status code */
1744 	arr[n++] = 0;    /* Vendor unique */
1745 	arr[n++] = 0x1;  /* One port per group */
1746 	arr[n++] = 0;    /* Reserved */
1747 	arr[n++] = 0;    /* Reserved */
1748 	put_unaligned_be16(port_b, arr + n);
1749 	n += 2;
1750 
1751 	rlen = n - 4;
1752 	put_unaligned_be32(rlen, arr + 0);
1753 
1754 	/*
1755 	 * Return the smallest value of either
1756 	 * - The allocated length
1757 	 * - The constructed command length
1758 	 * - The maximum array size
1759 	 */
1760 	rlen = min(alen,n);
1761 	ret = fill_from_dev_buffer(scp, arr,
1762 				   min(rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
1763 	kfree(arr);
1764 	return ret;
1765 }
1766 
1767 static int resp_rsup_opcodes(struct scsi_cmnd *scp,
1768 			     struct sdebug_dev_info *devip)
1769 {
1770 	bool rctd;
1771 	u8 reporting_opts, req_opcode, sdeb_i, supp;
1772 	u16 req_sa, u;
1773 	u32 alloc_len, a_len;
1774 	int k, offset, len, errsts, count, bump, na;
1775 	const struct opcode_info_t *oip;
1776 	const struct opcode_info_t *r_oip;
1777 	u8 *arr;
1778 	u8 *cmd = scp->cmnd;
1779 
1780 	rctd = !!(cmd[2] & 0x80);
1781 	reporting_opts = cmd[2] & 0x7;
1782 	req_opcode = cmd[3];
1783 	req_sa = get_unaligned_be16(cmd + 4);
1784 	alloc_len = get_unaligned_be32(cmd + 6);
1785 	if (alloc_len < 4 || alloc_len > 0xffff) {
1786 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1787 		return check_condition_result;
1788 	}
1789 	if (alloc_len > 8192)
1790 		a_len = 8192;
1791 	else
1792 		a_len = alloc_len;
1793 	arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
1794 	if (NULL == arr) {
1795 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
1796 				INSUFF_RES_ASCQ);
1797 		return check_condition_result;
1798 	}
1799 	switch (reporting_opts) {
1800 	case 0:	/* all commands */
1801 		/* count number of commands */
1802 		for (count = 0, oip = opcode_info_arr;
1803 		     oip->num_attached != 0xff; ++oip) {
1804 			if (F_INV_OP & oip->flags)
1805 				continue;
1806 			count += (oip->num_attached + 1);
1807 		}
1808 		bump = rctd ? 20 : 8;
1809 		put_unaligned_be32(count * bump, arr);
1810 		for (offset = 4, oip = opcode_info_arr;
1811 		     oip->num_attached != 0xff && offset < a_len; ++oip) {
1812 			if (F_INV_OP & oip->flags)
1813 				continue;
1814 			na = oip->num_attached;
1815 			arr[offset] = oip->opcode;
1816 			put_unaligned_be16(oip->sa, arr + offset + 2);
1817 			if (rctd)
1818 				arr[offset + 5] |= 0x2;
1819 			if (FF_SA & oip->flags)
1820 				arr[offset + 5] |= 0x1;
1821 			put_unaligned_be16(oip->len_mask[0], arr + offset + 6);
1822 			if (rctd)
1823 				put_unaligned_be16(0xa, arr + offset + 8);
1824 			r_oip = oip;
1825 			for (k = 0, oip = oip->arrp; k < na; ++k, ++oip) {
1826 				if (F_INV_OP & oip->flags)
1827 					continue;
1828 				offset += bump;
1829 				arr[offset] = oip->opcode;
1830 				put_unaligned_be16(oip->sa, arr + offset + 2);
1831 				if (rctd)
1832 					arr[offset + 5] |= 0x2;
1833 				if (FF_SA & oip->flags)
1834 					arr[offset + 5] |= 0x1;
1835 				put_unaligned_be16(oip->len_mask[0],
1836 						   arr + offset + 6);
1837 				if (rctd)
1838 					put_unaligned_be16(0xa,
1839 							   arr + offset + 8);
1840 			}
1841 			oip = r_oip;
1842 			offset += bump;
1843 		}
1844 		break;
1845 	case 1:	/* one command: opcode only */
1846 	case 2:	/* one command: opcode plus service action */
1847 	case 3:	/* one command: if sa==0 then opcode only else opcode+sa */
1848 		sdeb_i = opcode_ind_arr[req_opcode];
1849 		oip = &opcode_info_arr[sdeb_i];
1850 		if (F_INV_OP & oip->flags) {
1851 			supp = 1;
1852 			offset = 4;
1853 		} else {
1854 			if (1 == reporting_opts) {
1855 				if (FF_SA & oip->flags) {
1856 					mk_sense_invalid_fld(scp, SDEB_IN_CDB,
1857 							     2, 2);
1858 					kfree(arr);
1859 					return check_condition_result;
1860 				}
1861 				req_sa = 0;
1862 			} else if (2 == reporting_opts &&
1863 				   0 == (FF_SA & oip->flags)) {
1864 				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
1865 				kfree(arr);	/* point at requested sa */
1866 				return check_condition_result;
1867 			}
1868 			if (0 == (FF_SA & oip->flags) &&
1869 			    req_opcode == oip->opcode)
1870 				supp = 3;
1871 			else if (0 == (FF_SA & oip->flags)) {
1872 				na = oip->num_attached;
1873 				for (k = 0, oip = oip->arrp; k < na;
1874 				     ++k, ++oip) {
1875 					if (req_opcode == oip->opcode)
1876 						break;
1877 				}
1878 				supp = (k >= na) ? 1 : 3;
1879 			} else if (req_sa != oip->sa) {
1880 				na = oip->num_attached;
1881 				for (k = 0, oip = oip->arrp; k < na;
1882 				     ++k, ++oip) {
1883 					if (req_sa == oip->sa)
1884 						break;
1885 				}
1886 				supp = (k >= na) ? 1 : 3;
1887 			} else
1888 				supp = 3;
1889 			if (3 == supp) {
1890 				u = oip->len_mask[0];
1891 				put_unaligned_be16(u, arr + 2);
1892 				arr[4] = oip->opcode;
1893 				for (k = 1; k < u; ++k)
1894 					arr[4 + k] = (k < 16) ?
1895 						 oip->len_mask[k] : 0xff;
1896 				offset = 4 + u;
1897 			} else
1898 				offset = 4;
1899 		}
1900 		arr[1] = (rctd ? 0x80 : 0) | supp;
1901 		if (rctd) {
1902 			put_unaligned_be16(0xa, arr + offset);
1903 			offset += 12;
1904 		}
1905 		break;
1906 	default:
1907 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
1908 		kfree(arr);
1909 		return check_condition_result;
1910 	}
1911 	offset = (offset < a_len) ? offset : a_len;
1912 	len = (offset < alloc_len) ? offset : alloc_len;
1913 	errsts = fill_from_dev_buffer(scp, arr, len);
1914 	kfree(arr);
1915 	return errsts;
1916 }
1917 
1918 static int resp_rsup_tmfs(struct scsi_cmnd *scp,
1919 			  struct sdebug_dev_info *devip)
1920 {
1921 	bool repd;
1922 	u32 alloc_len, len;
1923 	u8 arr[16];
1924 	u8 *cmd = scp->cmnd;
1925 
1926 	memset(arr, 0, sizeof(arr));
1927 	repd = !!(cmd[2] & 0x80);
1928 	alloc_len = get_unaligned_be32(cmd + 6);
1929 	if (alloc_len < 4) {
1930 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1931 		return check_condition_result;
1932 	}
1933 	arr[0] = 0xc8;		/* ATS | ATSS | LURS */
1934 	arr[1] = 0x1;		/* ITNRS */
1935 	if (repd) {
1936 		arr[3] = 0xc;
1937 		len = 16;
1938 	} else
1939 		len = 4;
1940 
1941 	len = (len < alloc_len) ? len : alloc_len;
1942 	return fill_from_dev_buffer(scp, arr, len);
1943 }
1944 
1945 /* <<Following mode page info copied from ST318451LW>> */
1946 
1947 static int resp_err_recov_pg(unsigned char *p, int pcontrol, int target)
1948 {	/* Read-Write Error Recovery page for mode_sense */
1949 	unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
1950 					5, 0, 0xff, 0xff};
1951 
1952 	memcpy(p, err_recov_pg, sizeof(err_recov_pg));
1953 	if (1 == pcontrol)
1954 		memset(p + 2, 0, sizeof(err_recov_pg) - 2);
1955 	return sizeof(err_recov_pg);
1956 }
1957 
1958 static int resp_disconnect_pg(unsigned char *p, int pcontrol, int target)
1959 { 	/* Disconnect-Reconnect page for mode_sense */
1960 	unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
1961 					 0, 0, 0, 0, 0, 0, 0, 0};
1962 
1963 	memcpy(p, disconnect_pg, sizeof(disconnect_pg));
1964 	if (1 == pcontrol)
1965 		memset(p + 2, 0, sizeof(disconnect_pg) - 2);
1966 	return sizeof(disconnect_pg);
1967 }
1968 
1969 static int resp_format_pg(unsigned char *p, int pcontrol, int target)
1970 {       /* Format device page for mode_sense */
1971 	unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
1972 				     0, 0, 0, 0, 0, 0, 0, 0,
1973 				     0, 0, 0, 0, 0x40, 0, 0, 0};
1974 
1975 	memcpy(p, format_pg, sizeof(format_pg));
1976 	put_unaligned_be16(sdebug_sectors_per, p + 10);
1977 	put_unaligned_be16(sdebug_sector_size, p + 12);
1978 	if (sdebug_removable)
1979 		p[20] |= 0x20; /* should agree with INQUIRY */
1980 	if (1 == pcontrol)
1981 		memset(p + 2, 0, sizeof(format_pg) - 2);
1982 	return sizeof(format_pg);
1983 }
1984 
1985 static unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1986 				     0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
1987 				     0, 0, 0, 0};
1988 
1989 static int resp_caching_pg(unsigned char *p, int pcontrol, int target)
1990 { 	/* Caching page for mode_sense */
1991 	unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
1992 		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1993 	unsigned char d_caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1994 		0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
1995 
1996 	if (SDEBUG_OPT_N_WCE & sdebug_opts)
1997 		caching_pg[2] &= ~0x4;	/* set WCE=0 (default WCE=1) */
1998 	memcpy(p, caching_pg, sizeof(caching_pg));
1999 	if (1 == pcontrol)
2000 		memcpy(p + 2, ch_caching_pg, sizeof(ch_caching_pg));
2001 	else if (2 == pcontrol)
2002 		memcpy(p, d_caching_pg, sizeof(d_caching_pg));
2003 	return sizeof(caching_pg);
2004 }
2005 
2006 static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2007 				    0, 0, 0x2, 0x4b};
2008 
2009 static int resp_ctrl_m_pg(unsigned char *p, int pcontrol, int target)
2010 { 	/* Control mode page for mode_sense */
2011 	unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
2012 					0, 0, 0, 0};
2013 	unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2014 				     0, 0, 0x2, 0x4b};
2015 
2016 	if (sdebug_dsense)
2017 		ctrl_m_pg[2] |= 0x4;
2018 	else
2019 		ctrl_m_pg[2] &= ~0x4;
2020 
2021 	if (sdebug_ato)
2022 		ctrl_m_pg[5] |= 0x80; /* ATO=1 */
2023 
2024 	memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
2025 	if (1 == pcontrol)
2026 		memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
2027 	else if (2 == pcontrol)
2028 		memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
2029 	return sizeof(ctrl_m_pg);
2030 }
2031 
2032 
2033 static int resp_iec_m_pg(unsigned char *p, int pcontrol, int target)
2034 {	/* Informational Exceptions control mode page for mode_sense */
2035 	unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
2036 				       0, 0, 0x0, 0x0};
2037 	unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
2038 				      0, 0, 0x0, 0x0};
2039 
2040 	memcpy(p, iec_m_pg, sizeof(iec_m_pg));
2041 	if (1 == pcontrol)
2042 		memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
2043 	else if (2 == pcontrol)
2044 		memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
2045 	return sizeof(iec_m_pg);
2046 }
2047 
2048 static int resp_sas_sf_m_pg(unsigned char *p, int pcontrol, int target)
2049 {	/* SAS SSP mode page - short format for mode_sense */
2050 	unsigned char sas_sf_m_pg[] = {0x19, 0x6,
2051 		0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
2052 
2053 	memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
2054 	if (1 == pcontrol)
2055 		memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
2056 	return sizeof(sas_sf_m_pg);
2057 }
2058 
2059 
2060 static int resp_sas_pcd_m_spg(unsigned char *p, int pcontrol, int target,
2061 			      int target_dev_id)
2062 {	/* SAS phy control and discover mode page for mode_sense */
2063 	unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
2064 		    0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
2065 		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2066 		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2067 		    0x2, 0, 0, 0, 0, 0, 0, 0,
2068 		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
2069 		    0, 0, 0, 0, 0, 0, 0, 0,
2070 		    0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
2071 		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2072 		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2073 		    0x3, 0, 0, 0, 0, 0, 0, 0,
2074 		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
2075 		    0, 0, 0, 0, 0, 0, 0, 0,
2076 		};
2077 	int port_a, port_b;
2078 
2079 	put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 16);
2080 	put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 24);
2081 	put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 64);
2082 	put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 72);
2083 	port_a = target_dev_id + 1;
2084 	port_b = port_a + 1;
2085 	memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
2086 	put_unaligned_be32(port_a, p + 20);
2087 	put_unaligned_be32(port_b, p + 48 + 20);
2088 	if (1 == pcontrol)
2089 		memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
2090 	return sizeof(sas_pcd_m_pg);
2091 }
2092 
2093 static int resp_sas_sha_m_spg(unsigned char *p, int pcontrol)
2094 {	/* SAS SSP shared protocol specific port mode subpage */
2095 	unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
2096 		    0, 0, 0, 0, 0, 0, 0, 0,
2097 		};
2098 
2099 	memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
2100 	if (1 == pcontrol)
2101 		memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
2102 	return sizeof(sas_sha_m_pg);
2103 }
2104 
2105 #define SDEBUG_MAX_MSENSE_SZ 256
2106 
2107 static int resp_mode_sense(struct scsi_cmnd *scp,
2108 			   struct sdebug_dev_info *devip)
2109 {
2110 	int pcontrol, pcode, subpcode, bd_len;
2111 	unsigned char dev_spec;
2112 	int alloc_len, offset, len, target_dev_id;
2113 	int target = scp->device->id;
2114 	unsigned char *ap;
2115 	unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
2116 	unsigned char *cmd = scp->cmnd;
2117 	bool dbd, llbaa, msense_6, is_disk, bad_pcode;
2118 
2119 	dbd = !!(cmd[1] & 0x8);		/* disable block descriptors */
2120 	pcontrol = (cmd[2] & 0xc0) >> 6;
2121 	pcode = cmd[2] & 0x3f;
2122 	subpcode = cmd[3];
2123 	msense_6 = (MODE_SENSE == cmd[0]);
2124 	llbaa = msense_6 ? false : !!(cmd[1] & 0x10);
2125 	is_disk = (sdebug_ptype == TYPE_DISK);
2126 	if (is_disk && !dbd)
2127 		bd_len = llbaa ? 16 : 8;
2128 	else
2129 		bd_len = 0;
2130 	alloc_len = msense_6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2131 	memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
2132 	if (0x3 == pcontrol) {  /* Saving values not supported */
2133 		mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
2134 		return check_condition_result;
2135 	}
2136 	target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2137 			(devip->target * 1000) - 3;
2138 	/* for disks set DPOFUA bit and clear write protect (WP) bit */
2139 	if (is_disk)
2140 		dev_spec = 0x10;	/* =0x90 if WP=1 implies read-only */
2141 	else
2142 		dev_spec = 0x0;
2143 	if (msense_6) {
2144 		arr[2] = dev_spec;
2145 		arr[3] = bd_len;
2146 		offset = 4;
2147 	} else {
2148 		arr[3] = dev_spec;
2149 		if (16 == bd_len)
2150 			arr[4] = 0x1;	/* set LONGLBA bit */
2151 		arr[7] = bd_len;	/* assume 255 or less */
2152 		offset = 8;
2153 	}
2154 	ap = arr + offset;
2155 	if ((bd_len > 0) && (!sdebug_capacity))
2156 		sdebug_capacity = get_sdebug_capacity();
2157 
2158 	if (8 == bd_len) {
2159 		if (sdebug_capacity > 0xfffffffe)
2160 			put_unaligned_be32(0xffffffff, ap + 0);
2161 		else
2162 			put_unaligned_be32(sdebug_capacity, ap + 0);
2163 		put_unaligned_be16(sdebug_sector_size, ap + 6);
2164 		offset += bd_len;
2165 		ap = arr + offset;
2166 	} else if (16 == bd_len) {
2167 		put_unaligned_be64((u64)sdebug_capacity, ap + 0);
2168 		put_unaligned_be32(sdebug_sector_size, ap + 12);
2169 		offset += bd_len;
2170 		ap = arr + offset;
2171 	}
2172 
2173 	if ((subpcode > 0x0) && (subpcode < 0xff) && (0x19 != pcode)) {
2174 		/* TODO: Control Extension page */
2175 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2176 		return check_condition_result;
2177 	}
2178 	bad_pcode = false;
2179 
2180 	switch (pcode) {
2181 	case 0x1:	/* Read-Write error recovery page, direct access */
2182 		len = resp_err_recov_pg(ap, pcontrol, target);
2183 		offset += len;
2184 		break;
2185 	case 0x2:	/* Disconnect-Reconnect page, all devices */
2186 		len = resp_disconnect_pg(ap, pcontrol, target);
2187 		offset += len;
2188 		break;
2189 	case 0x3:       /* Format device page, direct access */
2190 		if (is_disk) {
2191 			len = resp_format_pg(ap, pcontrol, target);
2192 			offset += len;
2193 		} else
2194 			bad_pcode = true;
2195 		break;
2196 	case 0x8:	/* Caching page, direct access */
2197 		if (is_disk) {
2198 			len = resp_caching_pg(ap, pcontrol, target);
2199 			offset += len;
2200 		} else
2201 			bad_pcode = true;
2202 		break;
2203 	case 0xa:	/* Control Mode page, all devices */
2204 		len = resp_ctrl_m_pg(ap, pcontrol, target);
2205 		offset += len;
2206 		break;
2207 	case 0x19:	/* if spc==1 then sas phy, control+discover */
2208 		if ((subpcode > 0x2) && (subpcode < 0xff)) {
2209 			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2210 			return check_condition_result;
2211 		}
2212 		len = 0;
2213 		if ((0x0 == subpcode) || (0xff == subpcode))
2214 			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2215 		if ((0x1 == subpcode) || (0xff == subpcode))
2216 			len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2217 						  target_dev_id);
2218 		if ((0x2 == subpcode) || (0xff == subpcode))
2219 			len += resp_sas_sha_m_spg(ap + len, pcontrol);
2220 		offset += len;
2221 		break;
2222 	case 0x1c:	/* Informational Exceptions Mode page, all devices */
2223 		len = resp_iec_m_pg(ap, pcontrol, target);
2224 		offset += len;
2225 		break;
2226 	case 0x3f:	/* Read all Mode pages */
2227 		if ((0 == subpcode) || (0xff == subpcode)) {
2228 			len = resp_err_recov_pg(ap, pcontrol, target);
2229 			len += resp_disconnect_pg(ap + len, pcontrol, target);
2230 			if (is_disk) {
2231 				len += resp_format_pg(ap + len, pcontrol,
2232 						      target);
2233 				len += resp_caching_pg(ap + len, pcontrol,
2234 						       target);
2235 			}
2236 			len += resp_ctrl_m_pg(ap + len, pcontrol, target);
2237 			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2238 			if (0xff == subpcode) {
2239 				len += resp_sas_pcd_m_spg(ap + len, pcontrol,
2240 						  target, target_dev_id);
2241 				len += resp_sas_sha_m_spg(ap + len, pcontrol);
2242 			}
2243 			len += resp_iec_m_pg(ap + len, pcontrol, target);
2244 			offset += len;
2245 		} else {
2246 			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2247 			return check_condition_result;
2248 		}
2249 		break;
2250 	default:
2251 		bad_pcode = true;
2252 		break;
2253 	}
2254 	if (bad_pcode) {
2255 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2256 		return check_condition_result;
2257 	}
2258 	if (msense_6)
2259 		arr[0] = offset - 1;
2260 	else
2261 		put_unaligned_be16((offset - 2), arr + 0);
2262 	return fill_from_dev_buffer(scp, arr, min(alloc_len, offset));
2263 }
2264 
2265 #define SDEBUG_MAX_MSELECT_SZ 512
2266 
2267 static int resp_mode_select(struct scsi_cmnd *scp,
2268 			    struct sdebug_dev_info *devip)
2269 {
2270 	int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
2271 	int param_len, res, mpage;
2272 	unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
2273 	unsigned char *cmd = scp->cmnd;
2274 	int mselect6 = (MODE_SELECT == cmd[0]);
2275 
2276 	memset(arr, 0, sizeof(arr));
2277 	pf = cmd[1] & 0x10;
2278 	sp = cmd[1] & 0x1;
2279 	param_len = mselect6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2280 	if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
2281 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, mselect6 ? 4 : 7, -1);
2282 		return check_condition_result;
2283 	}
2284 	res = fetch_to_dev_buffer(scp, arr, param_len);
2285 	if (-1 == res)
2286 		return DID_ERROR << 16;
2287 	else if (sdebug_verbose && (res < param_len))
2288 		sdev_printk(KERN_INFO, scp->device,
2289 			    "%s: cdb indicated=%d, IO sent=%d bytes\n",
2290 			    __func__, param_len, res);
2291 	md_len = mselect6 ? (arr[0] + 1) : (get_unaligned_be16(arr + 0) + 2);
2292 	bd_len = mselect6 ? arr[3] : get_unaligned_be16(arr + 6);
2293 	if (md_len > 2) {
2294 		mk_sense_invalid_fld(scp, SDEB_IN_DATA, 0, -1);
2295 		return check_condition_result;
2296 	}
2297 	off = bd_len + (mselect6 ? 4 : 8);
2298 	mpage = arr[off] & 0x3f;
2299 	ps = !!(arr[off] & 0x80);
2300 	if (ps) {
2301 		mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 7);
2302 		return check_condition_result;
2303 	}
2304 	spf = !!(arr[off] & 0x40);
2305 	pg_len = spf ? (get_unaligned_be16(arr + off + 2) + 4) :
2306 		       (arr[off + 1] + 2);
2307 	if ((pg_len + off) > param_len) {
2308 		mk_sense_buffer(scp, ILLEGAL_REQUEST,
2309 				PARAMETER_LIST_LENGTH_ERR, 0);
2310 		return check_condition_result;
2311 	}
2312 	switch (mpage) {
2313 	case 0x8:      /* Caching Mode page */
2314 		if (caching_pg[1] == arr[off + 1]) {
2315 			memcpy(caching_pg + 2, arr + off + 2,
2316 			       sizeof(caching_pg) - 2);
2317 			goto set_mode_changed_ua;
2318 		}
2319 		break;
2320 	case 0xa:      /* Control Mode page */
2321 		if (ctrl_m_pg[1] == arr[off + 1]) {
2322 			memcpy(ctrl_m_pg + 2, arr + off + 2,
2323 			       sizeof(ctrl_m_pg) - 2);
2324 			sdebug_dsense = !!(ctrl_m_pg[2] & 0x4);
2325 			goto set_mode_changed_ua;
2326 		}
2327 		break;
2328 	case 0x1c:      /* Informational Exceptions Mode page */
2329 		if (iec_m_pg[1] == arr[off + 1]) {
2330 			memcpy(iec_m_pg + 2, arr + off + 2,
2331 			       sizeof(iec_m_pg) - 2);
2332 			goto set_mode_changed_ua;
2333 		}
2334 		break;
2335 	default:
2336 		break;
2337 	}
2338 	mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 5);
2339 	return check_condition_result;
2340 set_mode_changed_ua:
2341 	set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2342 	return 0;
2343 }
2344 
2345 static int resp_temp_l_pg(unsigned char *arr)
2346 {
2347 	unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
2348 				     0x0, 0x1, 0x3, 0x2, 0x0, 65,
2349 		};
2350 
2351 	memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
2352 	return sizeof(temp_l_pg);
2353 }
2354 
2355 static int resp_ie_l_pg(unsigned char *arr)
2356 {
2357 	unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
2358 		};
2359 
2360 	memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
2361 	if (iec_m_pg[2] & 0x4) {	/* TEST bit set */
2362 		arr[4] = THRESHOLD_EXCEEDED;
2363 		arr[5] = 0xff;
2364 	}
2365 	return sizeof(ie_l_pg);
2366 }
2367 
2368 #define SDEBUG_MAX_LSENSE_SZ 512
2369 
2370 static int resp_log_sense(struct scsi_cmnd *scp,
2371 			  struct sdebug_dev_info *devip)
2372 {
2373 	int ppc, sp, pcode, subpcode, alloc_len, len, n;
2374 	unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
2375 	unsigned char *cmd = scp->cmnd;
2376 
2377 	memset(arr, 0, sizeof(arr));
2378 	ppc = cmd[1] & 0x2;
2379 	sp = cmd[1] & 0x1;
2380 	if (ppc || sp) {
2381 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, ppc ? 1 : 0);
2382 		return check_condition_result;
2383 	}
2384 	pcode = cmd[2] & 0x3f;
2385 	subpcode = cmd[3] & 0xff;
2386 	alloc_len = get_unaligned_be16(cmd + 7);
2387 	arr[0] = pcode;
2388 	if (0 == subpcode) {
2389 		switch (pcode) {
2390 		case 0x0:	/* Supported log pages log page */
2391 			n = 4;
2392 			arr[n++] = 0x0;		/* this page */
2393 			arr[n++] = 0xd;		/* Temperature */
2394 			arr[n++] = 0x2f;	/* Informational exceptions */
2395 			arr[3] = n - 4;
2396 			break;
2397 		case 0xd:	/* Temperature log page */
2398 			arr[3] = resp_temp_l_pg(arr + 4);
2399 			break;
2400 		case 0x2f:	/* Informational exceptions log page */
2401 			arr[3] = resp_ie_l_pg(arr + 4);
2402 			break;
2403 		default:
2404 			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2405 			return check_condition_result;
2406 		}
2407 	} else if (0xff == subpcode) {
2408 		arr[0] |= 0x40;
2409 		arr[1] = subpcode;
2410 		switch (pcode) {
2411 		case 0x0:	/* Supported log pages and subpages log page */
2412 			n = 4;
2413 			arr[n++] = 0x0;
2414 			arr[n++] = 0x0;		/* 0,0 page */
2415 			arr[n++] = 0x0;
2416 			arr[n++] = 0xff;	/* this page */
2417 			arr[n++] = 0xd;
2418 			arr[n++] = 0x0;		/* Temperature */
2419 			arr[n++] = 0x2f;
2420 			arr[n++] = 0x0;	/* Informational exceptions */
2421 			arr[3] = n - 4;
2422 			break;
2423 		case 0xd:	/* Temperature subpages */
2424 			n = 4;
2425 			arr[n++] = 0xd;
2426 			arr[n++] = 0x0;		/* Temperature */
2427 			arr[3] = n - 4;
2428 			break;
2429 		case 0x2f:	/* Informational exceptions subpages */
2430 			n = 4;
2431 			arr[n++] = 0x2f;
2432 			arr[n++] = 0x0;		/* Informational exceptions */
2433 			arr[3] = n - 4;
2434 			break;
2435 		default:
2436 			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2437 			return check_condition_result;
2438 		}
2439 	} else {
2440 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2441 		return check_condition_result;
2442 	}
2443 	len = min(get_unaligned_be16(arr + 2) + 4, alloc_len);
2444 	return fill_from_dev_buffer(scp, arr,
2445 		    min(len, SDEBUG_MAX_INQ_ARR_SZ));
2446 }
2447 
2448 static int check_device_access_params(struct scsi_cmnd *scp,
2449 				      unsigned long long lba, unsigned int num)
2450 {
2451 	if (lba + num > sdebug_capacity) {
2452 		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2453 		return check_condition_result;
2454 	}
2455 	/* transfer length excessive (tie in to block limits VPD page) */
2456 	if (num > sdebug_store_sectors) {
2457 		/* needs work to find which cdb byte 'num' comes from */
2458 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2459 		return check_condition_result;
2460 	}
2461 	return 0;
2462 }
2463 
2464 /* Returns number of bytes copied or -1 if error. */
2465 static int do_device_access(struct scsi_cmnd *scmd, u32 sg_skip, u64 lba,
2466 			    u32 num, bool do_write)
2467 {
2468 	int ret;
2469 	u64 block, rest = 0;
2470 	struct scsi_data_buffer *sdb;
2471 	enum dma_data_direction dir;
2472 
2473 	if (do_write) {
2474 		sdb = scsi_out(scmd);
2475 		dir = DMA_TO_DEVICE;
2476 	} else {
2477 		sdb = scsi_in(scmd);
2478 		dir = DMA_FROM_DEVICE;
2479 	}
2480 
2481 	if (!sdb->length)
2482 		return 0;
2483 	if (!(scsi_bidi_cmnd(scmd) || scmd->sc_data_direction == dir))
2484 		return -1;
2485 
2486 	block = do_div(lba, sdebug_store_sectors);
2487 	if (block + num > sdebug_store_sectors)
2488 		rest = block + num - sdebug_store_sectors;
2489 
2490 	ret = sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
2491 		   fake_storep + (block * sdebug_sector_size),
2492 		   (num - rest) * sdebug_sector_size, sg_skip, do_write);
2493 	if (ret != (num - rest) * sdebug_sector_size)
2494 		return ret;
2495 
2496 	if (rest) {
2497 		ret += sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
2498 			    fake_storep, rest * sdebug_sector_size,
2499 			    sg_skip + ((num - rest) * sdebug_sector_size),
2500 			    do_write);
2501 	}
2502 
2503 	return ret;
2504 }
2505 
2506 /* If fake_store(lba,num) compares equal to arr(num), then copy top half of
2507  * arr into fake_store(lba,num) and return true. If comparison fails then
2508  * return false. */
2509 static bool comp_write_worker(u64 lba, u32 num, const u8 *arr)
2510 {
2511 	bool res;
2512 	u64 block, rest = 0;
2513 	u32 store_blks = sdebug_store_sectors;
2514 	u32 lb_size = sdebug_sector_size;
2515 
2516 	block = do_div(lba, store_blks);
2517 	if (block + num > store_blks)
2518 		rest = block + num - store_blks;
2519 
2520 	res = !memcmp(fake_storep + (block * lb_size), arr,
2521 		      (num - rest) * lb_size);
2522 	if (!res)
2523 		return res;
2524 	if (rest)
2525 		res = memcmp(fake_storep, arr + ((num - rest) * lb_size),
2526 			     rest * lb_size);
2527 	if (!res)
2528 		return res;
2529 	arr += num * lb_size;
2530 	memcpy(fake_storep + (block * lb_size), arr, (num - rest) * lb_size);
2531 	if (rest)
2532 		memcpy(fake_storep, arr + ((num - rest) * lb_size),
2533 		       rest * lb_size);
2534 	return res;
2535 }
2536 
2537 static __be16 dif_compute_csum(const void *buf, int len)
2538 {
2539 	__be16 csum;
2540 
2541 	if (sdebug_guard)
2542 		csum = (__force __be16)ip_compute_csum(buf, len);
2543 	else
2544 		csum = cpu_to_be16(crc_t10dif(buf, len));
2545 
2546 	return csum;
2547 }
2548 
2549 static int dif_verify(struct t10_pi_tuple *sdt, const void *data,
2550 		      sector_t sector, u32 ei_lba)
2551 {
2552 	__be16 csum = dif_compute_csum(data, sdebug_sector_size);
2553 
2554 	if (sdt->guard_tag != csum) {
2555 		pr_err("GUARD check failed on sector %lu rcvd 0x%04x, data 0x%04x\n",
2556 			(unsigned long)sector,
2557 			be16_to_cpu(sdt->guard_tag),
2558 			be16_to_cpu(csum));
2559 		return 0x01;
2560 	}
2561 	if (sdebug_dif == T10_PI_TYPE1_PROTECTION &&
2562 	    be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
2563 		pr_err("REF check failed on sector %lu\n",
2564 			(unsigned long)sector);
2565 		return 0x03;
2566 	}
2567 	if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
2568 	    be32_to_cpu(sdt->ref_tag) != ei_lba) {
2569 		pr_err("REF check failed on sector %lu\n",
2570 			(unsigned long)sector);
2571 		return 0x03;
2572 	}
2573 	return 0;
2574 }
2575 
2576 static void dif_copy_prot(struct scsi_cmnd *SCpnt, sector_t sector,
2577 			  unsigned int sectors, bool read)
2578 {
2579 	size_t resid;
2580 	void *paddr;
2581 	const void *dif_store_end = dif_storep + sdebug_store_sectors;
2582 	struct sg_mapping_iter miter;
2583 
2584 	/* Bytes of protection data to copy into sgl */
2585 	resid = sectors * sizeof(*dif_storep);
2586 
2587 	sg_miter_start(&miter, scsi_prot_sglist(SCpnt),
2588 			scsi_prot_sg_count(SCpnt), SG_MITER_ATOMIC |
2589 			(read ? SG_MITER_TO_SG : SG_MITER_FROM_SG));
2590 
2591 	while (sg_miter_next(&miter) && resid > 0) {
2592 		size_t len = min(miter.length, resid);
2593 		void *start = dif_store(sector);
2594 		size_t rest = 0;
2595 
2596 		if (dif_store_end < start + len)
2597 			rest = start + len - dif_store_end;
2598 
2599 		paddr = miter.addr;
2600 
2601 		if (read)
2602 			memcpy(paddr, start, len - rest);
2603 		else
2604 			memcpy(start, paddr, len - rest);
2605 
2606 		if (rest) {
2607 			if (read)
2608 				memcpy(paddr + len - rest, dif_storep, rest);
2609 			else
2610 				memcpy(dif_storep, paddr + len - rest, rest);
2611 		}
2612 
2613 		sector += len / sizeof(*dif_storep);
2614 		resid -= len;
2615 	}
2616 	sg_miter_stop(&miter);
2617 }
2618 
2619 static int prot_verify_read(struct scsi_cmnd *SCpnt, sector_t start_sec,
2620 			    unsigned int sectors, u32 ei_lba)
2621 {
2622 	unsigned int i;
2623 	struct t10_pi_tuple *sdt;
2624 	sector_t sector;
2625 
2626 	for (i = 0; i < sectors; i++, ei_lba++) {
2627 		int ret;
2628 
2629 		sector = start_sec + i;
2630 		sdt = dif_store(sector);
2631 
2632 		if (sdt->app_tag == cpu_to_be16(0xffff))
2633 			continue;
2634 
2635 		ret = dif_verify(sdt, fake_store(sector), sector, ei_lba);
2636 		if (ret) {
2637 			dif_errors++;
2638 			return ret;
2639 		}
2640 	}
2641 
2642 	dif_copy_prot(SCpnt, start_sec, sectors, true);
2643 	dix_reads++;
2644 
2645 	return 0;
2646 }
2647 
2648 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2649 {
2650 	u8 *cmd = scp->cmnd;
2651 	struct sdebug_queued_cmd *sqcp;
2652 	u64 lba;
2653 	u32 num;
2654 	u32 ei_lba;
2655 	unsigned long iflags;
2656 	int ret;
2657 	bool check_prot;
2658 
2659 	switch (cmd[0]) {
2660 	case READ_16:
2661 		ei_lba = 0;
2662 		lba = get_unaligned_be64(cmd + 2);
2663 		num = get_unaligned_be32(cmd + 10);
2664 		check_prot = true;
2665 		break;
2666 	case READ_10:
2667 		ei_lba = 0;
2668 		lba = get_unaligned_be32(cmd + 2);
2669 		num = get_unaligned_be16(cmd + 7);
2670 		check_prot = true;
2671 		break;
2672 	case READ_6:
2673 		ei_lba = 0;
2674 		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2675 		      (u32)(cmd[1] & 0x1f) << 16;
2676 		num = (0 == cmd[4]) ? 256 : cmd[4];
2677 		check_prot = true;
2678 		break;
2679 	case READ_12:
2680 		ei_lba = 0;
2681 		lba = get_unaligned_be32(cmd + 2);
2682 		num = get_unaligned_be32(cmd + 6);
2683 		check_prot = true;
2684 		break;
2685 	case XDWRITEREAD_10:
2686 		ei_lba = 0;
2687 		lba = get_unaligned_be32(cmd + 2);
2688 		num = get_unaligned_be16(cmd + 7);
2689 		check_prot = false;
2690 		break;
2691 	default:	/* assume READ(32) */
2692 		lba = get_unaligned_be64(cmd + 12);
2693 		ei_lba = get_unaligned_be32(cmd + 20);
2694 		num = get_unaligned_be32(cmd + 28);
2695 		check_prot = false;
2696 		break;
2697 	}
2698 	if (unlikely(have_dif_prot && check_prot)) {
2699 		if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
2700 		    (cmd[1] & 0xe0)) {
2701 			mk_sense_invalid_opcode(scp);
2702 			return check_condition_result;
2703 		}
2704 		if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
2705 		     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
2706 		    (cmd[1] & 0xe0) == 0)
2707 			sdev_printk(KERN_ERR, scp->device, "Unprotected RD "
2708 				    "to DIF device\n");
2709 	}
2710 	if (unlikely(sdebug_any_injecting_opt)) {
2711 		sqcp = (struct sdebug_queued_cmd *)scp->host_scribble;
2712 
2713 		if (sqcp) {
2714 			if (sqcp->inj_short)
2715 				num /= 2;
2716 		}
2717 	} else
2718 		sqcp = NULL;
2719 
2720 	/* inline check_device_access_params() */
2721 	if (unlikely(lba + num > sdebug_capacity)) {
2722 		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2723 		return check_condition_result;
2724 	}
2725 	/* transfer length excessive (tie in to block limits VPD page) */
2726 	if (unlikely(num > sdebug_store_sectors)) {
2727 		/* needs work to find which cdb byte 'num' comes from */
2728 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2729 		return check_condition_result;
2730 	}
2731 
2732 	if (unlikely((SDEBUG_OPT_MEDIUM_ERR & sdebug_opts) &&
2733 		     (lba <= (sdebug_medium_error_start + sdebug_medium_error_count - 1)) &&
2734 		     ((lba + num) > sdebug_medium_error_start))) {
2735 		/* claim unrecoverable read error */
2736 		mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
2737 		/* set info field and valid bit for fixed descriptor */
2738 		if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
2739 			scp->sense_buffer[0] |= 0x80;	/* Valid bit */
2740 			ret = (lba < OPT_MEDIUM_ERR_ADDR)
2741 			      ? OPT_MEDIUM_ERR_ADDR : (int)lba;
2742 			put_unaligned_be32(ret, scp->sense_buffer + 3);
2743 		}
2744 		scsi_set_resid(scp, scsi_bufflen(scp));
2745 		return check_condition_result;
2746 	}
2747 
2748 	read_lock_irqsave(&atomic_rw, iflags);
2749 
2750 	/* DIX + T10 DIF */
2751 	if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
2752 		int prot_ret = prot_verify_read(scp, lba, num, ei_lba);
2753 
2754 		if (prot_ret) {
2755 			read_unlock_irqrestore(&atomic_rw, iflags);
2756 			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, prot_ret);
2757 			return illegal_condition_result;
2758 		}
2759 	}
2760 
2761 	ret = do_device_access(scp, 0, lba, num, false);
2762 	read_unlock_irqrestore(&atomic_rw, iflags);
2763 	if (unlikely(ret == -1))
2764 		return DID_ERROR << 16;
2765 
2766 	scsi_in(scp)->resid = scsi_bufflen(scp) - ret;
2767 
2768 	if (unlikely(sqcp)) {
2769 		if (sqcp->inj_recovered) {
2770 			mk_sense_buffer(scp, RECOVERED_ERROR,
2771 					THRESHOLD_EXCEEDED, 0);
2772 			return check_condition_result;
2773 		} else if (sqcp->inj_transport) {
2774 			mk_sense_buffer(scp, ABORTED_COMMAND,
2775 					TRANSPORT_PROBLEM, ACK_NAK_TO);
2776 			return check_condition_result;
2777 		} else if (sqcp->inj_dif) {
2778 			/* Logical block guard check failed */
2779 			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
2780 			return illegal_condition_result;
2781 		} else if (sqcp->inj_dix) {
2782 			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
2783 			return illegal_condition_result;
2784 		}
2785 	}
2786 	return 0;
2787 }
2788 
2789 static void dump_sector(unsigned char *buf, int len)
2790 {
2791 	int i, j, n;
2792 
2793 	pr_err(">>> Sector Dump <<<\n");
2794 	for (i = 0 ; i < len ; i += 16) {
2795 		char b[128];
2796 
2797 		for (j = 0, n = 0; j < 16; j++) {
2798 			unsigned char c = buf[i+j];
2799 
2800 			if (c >= 0x20 && c < 0x7e)
2801 				n += scnprintf(b + n, sizeof(b) - n,
2802 					       " %c ", buf[i+j]);
2803 			else
2804 				n += scnprintf(b + n, sizeof(b) - n,
2805 					       "%02x ", buf[i+j]);
2806 		}
2807 		pr_err("%04d: %s\n", i, b);
2808 	}
2809 }
2810 
2811 static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
2812 			     unsigned int sectors, u32 ei_lba)
2813 {
2814 	int ret;
2815 	struct t10_pi_tuple *sdt;
2816 	void *daddr;
2817 	sector_t sector = start_sec;
2818 	int ppage_offset;
2819 	int dpage_offset;
2820 	struct sg_mapping_iter diter;
2821 	struct sg_mapping_iter piter;
2822 
2823 	BUG_ON(scsi_sg_count(SCpnt) == 0);
2824 	BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
2825 
2826 	sg_miter_start(&piter, scsi_prot_sglist(SCpnt),
2827 			scsi_prot_sg_count(SCpnt),
2828 			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2829 	sg_miter_start(&diter, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
2830 			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2831 
2832 	/* For each protection page */
2833 	while (sg_miter_next(&piter)) {
2834 		dpage_offset = 0;
2835 		if (WARN_ON(!sg_miter_next(&diter))) {
2836 			ret = 0x01;
2837 			goto out;
2838 		}
2839 
2840 		for (ppage_offset = 0; ppage_offset < piter.length;
2841 		     ppage_offset += sizeof(struct t10_pi_tuple)) {
2842 			/* If we're at the end of the current
2843 			 * data page advance to the next one
2844 			 */
2845 			if (dpage_offset >= diter.length) {
2846 				if (WARN_ON(!sg_miter_next(&diter))) {
2847 					ret = 0x01;
2848 					goto out;
2849 				}
2850 				dpage_offset = 0;
2851 			}
2852 
2853 			sdt = piter.addr + ppage_offset;
2854 			daddr = diter.addr + dpage_offset;
2855 
2856 			ret = dif_verify(sdt, daddr, sector, ei_lba);
2857 			if (ret) {
2858 				dump_sector(daddr, sdebug_sector_size);
2859 				goto out;
2860 			}
2861 
2862 			sector++;
2863 			ei_lba++;
2864 			dpage_offset += sdebug_sector_size;
2865 		}
2866 		diter.consumed = dpage_offset;
2867 		sg_miter_stop(&diter);
2868 	}
2869 	sg_miter_stop(&piter);
2870 
2871 	dif_copy_prot(SCpnt, start_sec, sectors, false);
2872 	dix_writes++;
2873 
2874 	return 0;
2875 
2876 out:
2877 	dif_errors++;
2878 	sg_miter_stop(&diter);
2879 	sg_miter_stop(&piter);
2880 	return ret;
2881 }
2882 
2883 static unsigned long lba_to_map_index(sector_t lba)
2884 {
2885 	if (sdebug_unmap_alignment)
2886 		lba += sdebug_unmap_granularity - sdebug_unmap_alignment;
2887 	sector_div(lba, sdebug_unmap_granularity);
2888 	return lba;
2889 }
2890 
2891 static sector_t map_index_to_lba(unsigned long index)
2892 {
2893 	sector_t lba = index * sdebug_unmap_granularity;
2894 
2895 	if (sdebug_unmap_alignment)
2896 		lba -= sdebug_unmap_granularity - sdebug_unmap_alignment;
2897 	return lba;
2898 }
2899 
2900 static unsigned int map_state(sector_t lba, unsigned int *num)
2901 {
2902 	sector_t end;
2903 	unsigned int mapped;
2904 	unsigned long index;
2905 	unsigned long next;
2906 
2907 	index = lba_to_map_index(lba);
2908 	mapped = test_bit(index, map_storep);
2909 
2910 	if (mapped)
2911 		next = find_next_zero_bit(map_storep, map_size, index);
2912 	else
2913 		next = find_next_bit(map_storep, map_size, index);
2914 
2915 	end = min_t(sector_t, sdebug_store_sectors,  map_index_to_lba(next));
2916 	*num = end - lba;
2917 	return mapped;
2918 }
2919 
2920 static void map_region(sector_t lba, unsigned int len)
2921 {
2922 	sector_t end = lba + len;
2923 
2924 	while (lba < end) {
2925 		unsigned long index = lba_to_map_index(lba);
2926 
2927 		if (index < map_size)
2928 			set_bit(index, map_storep);
2929 
2930 		lba = map_index_to_lba(index + 1);
2931 	}
2932 }
2933 
2934 static void unmap_region(sector_t lba, unsigned int len)
2935 {
2936 	sector_t end = lba + len;
2937 
2938 	while (lba < end) {
2939 		unsigned long index = lba_to_map_index(lba);
2940 
2941 		if (lba == map_index_to_lba(index) &&
2942 		    lba + sdebug_unmap_granularity <= end &&
2943 		    index < map_size) {
2944 			clear_bit(index, map_storep);
2945 			if (sdebug_lbprz) {  /* for LBPRZ=2 return 0xff_s */
2946 				memset(fake_storep +
2947 				       lba * sdebug_sector_size,
2948 				       (sdebug_lbprz & 1) ? 0 : 0xff,
2949 				       sdebug_sector_size *
2950 				       sdebug_unmap_granularity);
2951 			}
2952 			if (dif_storep) {
2953 				memset(dif_storep + lba, 0xff,
2954 				       sizeof(*dif_storep) *
2955 				       sdebug_unmap_granularity);
2956 			}
2957 		}
2958 		lba = map_index_to_lba(index + 1);
2959 	}
2960 }
2961 
2962 static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2963 {
2964 	u8 *cmd = scp->cmnd;
2965 	u64 lba;
2966 	u32 num;
2967 	u32 ei_lba;
2968 	unsigned long iflags;
2969 	int ret;
2970 	bool check_prot;
2971 
2972 	switch (cmd[0]) {
2973 	case WRITE_16:
2974 		ei_lba = 0;
2975 		lba = get_unaligned_be64(cmd + 2);
2976 		num = get_unaligned_be32(cmd + 10);
2977 		check_prot = true;
2978 		break;
2979 	case WRITE_10:
2980 		ei_lba = 0;
2981 		lba = get_unaligned_be32(cmd + 2);
2982 		num = get_unaligned_be16(cmd + 7);
2983 		check_prot = true;
2984 		break;
2985 	case WRITE_6:
2986 		ei_lba = 0;
2987 		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2988 		      (u32)(cmd[1] & 0x1f) << 16;
2989 		num = (0 == cmd[4]) ? 256 : cmd[4];
2990 		check_prot = true;
2991 		break;
2992 	case WRITE_12:
2993 		ei_lba = 0;
2994 		lba = get_unaligned_be32(cmd + 2);
2995 		num = get_unaligned_be32(cmd + 6);
2996 		check_prot = true;
2997 		break;
2998 	case 0x53:	/* XDWRITEREAD(10) */
2999 		ei_lba = 0;
3000 		lba = get_unaligned_be32(cmd + 2);
3001 		num = get_unaligned_be16(cmd + 7);
3002 		check_prot = false;
3003 		break;
3004 	default:	/* assume WRITE(32) */
3005 		lba = get_unaligned_be64(cmd + 12);
3006 		ei_lba = get_unaligned_be32(cmd + 20);
3007 		num = get_unaligned_be32(cmd + 28);
3008 		check_prot = false;
3009 		break;
3010 	}
3011 	if (unlikely(have_dif_prot && check_prot)) {
3012 		if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3013 		    (cmd[1] & 0xe0)) {
3014 			mk_sense_invalid_opcode(scp);
3015 			return check_condition_result;
3016 		}
3017 		if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3018 		     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3019 		    (cmd[1] & 0xe0) == 0)
3020 			sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
3021 				    "to DIF device\n");
3022 	}
3023 
3024 	/* inline check_device_access_params() */
3025 	if (unlikely(lba + num > sdebug_capacity)) {
3026 		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3027 		return check_condition_result;
3028 	}
3029 	/* transfer length excessive (tie in to block limits VPD page) */
3030 	if (unlikely(num > sdebug_store_sectors)) {
3031 		/* needs work to find which cdb byte 'num' comes from */
3032 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3033 		return check_condition_result;
3034 	}
3035 
3036 	write_lock_irqsave(&atomic_rw, iflags);
3037 
3038 	/* DIX + T10 DIF */
3039 	if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
3040 		int prot_ret = prot_verify_write(scp, lba, num, ei_lba);
3041 
3042 		if (prot_ret) {
3043 			write_unlock_irqrestore(&atomic_rw, iflags);
3044 			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, prot_ret);
3045 			return illegal_condition_result;
3046 		}
3047 	}
3048 
3049 	ret = do_device_access(scp, 0, lba, num, true);
3050 	if (unlikely(scsi_debug_lbp()))
3051 		map_region(lba, num);
3052 	write_unlock_irqrestore(&atomic_rw, iflags);
3053 	if (unlikely(-1 == ret))
3054 		return DID_ERROR << 16;
3055 	else if (unlikely(sdebug_verbose &&
3056 			  (ret < (num * sdebug_sector_size))))
3057 		sdev_printk(KERN_INFO, scp->device,
3058 			    "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
3059 			    my_name, num * sdebug_sector_size, ret);
3060 
3061 	if (unlikely(sdebug_any_injecting_opt)) {
3062 		struct sdebug_queued_cmd *sqcp =
3063 				(struct sdebug_queued_cmd *)scp->host_scribble;
3064 
3065 		if (sqcp) {
3066 			if (sqcp->inj_recovered) {
3067 				mk_sense_buffer(scp, RECOVERED_ERROR,
3068 						THRESHOLD_EXCEEDED, 0);
3069 				return check_condition_result;
3070 			} else if (sqcp->inj_dif) {
3071 				/* Logical block guard check failed */
3072 				mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3073 				return illegal_condition_result;
3074 			} else if (sqcp->inj_dix) {
3075 				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3076 				return illegal_condition_result;
3077 			}
3078 		}
3079 	}
3080 	return 0;
3081 }
3082 
3083 /*
3084  * T10 has only specified WRITE SCATTERED(16) and WRITE SCATTERED(32).
3085  * No READ GATHERED yet (requires bidi or long cdb holding gather list).
3086  */
3087 static int resp_write_scat(struct scsi_cmnd *scp,
3088 			   struct sdebug_dev_info *devip)
3089 {
3090 	u8 *cmd = scp->cmnd;
3091 	u8 *lrdp = NULL;
3092 	u8 *up;
3093 	u8 wrprotect;
3094 	u16 lbdof, num_lrd, k;
3095 	u32 num, num_by, bt_len, lbdof_blen, sg_off, cum_lb;
3096 	u32 lb_size = sdebug_sector_size;
3097 	u32 ei_lba;
3098 	u64 lba;
3099 	unsigned long iflags;
3100 	int ret, res;
3101 	bool is_16;
3102 	static const u32 lrd_size = 32; /* + parameter list header size */
3103 
3104 	if (cmd[0] == VARIABLE_LENGTH_CMD) {
3105 		is_16 = false;
3106 		wrprotect = (cmd[10] >> 5) & 0x7;
3107 		lbdof = get_unaligned_be16(cmd + 12);
3108 		num_lrd = get_unaligned_be16(cmd + 16);
3109 		bt_len = get_unaligned_be32(cmd + 28);
3110 	} else {        /* that leaves WRITE SCATTERED(16) */
3111 		is_16 = true;
3112 		wrprotect = (cmd[2] >> 5) & 0x7;
3113 		lbdof = get_unaligned_be16(cmd + 4);
3114 		num_lrd = get_unaligned_be16(cmd + 8);
3115 		bt_len = get_unaligned_be32(cmd + 10);
3116 		if (unlikely(have_dif_prot)) {
3117 			if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3118 			    wrprotect) {
3119 				mk_sense_invalid_opcode(scp);
3120 				return illegal_condition_result;
3121 			}
3122 			if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3123 			     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3124 			     wrprotect == 0)
3125 				sdev_printk(KERN_ERR, scp->device,
3126 					    "Unprotected WR to DIF device\n");
3127 		}
3128 	}
3129 	if ((num_lrd == 0) || (bt_len == 0))
3130 		return 0;       /* T10 says these do-nothings are not errors */
3131 	if (lbdof == 0) {
3132 		if (sdebug_verbose)
3133 			sdev_printk(KERN_INFO, scp->device,
3134 				"%s: %s: LB Data Offset field bad\n",
3135 				my_name, __func__);
3136 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3137 		return illegal_condition_result;
3138 	}
3139 	lbdof_blen = lbdof * lb_size;
3140 	if ((lrd_size + (num_lrd * lrd_size)) > lbdof_blen) {
3141 		if (sdebug_verbose)
3142 			sdev_printk(KERN_INFO, scp->device,
3143 				"%s: %s: LBA range descriptors don't fit\n",
3144 				my_name, __func__);
3145 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3146 		return illegal_condition_result;
3147 	}
3148 	lrdp = kzalloc(lbdof_blen, GFP_ATOMIC);
3149 	if (lrdp == NULL)
3150 		return SCSI_MLQUEUE_HOST_BUSY;
3151 	if (sdebug_verbose)
3152 		sdev_printk(KERN_INFO, scp->device,
3153 			"%s: %s: Fetch header+scatter_list, lbdof_blen=%u\n",
3154 			my_name, __func__, lbdof_blen);
3155 	res = fetch_to_dev_buffer(scp, lrdp, lbdof_blen);
3156 	if (res == -1) {
3157 		ret = DID_ERROR << 16;
3158 		goto err_out;
3159 	}
3160 
3161 	write_lock_irqsave(&atomic_rw, iflags);
3162 	sg_off = lbdof_blen;
3163 	/* Spec says Buffer xfer Length field in number of LBs in dout */
3164 	cum_lb = 0;
3165 	for (k = 0, up = lrdp + lrd_size; k < num_lrd; ++k, up += lrd_size) {
3166 		lba = get_unaligned_be64(up + 0);
3167 		num = get_unaligned_be32(up + 8);
3168 		if (sdebug_verbose)
3169 			sdev_printk(KERN_INFO, scp->device,
3170 				"%s: %s: k=%d  LBA=0x%llx num=%u  sg_off=%u\n",
3171 				my_name, __func__, k, lba, num, sg_off);
3172 		if (num == 0)
3173 			continue;
3174 		ret = check_device_access_params(scp, lba, num);
3175 		if (ret)
3176 			goto err_out_unlock;
3177 		num_by = num * lb_size;
3178 		ei_lba = is_16 ? 0 : get_unaligned_be32(up + 12);
3179 
3180 		if ((cum_lb + num) > bt_len) {
3181 			if (sdebug_verbose)
3182 				sdev_printk(KERN_INFO, scp->device,
3183 				    "%s: %s: sum of blocks > data provided\n",
3184 				    my_name, __func__);
3185 			mk_sense_buffer(scp, ILLEGAL_REQUEST, WRITE_ERROR_ASC,
3186 					0);
3187 			ret = illegal_condition_result;
3188 			goto err_out_unlock;
3189 		}
3190 
3191 		/* DIX + T10 DIF */
3192 		if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
3193 			int prot_ret = prot_verify_write(scp, lba, num,
3194 							 ei_lba);
3195 
3196 			if (prot_ret) {
3197 				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10,
3198 						prot_ret);
3199 				ret = illegal_condition_result;
3200 				goto err_out_unlock;
3201 			}
3202 		}
3203 
3204 		ret = do_device_access(scp, sg_off, lba, num, true);
3205 		if (unlikely(scsi_debug_lbp()))
3206 			map_region(lba, num);
3207 		if (unlikely(-1 == ret)) {
3208 			ret = DID_ERROR << 16;
3209 			goto err_out_unlock;
3210 		} else if (unlikely(sdebug_verbose && (ret < num_by)))
3211 			sdev_printk(KERN_INFO, scp->device,
3212 			    "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
3213 			    my_name, num_by, ret);
3214 
3215 		if (unlikely(sdebug_any_injecting_opt)) {
3216 			struct sdebug_queued_cmd *sqcp =
3217 				(struct sdebug_queued_cmd *)scp->host_scribble;
3218 
3219 			if (sqcp) {
3220 				if (sqcp->inj_recovered) {
3221 					mk_sense_buffer(scp, RECOVERED_ERROR,
3222 							THRESHOLD_EXCEEDED, 0);
3223 					ret = illegal_condition_result;
3224 					goto err_out_unlock;
3225 				} else if (sqcp->inj_dif) {
3226 					/* Logical block guard check failed */
3227 					mk_sense_buffer(scp, ABORTED_COMMAND,
3228 							0x10, 1);
3229 					ret = illegal_condition_result;
3230 					goto err_out_unlock;
3231 				} else if (sqcp->inj_dix) {
3232 					mk_sense_buffer(scp, ILLEGAL_REQUEST,
3233 							0x10, 1);
3234 					ret = illegal_condition_result;
3235 					goto err_out_unlock;
3236 				}
3237 			}
3238 		}
3239 		sg_off += num_by;
3240 		cum_lb += num;
3241 	}
3242 	ret = 0;
3243 err_out_unlock:
3244 	write_unlock_irqrestore(&atomic_rw, iflags);
3245 err_out:
3246 	kfree(lrdp);
3247 	return ret;
3248 }
3249 
3250 static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num,
3251 			   u32 ei_lba, bool unmap, bool ndob)
3252 {
3253 	unsigned long iflags;
3254 	unsigned long long i;
3255 	int ret;
3256 	u64 lba_off;
3257 
3258 	ret = check_device_access_params(scp, lba, num);
3259 	if (ret)
3260 		return ret;
3261 
3262 	write_lock_irqsave(&atomic_rw, iflags);
3263 
3264 	if (unmap && scsi_debug_lbp()) {
3265 		unmap_region(lba, num);
3266 		goto out;
3267 	}
3268 
3269 	lba_off = lba * sdebug_sector_size;
3270 	/* if ndob then zero 1 logical block, else fetch 1 logical block */
3271 	if (ndob) {
3272 		memset(fake_storep + lba_off, 0, sdebug_sector_size);
3273 		ret = 0;
3274 	} else
3275 		ret = fetch_to_dev_buffer(scp, fake_storep + lba_off,
3276 					  sdebug_sector_size);
3277 
3278 	if (-1 == ret) {
3279 		write_unlock_irqrestore(&atomic_rw, iflags);
3280 		return DID_ERROR << 16;
3281 	} else if (sdebug_verbose && !ndob && (ret < sdebug_sector_size))
3282 		sdev_printk(KERN_INFO, scp->device,
3283 			    "%s: %s: lb size=%u, IO sent=%d bytes\n",
3284 			    my_name, "write same",
3285 			    sdebug_sector_size, ret);
3286 
3287 	/* Copy first sector to remaining blocks */
3288 	for (i = 1 ; i < num ; i++)
3289 		memcpy(fake_storep + ((lba + i) * sdebug_sector_size),
3290 		       fake_storep + lba_off,
3291 		       sdebug_sector_size);
3292 
3293 	if (scsi_debug_lbp())
3294 		map_region(lba, num);
3295 out:
3296 	write_unlock_irqrestore(&atomic_rw, iflags);
3297 
3298 	return 0;
3299 }
3300 
3301 static int resp_write_same_10(struct scsi_cmnd *scp,
3302 			      struct sdebug_dev_info *devip)
3303 {
3304 	u8 *cmd = scp->cmnd;
3305 	u32 lba;
3306 	u16 num;
3307 	u32 ei_lba = 0;
3308 	bool unmap = false;
3309 
3310 	if (cmd[1] & 0x8) {
3311 		if (sdebug_lbpws10 == 0) {
3312 			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3313 			return check_condition_result;
3314 		} else
3315 			unmap = true;
3316 	}
3317 	lba = get_unaligned_be32(cmd + 2);
3318 	num = get_unaligned_be16(cmd + 7);
3319 	if (num > sdebug_write_same_length) {
3320 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3321 		return check_condition_result;
3322 	}
3323 	return resp_write_same(scp, lba, num, ei_lba, unmap, false);
3324 }
3325 
3326 static int resp_write_same_16(struct scsi_cmnd *scp,
3327 			      struct sdebug_dev_info *devip)
3328 {
3329 	u8 *cmd = scp->cmnd;
3330 	u64 lba;
3331 	u32 num;
3332 	u32 ei_lba = 0;
3333 	bool unmap = false;
3334 	bool ndob = false;
3335 
3336 	if (cmd[1] & 0x8) {	/* UNMAP */
3337 		if (sdebug_lbpws == 0) {
3338 			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3339 			return check_condition_result;
3340 		} else
3341 			unmap = true;
3342 	}
3343 	if (cmd[1] & 0x1)  /* NDOB (no data-out buffer, assumes zeroes) */
3344 		ndob = true;
3345 	lba = get_unaligned_be64(cmd + 2);
3346 	num = get_unaligned_be32(cmd + 10);
3347 	if (num > sdebug_write_same_length) {
3348 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
3349 		return check_condition_result;
3350 	}
3351 	return resp_write_same(scp, lba, num, ei_lba, unmap, ndob);
3352 }
3353 
3354 /* Note the mode field is in the same position as the (lower) service action
3355  * field. For the Report supported operation codes command, SPC-4 suggests
3356  * each mode of this command should be reported separately; for future. */
3357 static int resp_write_buffer(struct scsi_cmnd *scp,
3358 			     struct sdebug_dev_info *devip)
3359 {
3360 	u8 *cmd = scp->cmnd;
3361 	struct scsi_device *sdp = scp->device;
3362 	struct sdebug_dev_info *dp;
3363 	u8 mode;
3364 
3365 	mode = cmd[1] & 0x1f;
3366 	switch (mode) {
3367 	case 0x4:	/* download microcode (MC) and activate (ACT) */
3368 		/* set UAs on this device only */
3369 		set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3370 		set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
3371 		break;
3372 	case 0x5:	/* download MC, save and ACT */
3373 		set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
3374 		break;
3375 	case 0x6:	/* download MC with offsets and ACT */
3376 		/* set UAs on most devices (LUs) in this target */
3377 		list_for_each_entry(dp,
3378 				    &devip->sdbg_host->dev_info_list,
3379 				    dev_list)
3380 			if (dp->target == sdp->id) {
3381 				set_bit(SDEBUG_UA_BUS_RESET, dp->uas_bm);
3382 				if (devip != dp)
3383 					set_bit(SDEBUG_UA_MICROCODE_CHANGED,
3384 						dp->uas_bm);
3385 			}
3386 		break;
3387 	case 0x7:	/* download MC with offsets, save, and ACT */
3388 		/* set UA on all devices (LUs) in this target */
3389 		list_for_each_entry(dp,
3390 				    &devip->sdbg_host->dev_info_list,
3391 				    dev_list)
3392 			if (dp->target == sdp->id)
3393 				set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET,
3394 					dp->uas_bm);
3395 		break;
3396 	default:
3397 		/* do nothing for this command for other mode values */
3398 		break;
3399 	}
3400 	return 0;
3401 }
3402 
3403 static int resp_comp_write(struct scsi_cmnd *scp,
3404 			   struct sdebug_dev_info *devip)
3405 {
3406 	u8 *cmd = scp->cmnd;
3407 	u8 *arr;
3408 	u8 *fake_storep_hold;
3409 	u64 lba;
3410 	u32 dnum;
3411 	u32 lb_size = sdebug_sector_size;
3412 	u8 num;
3413 	unsigned long iflags;
3414 	int ret;
3415 	int retval = 0;
3416 
3417 	lba = get_unaligned_be64(cmd + 2);
3418 	num = cmd[13];		/* 1 to a maximum of 255 logical blocks */
3419 	if (0 == num)
3420 		return 0;	/* degenerate case, not an error */
3421 	if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3422 	    (cmd[1] & 0xe0)) {
3423 		mk_sense_invalid_opcode(scp);
3424 		return check_condition_result;
3425 	}
3426 	if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3427 	     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3428 	    (cmd[1] & 0xe0) == 0)
3429 		sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
3430 			    "to DIF device\n");
3431 
3432 	/* inline check_device_access_params() */
3433 	if (lba + num > sdebug_capacity) {
3434 		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3435 		return check_condition_result;
3436 	}
3437 	/* transfer length excessive (tie in to block limits VPD page) */
3438 	if (num > sdebug_store_sectors) {
3439 		/* needs work to find which cdb byte 'num' comes from */
3440 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3441 		return check_condition_result;
3442 	}
3443 	dnum = 2 * num;
3444 	arr = kzalloc(dnum * lb_size, GFP_ATOMIC);
3445 	if (NULL == arr) {
3446 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3447 				INSUFF_RES_ASCQ);
3448 		return check_condition_result;
3449 	}
3450 
3451 	write_lock_irqsave(&atomic_rw, iflags);
3452 
3453 	/* trick do_device_access() to fetch both compare and write buffers
3454 	 * from data-in into arr. Safe (atomic) since write_lock held. */
3455 	fake_storep_hold = fake_storep;
3456 	fake_storep = arr;
3457 	ret = do_device_access(scp, 0, 0, dnum, true);
3458 	fake_storep = fake_storep_hold;
3459 	if (ret == -1) {
3460 		retval = DID_ERROR << 16;
3461 		goto cleanup;
3462 	} else if (sdebug_verbose && (ret < (dnum * lb_size)))
3463 		sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
3464 			    "indicated=%u, IO sent=%d bytes\n", my_name,
3465 			    dnum * lb_size, ret);
3466 	if (!comp_write_worker(lba, num, arr)) {
3467 		mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
3468 		retval = check_condition_result;
3469 		goto cleanup;
3470 	}
3471 	if (scsi_debug_lbp())
3472 		map_region(lba, num);
3473 cleanup:
3474 	write_unlock_irqrestore(&atomic_rw, iflags);
3475 	kfree(arr);
3476 	return retval;
3477 }
3478 
3479 struct unmap_block_desc {
3480 	__be64	lba;
3481 	__be32	blocks;
3482 	__be32	__reserved;
3483 };
3484 
3485 static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3486 {
3487 	unsigned char *buf;
3488 	struct unmap_block_desc *desc;
3489 	unsigned int i, payload_len, descriptors;
3490 	int ret;
3491 	unsigned long iflags;
3492 
3493 
3494 	if (!scsi_debug_lbp())
3495 		return 0;	/* fib and say its done */
3496 	payload_len = get_unaligned_be16(scp->cmnd + 7);
3497 	BUG_ON(scsi_bufflen(scp) != payload_len);
3498 
3499 	descriptors = (payload_len - 8) / 16;
3500 	if (descriptors > sdebug_unmap_max_desc) {
3501 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3502 		return check_condition_result;
3503 	}
3504 
3505 	buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
3506 	if (!buf) {
3507 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3508 				INSUFF_RES_ASCQ);
3509 		return check_condition_result;
3510 	}
3511 
3512 	scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
3513 
3514 	BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
3515 	BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
3516 
3517 	desc = (void *)&buf[8];
3518 
3519 	write_lock_irqsave(&atomic_rw, iflags);
3520 
3521 	for (i = 0 ; i < descriptors ; i++) {
3522 		unsigned long long lba = get_unaligned_be64(&desc[i].lba);
3523 		unsigned int num = get_unaligned_be32(&desc[i].blocks);
3524 
3525 		ret = check_device_access_params(scp, lba, num);
3526 		if (ret)
3527 			goto out;
3528 
3529 		unmap_region(lba, num);
3530 	}
3531 
3532 	ret = 0;
3533 
3534 out:
3535 	write_unlock_irqrestore(&atomic_rw, iflags);
3536 	kfree(buf);
3537 
3538 	return ret;
3539 }
3540 
3541 #define SDEBUG_GET_LBA_STATUS_LEN 32
3542 
3543 static int resp_get_lba_status(struct scsi_cmnd *scp,
3544 			       struct sdebug_dev_info *devip)
3545 {
3546 	u8 *cmd = scp->cmnd;
3547 	u64 lba;
3548 	u32 alloc_len, mapped, num;
3549 	u8 arr[SDEBUG_GET_LBA_STATUS_LEN];
3550 	int ret;
3551 
3552 	lba = get_unaligned_be64(cmd + 2);
3553 	alloc_len = get_unaligned_be32(cmd + 10);
3554 
3555 	if (alloc_len < 24)
3556 		return 0;
3557 
3558 	ret = check_device_access_params(scp, lba, 1);
3559 	if (ret)
3560 		return ret;
3561 
3562 	if (scsi_debug_lbp())
3563 		mapped = map_state(lba, &num);
3564 	else {
3565 		mapped = 1;
3566 		/* following just in case virtual_gb changed */
3567 		sdebug_capacity = get_sdebug_capacity();
3568 		if (sdebug_capacity - lba <= 0xffffffff)
3569 			num = sdebug_capacity - lba;
3570 		else
3571 			num = 0xffffffff;
3572 	}
3573 
3574 	memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
3575 	put_unaligned_be32(20, arr);		/* Parameter Data Length */
3576 	put_unaligned_be64(lba, arr + 8);	/* LBA */
3577 	put_unaligned_be32(num, arr + 16);	/* Number of blocks */
3578 	arr[20] = !mapped;		/* prov_stat=0: mapped; 1: dealloc */
3579 
3580 	return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
3581 }
3582 
3583 static int resp_sync_cache(struct scsi_cmnd *scp,
3584 			   struct sdebug_dev_info *devip)
3585 {
3586 	u64 lba;
3587 	u32 num_blocks;
3588 	u8 *cmd = scp->cmnd;
3589 
3590 	if (cmd[0] == SYNCHRONIZE_CACHE) {	/* 10 byte cdb */
3591 		lba = get_unaligned_be32(cmd + 2);
3592 		num_blocks = get_unaligned_be16(cmd + 7);
3593 	} else {				/* SYNCHRONIZE_CACHE(16) */
3594 		lba = get_unaligned_be64(cmd + 2);
3595 		num_blocks = get_unaligned_be32(cmd + 10);
3596 	}
3597 	if (lba + num_blocks > sdebug_capacity) {
3598 		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3599 		return check_condition_result;
3600 	}
3601 	return (cmd[1] & 0x2) ? SDEG_RES_IMMED_MASK : 0; /* check IMMED bit */
3602 }
3603 
3604 #define RL_BUCKET_ELEMS 8
3605 
3606 /* Even though each pseudo target has a REPORT LUNS "well known logical unit"
3607  * (W-LUN), the normal Linux scanning logic does not associate it with a
3608  * device (e.g. /dev/sg7). The following magic will make that association:
3609  *   "cd /sys/class/scsi_host/host<n> ; echo '- - 49409' > scan"
3610  * where <n> is a host number. If there are multiple targets in a host then
3611  * the above will associate a W-LUN to each target. To only get a W-LUN
3612  * for target 2, then use "echo '- 2 49409' > scan" .
3613  */
3614 static int resp_report_luns(struct scsi_cmnd *scp,
3615 			    struct sdebug_dev_info *devip)
3616 {
3617 	unsigned char *cmd = scp->cmnd;
3618 	unsigned int alloc_len;
3619 	unsigned char select_report;
3620 	u64 lun;
3621 	struct scsi_lun *lun_p;
3622 	u8 arr[RL_BUCKET_ELEMS * sizeof(struct scsi_lun)];
3623 	unsigned int lun_cnt;	/* normal LUN count (max: 256) */
3624 	unsigned int wlun_cnt;	/* report luns W-LUN count */
3625 	unsigned int tlun_cnt;	/* total LUN count */
3626 	unsigned int rlen;	/* response length (in bytes) */
3627 	int k, j, n, res;
3628 	unsigned int off_rsp = 0;
3629 	const int sz_lun = sizeof(struct scsi_lun);
3630 
3631 	clear_luns_changed_on_target(devip);
3632 
3633 	select_report = cmd[2];
3634 	alloc_len = get_unaligned_be32(cmd + 6);
3635 
3636 	if (alloc_len < 4) {
3637 		pr_err("alloc len too small %d\n", alloc_len);
3638 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
3639 		return check_condition_result;
3640 	}
3641 
3642 	switch (select_report) {
3643 	case 0:		/* all LUNs apart from W-LUNs */
3644 		lun_cnt = sdebug_max_luns;
3645 		wlun_cnt = 0;
3646 		break;
3647 	case 1:		/* only W-LUNs */
3648 		lun_cnt = 0;
3649 		wlun_cnt = 1;
3650 		break;
3651 	case 2:		/* all LUNs */
3652 		lun_cnt = sdebug_max_luns;
3653 		wlun_cnt = 1;
3654 		break;
3655 	case 0x10:	/* only administrative LUs */
3656 	case 0x11:	/* see SPC-5 */
3657 	case 0x12:	/* only subsiduary LUs owned by referenced LU */
3658 	default:
3659 		pr_debug("select report invalid %d\n", select_report);
3660 		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
3661 		return check_condition_result;
3662 	}
3663 
3664 	if (sdebug_no_lun_0 && (lun_cnt > 0))
3665 		--lun_cnt;
3666 
3667 	tlun_cnt = lun_cnt + wlun_cnt;
3668 	rlen = tlun_cnt * sz_lun;	/* excluding 8 byte header */
3669 	scsi_set_resid(scp, scsi_bufflen(scp));
3670 	pr_debug("select_report %d luns = %d wluns = %d no_lun0 %d\n",
3671 		 select_report, lun_cnt, wlun_cnt, sdebug_no_lun_0);
3672 
3673 	/* loops rely on sizeof response header same as sizeof lun (both 8) */
3674 	lun = sdebug_no_lun_0 ? 1 : 0;
3675 	for (k = 0, j = 0, res = 0; true; ++k, j = 0) {
3676 		memset(arr, 0, sizeof(arr));
3677 		lun_p = (struct scsi_lun *)&arr[0];
3678 		if (k == 0) {
3679 			put_unaligned_be32(rlen, &arr[0]);
3680 			++lun_p;
3681 			j = 1;
3682 		}
3683 		for ( ; j < RL_BUCKET_ELEMS; ++j, ++lun_p) {
3684 			if ((k * RL_BUCKET_ELEMS) + j > lun_cnt)
3685 				break;
3686 			int_to_scsilun(lun++, lun_p);
3687 		}
3688 		if (j < RL_BUCKET_ELEMS)
3689 			break;
3690 		n = j * sz_lun;
3691 		res = p_fill_from_dev_buffer(scp, arr, n, off_rsp);
3692 		if (res)
3693 			return res;
3694 		off_rsp += n;
3695 	}
3696 	if (wlun_cnt) {
3697 		int_to_scsilun(SCSI_W_LUN_REPORT_LUNS, lun_p);
3698 		++j;
3699 	}
3700 	if (j > 0)
3701 		res = p_fill_from_dev_buffer(scp, arr, j * sz_lun, off_rsp);
3702 	return res;
3703 }
3704 
3705 static int resp_xdwriteread(struct scsi_cmnd *scp, unsigned long long lba,
3706 			    unsigned int num, struct sdebug_dev_info *devip)
3707 {
3708 	int j;
3709 	unsigned char *kaddr, *buf;
3710 	unsigned int offset;
3711 	struct scsi_data_buffer *sdb = scsi_in(scp);
3712 	struct sg_mapping_iter miter;
3713 
3714 	/* better not to use temporary buffer. */
3715 	buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
3716 	if (!buf) {
3717 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3718 				INSUFF_RES_ASCQ);
3719 		return check_condition_result;
3720 	}
3721 
3722 	scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
3723 
3724 	offset = 0;
3725 	sg_miter_start(&miter, sdb->table.sgl, sdb->table.nents,
3726 			SG_MITER_ATOMIC | SG_MITER_TO_SG);
3727 
3728 	while (sg_miter_next(&miter)) {
3729 		kaddr = miter.addr;
3730 		for (j = 0; j < miter.length; j++)
3731 			*(kaddr + j) ^= *(buf + offset + j);
3732 
3733 		offset += miter.length;
3734 	}
3735 	sg_miter_stop(&miter);
3736 	kfree(buf);
3737 
3738 	return 0;
3739 }
3740 
3741 static int resp_xdwriteread_10(struct scsi_cmnd *scp,
3742 			       struct sdebug_dev_info *devip)
3743 {
3744 	u8 *cmd = scp->cmnd;
3745 	u64 lba;
3746 	u32 num;
3747 	int errsts;
3748 
3749 	if (!scsi_bidi_cmnd(scp)) {
3750 		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3751 				INSUFF_RES_ASCQ);
3752 		return check_condition_result;
3753 	}
3754 	errsts = resp_read_dt0(scp, devip);
3755 	if (errsts)
3756 		return errsts;
3757 	if (!(cmd[1] & 0x4)) {		/* DISABLE_WRITE is not set */
3758 		errsts = resp_write_dt0(scp, devip);
3759 		if (errsts)
3760 			return errsts;
3761 	}
3762 	lba = get_unaligned_be32(cmd + 2);
3763 	num = get_unaligned_be16(cmd + 7);
3764 	return resp_xdwriteread(scp, lba, num, devip);
3765 }
3766 
3767 static struct sdebug_queue *get_queue(struct scsi_cmnd *cmnd)
3768 {
3769 	u32 tag = blk_mq_unique_tag(cmnd->request);
3770 	u16 hwq = blk_mq_unique_tag_to_hwq(tag);
3771 
3772 	pr_debug("tag=%#x, hwq=%d\n", tag, hwq);
3773 	if (WARN_ON_ONCE(hwq >= submit_queues))
3774 		hwq = 0;
3775 	return sdebug_q_arr + hwq;
3776 }
3777 
3778 /* Queued (deferred) command completions converge here. */
3779 static void sdebug_q_cmd_complete(struct sdebug_defer *sd_dp)
3780 {
3781 	int qc_idx;
3782 	int retiring = 0;
3783 	unsigned long iflags;
3784 	struct sdebug_queue *sqp;
3785 	struct sdebug_queued_cmd *sqcp;
3786 	struct scsi_cmnd *scp;
3787 	struct sdebug_dev_info *devip;
3788 
3789 	sd_dp->defer_t = SDEB_DEFER_NONE;
3790 	qc_idx = sd_dp->qc_idx;
3791 	sqp = sdebug_q_arr + sd_dp->sqa_idx;
3792 	if (sdebug_statistics) {
3793 		atomic_inc(&sdebug_completions);
3794 		if (raw_smp_processor_id() != sd_dp->issuing_cpu)
3795 			atomic_inc(&sdebug_miss_cpus);
3796 	}
3797 	if (unlikely((qc_idx < 0) || (qc_idx >= SDEBUG_CANQUEUE))) {
3798 		pr_err("wild qc_idx=%d\n", qc_idx);
3799 		return;
3800 	}
3801 	spin_lock_irqsave(&sqp->qc_lock, iflags);
3802 	sqcp = &sqp->qc_arr[qc_idx];
3803 	scp = sqcp->a_cmnd;
3804 	if (unlikely(scp == NULL)) {
3805 		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3806 		pr_err("scp is NULL, sqa_idx=%d, qc_idx=%d\n",
3807 		       sd_dp->sqa_idx, qc_idx);
3808 		return;
3809 	}
3810 	devip = (struct sdebug_dev_info *)scp->device->hostdata;
3811 	if (likely(devip))
3812 		atomic_dec(&devip->num_in_q);
3813 	else
3814 		pr_err("devip=NULL\n");
3815 	if (unlikely(atomic_read(&retired_max_queue) > 0))
3816 		retiring = 1;
3817 
3818 	sqcp->a_cmnd = NULL;
3819 	if (unlikely(!test_and_clear_bit(qc_idx, sqp->in_use_bm))) {
3820 		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3821 		pr_err("Unexpected completion\n");
3822 		return;
3823 	}
3824 
3825 	if (unlikely(retiring)) {	/* user has reduced max_queue */
3826 		int k, retval;
3827 
3828 		retval = atomic_read(&retired_max_queue);
3829 		if (qc_idx >= retval) {
3830 			spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3831 			pr_err("index %d too large\n", retval);
3832 			return;
3833 		}
3834 		k = find_last_bit(sqp->in_use_bm, retval);
3835 		if ((k < sdebug_max_queue) || (k == retval))
3836 			atomic_set(&retired_max_queue, 0);
3837 		else
3838 			atomic_set(&retired_max_queue, k + 1);
3839 	}
3840 	spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3841 	scp->scsi_done(scp); /* callback to mid level */
3842 }
3843 
3844 /* When high resolution timer goes off this function is called. */
3845 static enum hrtimer_restart sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
3846 {
3847 	struct sdebug_defer *sd_dp = container_of(timer, struct sdebug_defer,
3848 						  hrt);
3849 	sdebug_q_cmd_complete(sd_dp);
3850 	return HRTIMER_NORESTART;
3851 }
3852 
3853 /* When work queue schedules work, it calls this function. */
3854 static void sdebug_q_cmd_wq_complete(struct work_struct *work)
3855 {
3856 	struct sdebug_defer *sd_dp = container_of(work, struct sdebug_defer,
3857 						  ew.work);
3858 	sdebug_q_cmd_complete(sd_dp);
3859 }
3860 
3861 static bool got_shared_uuid;
3862 static uuid_t shared_uuid;
3863 
3864 static struct sdebug_dev_info *sdebug_device_create(
3865 			struct sdebug_host_info *sdbg_host, gfp_t flags)
3866 {
3867 	struct sdebug_dev_info *devip;
3868 
3869 	devip = kzalloc(sizeof(*devip), flags);
3870 	if (devip) {
3871 		if (sdebug_uuid_ctl == 1)
3872 			uuid_gen(&devip->lu_name);
3873 		else if (sdebug_uuid_ctl == 2) {
3874 			if (got_shared_uuid)
3875 				devip->lu_name = shared_uuid;
3876 			else {
3877 				uuid_gen(&shared_uuid);
3878 				got_shared_uuid = true;
3879 				devip->lu_name = shared_uuid;
3880 			}
3881 		}
3882 		devip->sdbg_host = sdbg_host;
3883 		list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
3884 	}
3885 	return devip;
3886 }
3887 
3888 static struct sdebug_dev_info *find_build_dev_info(struct scsi_device *sdev)
3889 {
3890 	struct sdebug_host_info *sdbg_host;
3891 	struct sdebug_dev_info *open_devip = NULL;
3892 	struct sdebug_dev_info *devip;
3893 
3894 	sdbg_host = *(struct sdebug_host_info **)shost_priv(sdev->host);
3895 	if (!sdbg_host) {
3896 		pr_err("Host info NULL\n");
3897 		return NULL;
3898 	}
3899 	list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
3900 		if ((devip->used) && (devip->channel == sdev->channel) &&
3901 		    (devip->target == sdev->id) &&
3902 		    (devip->lun == sdev->lun))
3903 			return devip;
3904 		else {
3905 			if ((!devip->used) && (!open_devip))
3906 				open_devip = devip;
3907 		}
3908 	}
3909 	if (!open_devip) { /* try and make a new one */
3910 		open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
3911 		if (!open_devip) {
3912 			pr_err("out of memory at line %d\n", __LINE__);
3913 			return NULL;
3914 		}
3915 	}
3916 
3917 	open_devip->channel = sdev->channel;
3918 	open_devip->target = sdev->id;
3919 	open_devip->lun = sdev->lun;
3920 	open_devip->sdbg_host = sdbg_host;
3921 	atomic_set(&open_devip->num_in_q, 0);
3922 	set_bit(SDEBUG_UA_POR, open_devip->uas_bm);
3923 	open_devip->used = true;
3924 	return open_devip;
3925 }
3926 
3927 static int scsi_debug_slave_alloc(struct scsi_device *sdp)
3928 {
3929 	if (sdebug_verbose)
3930 		pr_info("slave_alloc <%u %u %u %llu>\n",
3931 		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3932 	blk_queue_flag_set(QUEUE_FLAG_BIDI, sdp->request_queue);
3933 	return 0;
3934 }
3935 
3936 static int scsi_debug_slave_configure(struct scsi_device *sdp)
3937 {
3938 	struct sdebug_dev_info *devip =
3939 			(struct sdebug_dev_info *)sdp->hostdata;
3940 
3941 	if (sdebug_verbose)
3942 		pr_info("slave_configure <%u %u %u %llu>\n",
3943 		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3944 	if (sdp->host->max_cmd_len != SDEBUG_MAX_CMD_LEN)
3945 		sdp->host->max_cmd_len = SDEBUG_MAX_CMD_LEN;
3946 	if (devip == NULL) {
3947 		devip = find_build_dev_info(sdp);
3948 		if (devip == NULL)
3949 			return 1;  /* no resources, will be marked offline */
3950 	}
3951 	sdp->hostdata = devip;
3952 	blk_queue_max_segment_size(sdp->request_queue, -1U);
3953 	if (sdebug_no_uld)
3954 		sdp->no_uld_attach = 1;
3955 	config_cdb_len(sdp);
3956 	return 0;
3957 }
3958 
3959 static void scsi_debug_slave_destroy(struct scsi_device *sdp)
3960 {
3961 	struct sdebug_dev_info *devip =
3962 		(struct sdebug_dev_info *)sdp->hostdata;
3963 
3964 	if (sdebug_verbose)
3965 		pr_info("slave_destroy <%u %u %u %llu>\n",
3966 		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3967 	if (devip) {
3968 		/* make this slot available for re-use */
3969 		devip->used = false;
3970 		sdp->hostdata = NULL;
3971 	}
3972 }
3973 
3974 static void stop_qc_helper(struct sdebug_defer *sd_dp,
3975 			   enum sdeb_defer_type defer_t)
3976 {
3977 	if (!sd_dp)
3978 		return;
3979 	if (defer_t == SDEB_DEFER_HRT)
3980 		hrtimer_cancel(&sd_dp->hrt);
3981 	else if (defer_t == SDEB_DEFER_WQ)
3982 		cancel_work_sync(&sd_dp->ew.work);
3983 }
3984 
3985 /* If @cmnd found deletes its timer or work queue and returns true; else
3986    returns false */
3987 static bool stop_queued_cmnd(struct scsi_cmnd *cmnd)
3988 {
3989 	unsigned long iflags;
3990 	int j, k, qmax, r_qmax;
3991 	enum sdeb_defer_type l_defer_t;
3992 	struct sdebug_queue *sqp;
3993 	struct sdebug_queued_cmd *sqcp;
3994 	struct sdebug_dev_info *devip;
3995 	struct sdebug_defer *sd_dp;
3996 
3997 	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
3998 		spin_lock_irqsave(&sqp->qc_lock, iflags);
3999 		qmax = sdebug_max_queue;
4000 		r_qmax = atomic_read(&retired_max_queue);
4001 		if (r_qmax > qmax)
4002 			qmax = r_qmax;
4003 		for (k = 0; k < qmax; ++k) {
4004 			if (test_bit(k, sqp->in_use_bm)) {
4005 				sqcp = &sqp->qc_arr[k];
4006 				if (cmnd != sqcp->a_cmnd)
4007 					continue;
4008 				/* found */
4009 				devip = (struct sdebug_dev_info *)
4010 						cmnd->device->hostdata;
4011 				if (devip)
4012 					atomic_dec(&devip->num_in_q);
4013 				sqcp->a_cmnd = NULL;
4014 				sd_dp = sqcp->sd_dp;
4015 				if (sd_dp) {
4016 					l_defer_t = sd_dp->defer_t;
4017 					sd_dp->defer_t = SDEB_DEFER_NONE;
4018 				} else
4019 					l_defer_t = SDEB_DEFER_NONE;
4020 				spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4021 				stop_qc_helper(sd_dp, l_defer_t);
4022 				clear_bit(k, sqp->in_use_bm);
4023 				return true;
4024 			}
4025 		}
4026 		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4027 	}
4028 	return false;
4029 }
4030 
4031 /* Deletes (stops) timers or work queues of all queued commands */
4032 static void stop_all_queued(void)
4033 {
4034 	unsigned long iflags;
4035 	int j, k;
4036 	enum sdeb_defer_type l_defer_t;
4037 	struct sdebug_queue *sqp;
4038 	struct sdebug_queued_cmd *sqcp;
4039 	struct sdebug_dev_info *devip;
4040 	struct sdebug_defer *sd_dp;
4041 
4042 	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
4043 		spin_lock_irqsave(&sqp->qc_lock, iflags);
4044 		for (k = 0; k < SDEBUG_CANQUEUE; ++k) {
4045 			if (test_bit(k, sqp->in_use_bm)) {
4046 				sqcp = &sqp->qc_arr[k];
4047 				if (sqcp->a_cmnd == NULL)
4048 					continue;
4049 				devip = (struct sdebug_dev_info *)
4050 					sqcp->a_cmnd->device->hostdata;
4051 				if (devip)
4052 					atomic_dec(&devip->num_in_q);
4053 				sqcp->a_cmnd = NULL;
4054 				sd_dp = sqcp->sd_dp;
4055 				if (sd_dp) {
4056 					l_defer_t = sd_dp->defer_t;
4057 					sd_dp->defer_t = SDEB_DEFER_NONE;
4058 				} else
4059 					l_defer_t = SDEB_DEFER_NONE;
4060 				spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4061 				stop_qc_helper(sd_dp, l_defer_t);
4062 				clear_bit(k, sqp->in_use_bm);
4063 				spin_lock_irqsave(&sqp->qc_lock, iflags);
4064 			}
4065 		}
4066 		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4067 	}
4068 }
4069 
4070 /* Free queued command memory on heap */
4071 static void free_all_queued(void)
4072 {
4073 	int j, k;
4074 	struct sdebug_queue *sqp;
4075 	struct sdebug_queued_cmd *sqcp;
4076 
4077 	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
4078 		for (k = 0; k < SDEBUG_CANQUEUE; ++k) {
4079 			sqcp = &sqp->qc_arr[k];
4080 			kfree(sqcp->sd_dp);
4081 			sqcp->sd_dp = NULL;
4082 		}
4083 	}
4084 }
4085 
4086 static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
4087 {
4088 	bool ok;
4089 
4090 	++num_aborts;
4091 	if (SCpnt) {
4092 		ok = stop_queued_cmnd(SCpnt);
4093 		if (SCpnt->device && (SDEBUG_OPT_ALL_NOISE & sdebug_opts))
4094 			sdev_printk(KERN_INFO, SCpnt->device,
4095 				    "%s: command%s found\n", __func__,
4096 				    ok ? "" : " not");
4097 	}
4098 	return SUCCESS;
4099 }
4100 
4101 static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
4102 {
4103 	++num_dev_resets;
4104 	if (SCpnt && SCpnt->device) {
4105 		struct scsi_device *sdp = SCpnt->device;
4106 		struct sdebug_dev_info *devip =
4107 				(struct sdebug_dev_info *)sdp->hostdata;
4108 
4109 		if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
4110 			sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
4111 		if (devip)
4112 			set_bit(SDEBUG_UA_POR, devip->uas_bm);
4113 	}
4114 	return SUCCESS;
4115 }
4116 
4117 static int scsi_debug_target_reset(struct scsi_cmnd *SCpnt)
4118 {
4119 	struct sdebug_host_info *sdbg_host;
4120 	struct sdebug_dev_info *devip;
4121 	struct scsi_device *sdp;
4122 	struct Scsi_Host *hp;
4123 	int k = 0;
4124 
4125 	++num_target_resets;
4126 	if (!SCpnt)
4127 		goto lie;
4128 	sdp = SCpnt->device;
4129 	if (!sdp)
4130 		goto lie;
4131 	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
4132 		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
4133 	hp = sdp->host;
4134 	if (!hp)
4135 		goto lie;
4136 	sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
4137 	if (sdbg_host) {
4138 		list_for_each_entry(devip,
4139 				    &sdbg_host->dev_info_list,
4140 				    dev_list)
4141 			if (devip->target == sdp->id) {
4142 				set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
4143 				++k;
4144 			}
4145 	}
4146 	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
4147 		sdev_printk(KERN_INFO, sdp,
4148 			    "%s: %d device(s) found in target\n", __func__, k);
4149 lie:
4150 	return SUCCESS;
4151 }
4152 
4153 static int scsi_debug_bus_reset(struct scsi_cmnd *SCpnt)
4154 {
4155 	struct sdebug_host_info *sdbg_host;
4156 	struct sdebug_dev_info *devip;
4157 	struct scsi_device *sdp;
4158 	struct Scsi_Host *hp;
4159 	int k = 0;
4160 
4161 	++num_bus_resets;
4162 	if (!(SCpnt && SCpnt->device))
4163 		goto lie;
4164 	sdp = SCpnt->device;
4165 	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
4166 		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
4167 	hp = sdp->host;
4168 	if (hp) {
4169 		sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
4170 		if (sdbg_host) {
4171 			list_for_each_entry(devip,
4172 					    &sdbg_host->dev_info_list,
4173 					    dev_list) {
4174 				set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
4175 				++k;
4176 			}
4177 		}
4178 	}
4179 	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
4180 		sdev_printk(KERN_INFO, sdp,
4181 			    "%s: %d device(s) found in host\n", __func__, k);
4182 lie:
4183 	return SUCCESS;
4184 }
4185 
4186 static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt)
4187 {
4188 	struct sdebug_host_info *sdbg_host;
4189 	struct sdebug_dev_info *devip;
4190 	int k = 0;
4191 
4192 	++num_host_resets;
4193 	if ((SCpnt->device) && (SDEBUG_OPT_ALL_NOISE & sdebug_opts))
4194 		sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
4195 	spin_lock(&sdebug_host_list_lock);
4196 	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
4197 		list_for_each_entry(devip, &sdbg_host->dev_info_list,
4198 				    dev_list) {
4199 			set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
4200 			++k;
4201 		}
4202 	}
4203 	spin_unlock(&sdebug_host_list_lock);
4204 	stop_all_queued();
4205 	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
4206 		sdev_printk(KERN_INFO, SCpnt->device,
4207 			    "%s: %d device(s) found\n", __func__, k);
4208 	return SUCCESS;
4209 }
4210 
4211 static void __init sdebug_build_parts(unsigned char *ramp,
4212 				      unsigned long store_size)
4213 {
4214 	struct partition *pp;
4215 	int starts[SDEBUG_MAX_PARTS + 2];
4216 	int sectors_per_part, num_sectors, k;
4217 	int heads_by_sects, start_sec, end_sec;
4218 
4219 	/* assume partition table already zeroed */
4220 	if ((sdebug_num_parts < 1) || (store_size < 1048576))
4221 		return;
4222 	if (sdebug_num_parts > SDEBUG_MAX_PARTS) {
4223 		sdebug_num_parts = SDEBUG_MAX_PARTS;
4224 		pr_warn("reducing partitions to %d\n", SDEBUG_MAX_PARTS);
4225 	}
4226 	num_sectors = (int)sdebug_store_sectors;
4227 	sectors_per_part = (num_sectors - sdebug_sectors_per)
4228 			   / sdebug_num_parts;
4229 	heads_by_sects = sdebug_heads * sdebug_sectors_per;
4230 	starts[0] = sdebug_sectors_per;
4231 	for (k = 1; k < sdebug_num_parts; ++k)
4232 		starts[k] = ((k * sectors_per_part) / heads_by_sects)
4233 			    * heads_by_sects;
4234 	starts[sdebug_num_parts] = num_sectors;
4235 	starts[sdebug_num_parts + 1] = 0;
4236 
4237 	ramp[510] = 0x55;	/* magic partition markings */
4238 	ramp[511] = 0xAA;
4239 	pp = (struct partition *)(ramp + 0x1be);
4240 	for (k = 0; starts[k + 1]; ++k, ++pp) {
4241 		start_sec = starts[k];
4242 		end_sec = starts[k + 1] - 1;
4243 		pp->boot_ind = 0;
4244 
4245 		pp->cyl = start_sec / heads_by_sects;
4246 		pp->head = (start_sec - (pp->cyl * heads_by_sects))
4247 			   / sdebug_sectors_per;
4248 		pp->sector = (start_sec % sdebug_sectors_per) + 1;
4249 
4250 		pp->end_cyl = end_sec / heads_by_sects;
4251 		pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
4252 			       / sdebug_sectors_per;
4253 		pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
4254 
4255 		pp->start_sect = cpu_to_le32(start_sec);
4256 		pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
4257 		pp->sys_ind = 0x83;	/* plain Linux partition */
4258 	}
4259 }
4260 
4261 static void block_unblock_all_queues(bool block)
4262 {
4263 	int j;
4264 	struct sdebug_queue *sqp;
4265 
4266 	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp)
4267 		atomic_set(&sqp->blocked, (int)block);
4268 }
4269 
4270 /* Adjust (by rounding down) the sdebug_cmnd_count so abs(every_nth)-1
4271  * commands will be processed normally before triggers occur.
4272  */
4273 static void tweak_cmnd_count(void)
4274 {
4275 	int count, modulo;
4276 
4277 	modulo = abs(sdebug_every_nth);
4278 	if (modulo < 2)
4279 		return;
4280 	block_unblock_all_queues(true);
4281 	count = atomic_read(&sdebug_cmnd_count);
4282 	atomic_set(&sdebug_cmnd_count, (count / modulo) * modulo);
4283 	block_unblock_all_queues(false);
4284 }
4285 
4286 static void clear_queue_stats(void)
4287 {
4288 	atomic_set(&sdebug_cmnd_count, 0);
4289 	atomic_set(&sdebug_completions, 0);
4290 	atomic_set(&sdebug_miss_cpus, 0);
4291 	atomic_set(&sdebug_a_tsf, 0);
4292 }
4293 
4294 static void setup_inject(struct sdebug_queue *sqp,
4295 			 struct sdebug_queued_cmd *sqcp)
4296 {
4297 	if ((atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0) {
4298 		if (sdebug_every_nth > 0)
4299 			sqcp->inj_recovered = sqcp->inj_transport
4300 				= sqcp->inj_dif
4301 				= sqcp->inj_dix = sqcp->inj_short = 0;
4302 		return;
4303 	}
4304 	sqcp->inj_recovered = !!(SDEBUG_OPT_RECOVERED_ERR & sdebug_opts);
4305 	sqcp->inj_transport = !!(SDEBUG_OPT_TRANSPORT_ERR & sdebug_opts);
4306 	sqcp->inj_dif = !!(SDEBUG_OPT_DIF_ERR & sdebug_opts);
4307 	sqcp->inj_dix = !!(SDEBUG_OPT_DIX_ERR & sdebug_opts);
4308 	sqcp->inj_short = !!(SDEBUG_OPT_SHORT_TRANSFER & sdebug_opts);
4309 	sqcp->inj_host_busy = !!(SDEBUG_OPT_HOST_BUSY & sdebug_opts);
4310 }
4311 
4312 /* Complete the processing of the thread that queued a SCSI command to this
4313  * driver. It either completes the command by calling cmnd_done() or
4314  * schedules a hr timer or work queue then returns 0. Returns
4315  * SCSI_MLQUEUE_HOST_BUSY if temporarily out of resources.
4316  */
4317 static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
4318 			 int scsi_result,
4319 			 int (*pfp)(struct scsi_cmnd *,
4320 				    struct sdebug_dev_info *),
4321 			 int delta_jiff, int ndelay)
4322 {
4323 	unsigned long iflags;
4324 	int k, num_in_q, qdepth, inject;
4325 	struct sdebug_queue *sqp;
4326 	struct sdebug_queued_cmd *sqcp;
4327 	struct scsi_device *sdp;
4328 	struct sdebug_defer *sd_dp;
4329 
4330 	if (unlikely(devip == NULL)) {
4331 		if (scsi_result == 0)
4332 			scsi_result = DID_NO_CONNECT << 16;
4333 		goto respond_in_thread;
4334 	}
4335 	sdp = cmnd->device;
4336 
4337 	if (delta_jiff == 0)
4338 		goto respond_in_thread;
4339 
4340 	/* schedule the response at a later time if resources permit */
4341 	sqp = get_queue(cmnd);
4342 	spin_lock_irqsave(&sqp->qc_lock, iflags);
4343 	if (unlikely(atomic_read(&sqp->blocked))) {
4344 		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4345 		return SCSI_MLQUEUE_HOST_BUSY;
4346 	}
4347 	num_in_q = atomic_read(&devip->num_in_q);
4348 	qdepth = cmnd->device->queue_depth;
4349 	inject = 0;
4350 	if (unlikely((qdepth > 0) && (num_in_q >= qdepth))) {
4351 		if (scsi_result) {
4352 			spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4353 			goto respond_in_thread;
4354 		} else
4355 			scsi_result = device_qfull_result;
4356 	} else if (unlikely(sdebug_every_nth &&
4357 			    (SDEBUG_OPT_RARE_TSF & sdebug_opts) &&
4358 			    (scsi_result == 0))) {
4359 		if ((num_in_q == (qdepth - 1)) &&
4360 		    (atomic_inc_return(&sdebug_a_tsf) >=
4361 		     abs(sdebug_every_nth))) {
4362 			atomic_set(&sdebug_a_tsf, 0);
4363 			inject = 1;
4364 			scsi_result = device_qfull_result;
4365 		}
4366 	}
4367 
4368 	k = find_first_zero_bit(sqp->in_use_bm, sdebug_max_queue);
4369 	if (unlikely(k >= sdebug_max_queue)) {
4370 		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4371 		if (scsi_result)
4372 			goto respond_in_thread;
4373 		else if (SDEBUG_OPT_ALL_TSF & sdebug_opts)
4374 			scsi_result = device_qfull_result;
4375 		if (SDEBUG_OPT_Q_NOISE & sdebug_opts)
4376 			sdev_printk(KERN_INFO, sdp,
4377 				    "%s: max_queue=%d exceeded, %s\n",
4378 				    __func__, sdebug_max_queue,
4379 				    (scsi_result ?  "status: TASK SET FULL" :
4380 						    "report: host busy"));
4381 		if (scsi_result)
4382 			goto respond_in_thread;
4383 		else
4384 			return SCSI_MLQUEUE_HOST_BUSY;
4385 	}
4386 	__set_bit(k, sqp->in_use_bm);
4387 	atomic_inc(&devip->num_in_q);
4388 	sqcp = &sqp->qc_arr[k];
4389 	sqcp->a_cmnd = cmnd;
4390 	cmnd->host_scribble = (unsigned char *)sqcp;
4391 	sd_dp = sqcp->sd_dp;
4392 	spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4393 	if (unlikely(sdebug_every_nth && sdebug_any_injecting_opt))
4394 		setup_inject(sqp, sqcp);
4395 	if (sd_dp == NULL) {
4396 		sd_dp = kzalloc(sizeof(*sd_dp), GFP_ATOMIC);
4397 		if (sd_dp == NULL)
4398 			return SCSI_MLQUEUE_HOST_BUSY;
4399 	}
4400 
4401 	cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
4402 	if (cmnd->result & SDEG_RES_IMMED_MASK) {
4403 		/*
4404 		 * This is the F_DELAY_OVERR case. No delay.
4405 		 */
4406 		cmnd->result &= ~SDEG_RES_IMMED_MASK;
4407 		delta_jiff = ndelay = 0;
4408 	}
4409 	if (cmnd->result == 0 && scsi_result != 0)
4410 		cmnd->result = scsi_result;
4411 
4412 	if (unlikely(sdebug_verbose && cmnd->result))
4413 		sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
4414 			    __func__, cmnd->result);
4415 
4416 	if (delta_jiff > 0 || ndelay > 0) {
4417 		ktime_t kt;
4418 
4419 		if (delta_jiff > 0) {
4420 			kt = ns_to_ktime((u64)delta_jiff * (NSEC_PER_SEC / HZ));
4421 		} else
4422 			kt = ndelay;
4423 		if (!sd_dp->init_hrt) {
4424 			sd_dp->init_hrt = true;
4425 			sqcp->sd_dp = sd_dp;
4426 			hrtimer_init(&sd_dp->hrt, CLOCK_MONOTONIC,
4427 				     HRTIMER_MODE_REL_PINNED);
4428 			sd_dp->hrt.function = sdebug_q_cmd_hrt_complete;
4429 			sd_dp->sqa_idx = sqp - sdebug_q_arr;
4430 			sd_dp->qc_idx = k;
4431 		}
4432 		if (sdebug_statistics)
4433 			sd_dp->issuing_cpu = raw_smp_processor_id();
4434 		sd_dp->defer_t = SDEB_DEFER_HRT;
4435 		hrtimer_start(&sd_dp->hrt, kt, HRTIMER_MODE_REL_PINNED);
4436 	} else {	/* jdelay < 0, use work queue */
4437 		if (!sd_dp->init_wq) {
4438 			sd_dp->init_wq = true;
4439 			sqcp->sd_dp = sd_dp;
4440 			sd_dp->sqa_idx = sqp - sdebug_q_arr;
4441 			sd_dp->qc_idx = k;
4442 			INIT_WORK(&sd_dp->ew.work, sdebug_q_cmd_wq_complete);
4443 		}
4444 		if (sdebug_statistics)
4445 			sd_dp->issuing_cpu = raw_smp_processor_id();
4446 		sd_dp->defer_t = SDEB_DEFER_WQ;
4447 		schedule_work(&sd_dp->ew.work);
4448 	}
4449 	if (unlikely((SDEBUG_OPT_Q_NOISE & sdebug_opts) &&
4450 		     (scsi_result == device_qfull_result)))
4451 		sdev_printk(KERN_INFO, sdp,
4452 			    "%s: num_in_q=%d +1, %s%s\n", __func__,
4453 			    num_in_q, (inject ? "<inject> " : ""),
4454 			    "status: TASK SET FULL");
4455 	return 0;
4456 
4457 respond_in_thread:	/* call back to mid-layer using invocation thread */
4458 	cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
4459 	cmnd->result &= ~SDEG_RES_IMMED_MASK;
4460 	if (cmnd->result == 0 && scsi_result != 0)
4461 		cmnd->result = scsi_result;
4462 	cmnd->scsi_done(cmnd);
4463 	return 0;
4464 }
4465 
4466 /* Note: The following macros create attribute files in the
4467    /sys/module/scsi_debug/parameters directory. Unfortunately this
4468    driver is unaware of a change and cannot trigger auxiliary actions
4469    as it can when the corresponding attribute in the
4470    /sys/bus/pseudo/drivers/scsi_debug directory is changed.
4471  */
4472 module_param_named(add_host, sdebug_add_host, int, S_IRUGO | S_IWUSR);
4473 module_param_named(ato, sdebug_ato, int, S_IRUGO);
4474 module_param_named(cdb_len, sdebug_cdb_len, int, 0644);
4475 module_param_named(clustering, sdebug_clustering, bool, S_IRUGO | S_IWUSR);
4476 module_param_named(delay, sdebug_jdelay, int, S_IRUGO | S_IWUSR);
4477 module_param_named(dev_size_mb, sdebug_dev_size_mb, int, S_IRUGO);
4478 module_param_named(dif, sdebug_dif, int, S_IRUGO);
4479 module_param_named(dix, sdebug_dix, int, S_IRUGO);
4480 module_param_named(dsense, sdebug_dsense, int, S_IRUGO | S_IWUSR);
4481 module_param_named(every_nth, sdebug_every_nth, int, S_IRUGO | S_IWUSR);
4482 module_param_named(fake_rw, sdebug_fake_rw, int, S_IRUGO | S_IWUSR);
4483 module_param_named(guard, sdebug_guard, uint, S_IRUGO);
4484 module_param_named(host_lock, sdebug_host_lock, bool, S_IRUGO | S_IWUSR);
4485 module_param_string(inq_vendor, sdebug_inq_vendor_id,
4486 		    sizeof(sdebug_inq_vendor_id), S_IRUGO|S_IWUSR);
4487 module_param_string(inq_product, sdebug_inq_product_id,
4488 		    sizeof(sdebug_inq_product_id), S_IRUGO|S_IWUSR);
4489 module_param_string(inq_rev, sdebug_inq_product_rev,
4490 		    sizeof(sdebug_inq_product_rev), S_IRUGO|S_IWUSR);
4491 module_param_named(lbpu, sdebug_lbpu, int, S_IRUGO);
4492 module_param_named(lbpws, sdebug_lbpws, int, S_IRUGO);
4493 module_param_named(lbpws10, sdebug_lbpws10, int, S_IRUGO);
4494 module_param_named(lbprz, sdebug_lbprz, int, S_IRUGO);
4495 module_param_named(lowest_aligned, sdebug_lowest_aligned, int, S_IRUGO);
4496 module_param_named(max_luns, sdebug_max_luns, int, S_IRUGO | S_IWUSR);
4497 module_param_named(max_queue, sdebug_max_queue, int, S_IRUGO | S_IWUSR);
4498 module_param_named(medium_error_start, sdebug_medium_error_start, int, S_IRUGO | S_IWUSR);
4499 module_param_named(medium_error_count, sdebug_medium_error_count, int, S_IRUGO | S_IWUSR);
4500 module_param_named(ndelay, sdebug_ndelay, int, S_IRUGO | S_IWUSR);
4501 module_param_named(no_lun_0, sdebug_no_lun_0, int, S_IRUGO | S_IWUSR);
4502 module_param_named(no_uld, sdebug_no_uld, int, S_IRUGO);
4503 module_param_named(num_parts, sdebug_num_parts, int, S_IRUGO);
4504 module_param_named(num_tgts, sdebug_num_tgts, int, S_IRUGO | S_IWUSR);
4505 module_param_named(opt_blks, sdebug_opt_blks, int, S_IRUGO);
4506 module_param_named(opts, sdebug_opts, int, S_IRUGO | S_IWUSR);
4507 module_param_named(physblk_exp, sdebug_physblk_exp, int, S_IRUGO);
4508 module_param_named(opt_xferlen_exp, sdebug_opt_xferlen_exp, int, S_IRUGO);
4509 module_param_named(ptype, sdebug_ptype, int, S_IRUGO | S_IWUSR);
4510 module_param_named(removable, sdebug_removable, bool, S_IRUGO | S_IWUSR);
4511 module_param_named(scsi_level, sdebug_scsi_level, int, S_IRUGO);
4512 module_param_named(sector_size, sdebug_sector_size, int, S_IRUGO);
4513 module_param_named(statistics, sdebug_statistics, bool, S_IRUGO | S_IWUSR);
4514 module_param_named(strict, sdebug_strict, bool, S_IRUGO | S_IWUSR);
4515 module_param_named(submit_queues, submit_queues, int, S_IRUGO);
4516 module_param_named(unmap_alignment, sdebug_unmap_alignment, int, S_IRUGO);
4517 module_param_named(unmap_granularity, sdebug_unmap_granularity, int, S_IRUGO);
4518 module_param_named(unmap_max_blocks, sdebug_unmap_max_blocks, int, S_IRUGO);
4519 module_param_named(unmap_max_desc, sdebug_unmap_max_desc, int, S_IRUGO);
4520 module_param_named(virtual_gb, sdebug_virtual_gb, int, S_IRUGO | S_IWUSR);
4521 module_param_named(uuid_ctl, sdebug_uuid_ctl, int, S_IRUGO);
4522 module_param_named(vpd_use_hostno, sdebug_vpd_use_hostno, int,
4523 		   S_IRUGO | S_IWUSR);
4524 module_param_named(write_same_length, sdebug_write_same_length, int,
4525 		   S_IRUGO | S_IWUSR);
4526 
4527 MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
4528 MODULE_DESCRIPTION("SCSI debug adapter driver");
4529 MODULE_LICENSE("GPL");
4530 MODULE_VERSION(SDEBUG_VERSION);
4531 
4532 MODULE_PARM_DESC(add_host, "0..127 hosts allowed(def=1)");
4533 MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
4534 MODULE_PARM_DESC(cdb_len, "suggest CDB lengths to drivers (def=10)");
4535 MODULE_PARM_DESC(clustering, "when set enables larger transfers (def=0)");
4536 MODULE_PARM_DESC(delay, "response delay (def=1 jiffy); 0:imm, -1,-2:tiny");
4537 MODULE_PARM_DESC(dev_size_mb, "size in MiB of ram shared by devs(def=8)");
4538 MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
4539 MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
4540 MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
4541 MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
4542 MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
4543 MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
4544 MODULE_PARM_DESC(host_lock, "host_lock is ignored (def=0)");
4545 MODULE_PARM_DESC(inq_vendor, "SCSI INQUIRY vendor string (def=\"Linux\")");
4546 MODULE_PARM_DESC(inq_product, "SCSI INQUIRY product string (def=\"scsi_debug\")");
4547 MODULE_PARM_DESC(inq_rev, "SCSI INQUIRY revision string (def=\""
4548 		 SDEBUG_VERSION "\")");
4549 MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
4550 MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
4551 MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
4552 MODULE_PARM_DESC(lbprz,
4553 	"on read unmapped LBs return 0 when 1 (def), return 0xff when 2");
4554 MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
4555 MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
4556 MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
4557 MODULE_PARM_DESC(medium_error_start, "starting sector number to return MEDIUM error");
4558 MODULE_PARM_DESC(medium_error_count, "count of sectors to return follow on MEDIUM error");
4559 MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
4560 MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
4561 MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
4562 MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
4563 MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
4564 MODULE_PARM_DESC(opt_blks, "optimal transfer length in blocks (def=1024)");
4565 MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
4566 MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
4567 MODULE_PARM_DESC(opt_xferlen_exp, "optimal transfer length granularity exponent (def=physblk_exp)");
4568 MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
4569 MODULE_PARM_DESC(removable, "claim to have removable media (def=0)");
4570 MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=7[SPC-5])");
4571 MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
4572 MODULE_PARM_DESC(statistics, "collect statistics on commands, queues (def=0)");
4573 MODULE_PARM_DESC(strict, "stricter checks: reserved field in cdb (def=0)");
4574 MODULE_PARM_DESC(submit_queues, "support for block multi-queue (def=1)");
4575 MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
4576 MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
4577 MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
4578 MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
4579 MODULE_PARM_DESC(uuid_ctl,
4580 		 "1->use uuid for lu name, 0->don't, 2->all use same (def=0)");
4581 MODULE_PARM_DESC(virtual_gb, "virtual gigabyte (GiB) size (def=0 -> use dev_size_mb)");
4582 MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
4583 MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
4584 
4585 #define SDEBUG_INFO_LEN 256
4586 static char sdebug_info[SDEBUG_INFO_LEN];
4587 
4588 static const char *scsi_debug_info(struct Scsi_Host *shp)
4589 {
4590 	int k;
4591 
4592 	k = scnprintf(sdebug_info, SDEBUG_INFO_LEN, "%s: version %s [%s]\n",
4593 		      my_name, SDEBUG_VERSION, sdebug_version_date);
4594 	if (k >= (SDEBUG_INFO_LEN - 1))
4595 		return sdebug_info;
4596 	scnprintf(sdebug_info + k, SDEBUG_INFO_LEN - k,
4597 		  "  dev_size_mb=%d, opts=0x%x, submit_queues=%d, %s=%d",
4598 		  sdebug_dev_size_mb, sdebug_opts, submit_queues,
4599 		  "statistics", (int)sdebug_statistics);
4600 	return sdebug_info;
4601 }
4602 
4603 /* 'echo <val> > /proc/scsi/scsi_debug/<host_id>' writes to opts */
4604 static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer,
4605 				 int length)
4606 {
4607 	char arr[16];
4608 	int opts;
4609 	int minLen = length > 15 ? 15 : length;
4610 
4611 	if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
4612 		return -EACCES;
4613 	memcpy(arr, buffer, minLen);
4614 	arr[minLen] = '\0';
4615 	if (1 != sscanf(arr, "%d", &opts))
4616 		return -EINVAL;
4617 	sdebug_opts = opts;
4618 	sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
4619 	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
4620 	if (sdebug_every_nth != 0)
4621 		tweak_cmnd_count();
4622 	return length;
4623 }
4624 
4625 /* Output seen with 'cat /proc/scsi/scsi_debug/<host_id>'. It will be the
4626  * same for each scsi_debug host (if more than one). Some of the counters
4627  * output are not atomics so might be inaccurate in a busy system. */
4628 static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
4629 {
4630 	int f, j, l;
4631 	struct sdebug_queue *sqp;
4632 
4633 	seq_printf(m, "scsi_debug adapter driver, version %s [%s]\n",
4634 		   SDEBUG_VERSION, sdebug_version_date);
4635 	seq_printf(m, "num_tgts=%d, %ssize=%d MB, opts=0x%x, every_nth=%d\n",
4636 		   sdebug_num_tgts, "shared (ram) ", sdebug_dev_size_mb,
4637 		   sdebug_opts, sdebug_every_nth);
4638 	seq_printf(m, "delay=%d, ndelay=%d, max_luns=%d, sector_size=%d %s\n",
4639 		   sdebug_jdelay, sdebug_ndelay, sdebug_max_luns,
4640 		   sdebug_sector_size, "bytes");
4641 	seq_printf(m, "cylinders=%d, heads=%d, sectors=%d, command aborts=%d\n",
4642 		   sdebug_cylinders_per, sdebug_heads, sdebug_sectors_per,
4643 		   num_aborts);
4644 	seq_printf(m, "RESETs: device=%d, target=%d, bus=%d, host=%d\n",
4645 		   num_dev_resets, num_target_resets, num_bus_resets,
4646 		   num_host_resets);
4647 	seq_printf(m, "dix_reads=%d, dix_writes=%d, dif_errors=%d\n",
4648 		   dix_reads, dix_writes, dif_errors);
4649 	seq_printf(m, "usec_in_jiffy=%lu, statistics=%d\n", TICK_NSEC / 1000,
4650 		   sdebug_statistics);
4651 	seq_printf(m, "cmnd_count=%d, completions=%d, %s=%d, a_tsf=%d\n",
4652 		   atomic_read(&sdebug_cmnd_count),
4653 		   atomic_read(&sdebug_completions),
4654 		   "miss_cpus", atomic_read(&sdebug_miss_cpus),
4655 		   atomic_read(&sdebug_a_tsf));
4656 
4657 	seq_printf(m, "submit_queues=%d\n", submit_queues);
4658 	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
4659 		seq_printf(m, "  queue %d:\n", j);
4660 		f = find_first_bit(sqp->in_use_bm, sdebug_max_queue);
4661 		if (f != sdebug_max_queue) {
4662 			l = find_last_bit(sqp->in_use_bm, sdebug_max_queue);
4663 			seq_printf(m, "    in_use_bm BUSY: %s: %d,%d\n",
4664 				   "first,last bits", f, l);
4665 		}
4666 	}
4667 	return 0;
4668 }
4669 
4670 static ssize_t delay_show(struct device_driver *ddp, char *buf)
4671 {
4672 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_jdelay);
4673 }
4674 /* Returns -EBUSY if jdelay is being changed and commands are queued. The unit
4675  * of delay is jiffies.
4676  */
4677 static ssize_t delay_store(struct device_driver *ddp, const char *buf,
4678 			   size_t count)
4679 {
4680 	int jdelay, res;
4681 
4682 	if (count > 0 && sscanf(buf, "%d", &jdelay) == 1) {
4683 		res = count;
4684 		if (sdebug_jdelay != jdelay) {
4685 			int j, k;
4686 			struct sdebug_queue *sqp;
4687 
4688 			block_unblock_all_queues(true);
4689 			for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
4690 			     ++j, ++sqp) {
4691 				k = find_first_bit(sqp->in_use_bm,
4692 						   sdebug_max_queue);
4693 				if (k != sdebug_max_queue) {
4694 					res = -EBUSY;   /* queued commands */
4695 					break;
4696 				}
4697 			}
4698 			if (res > 0) {
4699 				sdebug_jdelay = jdelay;
4700 				sdebug_ndelay = 0;
4701 			}
4702 			block_unblock_all_queues(false);
4703 		}
4704 		return res;
4705 	}
4706 	return -EINVAL;
4707 }
4708 static DRIVER_ATTR_RW(delay);
4709 
4710 static ssize_t ndelay_show(struct device_driver *ddp, char *buf)
4711 {
4712 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ndelay);
4713 }
4714 /* Returns -EBUSY if ndelay is being changed and commands are queued */
4715 /* If > 0 and accepted then sdebug_jdelay is set to JDELAY_OVERRIDDEN */
4716 static ssize_t ndelay_store(struct device_driver *ddp, const char *buf,
4717 			    size_t count)
4718 {
4719 	int ndelay, res;
4720 
4721 	if ((count > 0) && (1 == sscanf(buf, "%d", &ndelay)) &&
4722 	    (ndelay >= 0) && (ndelay < (1000 * 1000 * 1000))) {
4723 		res = count;
4724 		if (sdebug_ndelay != ndelay) {
4725 			int j, k;
4726 			struct sdebug_queue *sqp;
4727 
4728 			block_unblock_all_queues(true);
4729 			for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
4730 			     ++j, ++sqp) {
4731 				k = find_first_bit(sqp->in_use_bm,
4732 						   sdebug_max_queue);
4733 				if (k != sdebug_max_queue) {
4734 					res = -EBUSY;   /* queued commands */
4735 					break;
4736 				}
4737 			}
4738 			if (res > 0) {
4739 				sdebug_ndelay = ndelay;
4740 				sdebug_jdelay = ndelay  ? JDELAY_OVERRIDDEN
4741 							: DEF_JDELAY;
4742 			}
4743 			block_unblock_all_queues(false);
4744 		}
4745 		return res;
4746 	}
4747 	return -EINVAL;
4748 }
4749 static DRIVER_ATTR_RW(ndelay);
4750 
4751 static ssize_t opts_show(struct device_driver *ddp, char *buf)
4752 {
4753 	return scnprintf(buf, PAGE_SIZE, "0x%x\n", sdebug_opts);
4754 }
4755 
4756 static ssize_t opts_store(struct device_driver *ddp, const char *buf,
4757 			  size_t count)
4758 {
4759 	int opts;
4760 	char work[20];
4761 
4762 	if (sscanf(buf, "%10s", work) == 1) {
4763 		if (strncasecmp(work, "0x", 2) == 0) {
4764 			if (kstrtoint(work + 2, 16, &opts) == 0)
4765 				goto opts_done;
4766 		} else {
4767 			if (kstrtoint(work, 10, &opts) == 0)
4768 				goto opts_done;
4769 		}
4770 	}
4771 	return -EINVAL;
4772 opts_done:
4773 	sdebug_opts = opts;
4774 	sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
4775 	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
4776 	tweak_cmnd_count();
4777 	return count;
4778 }
4779 static DRIVER_ATTR_RW(opts);
4780 
4781 static ssize_t ptype_show(struct device_driver *ddp, char *buf)
4782 {
4783 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ptype);
4784 }
4785 static ssize_t ptype_store(struct device_driver *ddp, const char *buf,
4786 			   size_t count)
4787 {
4788 	int n;
4789 
4790 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4791 		sdebug_ptype = n;
4792 		return count;
4793 	}
4794 	return -EINVAL;
4795 }
4796 static DRIVER_ATTR_RW(ptype);
4797 
4798 static ssize_t dsense_show(struct device_driver *ddp, char *buf)
4799 {
4800 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dsense);
4801 }
4802 static ssize_t dsense_store(struct device_driver *ddp, const char *buf,
4803 			    size_t count)
4804 {
4805 	int n;
4806 
4807 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4808 		sdebug_dsense = n;
4809 		return count;
4810 	}
4811 	return -EINVAL;
4812 }
4813 static DRIVER_ATTR_RW(dsense);
4814 
4815 static ssize_t fake_rw_show(struct device_driver *ddp, char *buf)
4816 {
4817 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_fake_rw);
4818 }
4819 static ssize_t fake_rw_store(struct device_driver *ddp, const char *buf,
4820 			     size_t count)
4821 {
4822 	int n;
4823 
4824 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4825 		n = (n > 0);
4826 		sdebug_fake_rw = (sdebug_fake_rw > 0);
4827 		if (sdebug_fake_rw != n) {
4828 			if ((0 == n) && (NULL == fake_storep)) {
4829 				unsigned long sz =
4830 					(unsigned long)sdebug_dev_size_mb *
4831 					1048576;
4832 
4833 				fake_storep = vmalloc(sz);
4834 				if (NULL == fake_storep) {
4835 					pr_err("out of memory, 9\n");
4836 					return -ENOMEM;
4837 				}
4838 				memset(fake_storep, 0, sz);
4839 			}
4840 			sdebug_fake_rw = n;
4841 		}
4842 		return count;
4843 	}
4844 	return -EINVAL;
4845 }
4846 static DRIVER_ATTR_RW(fake_rw);
4847 
4848 static ssize_t no_lun_0_show(struct device_driver *ddp, char *buf)
4849 {
4850 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_lun_0);
4851 }
4852 static ssize_t no_lun_0_store(struct device_driver *ddp, const char *buf,
4853 			      size_t count)
4854 {
4855 	int n;
4856 
4857 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4858 		sdebug_no_lun_0 = n;
4859 		return count;
4860 	}
4861 	return -EINVAL;
4862 }
4863 static DRIVER_ATTR_RW(no_lun_0);
4864 
4865 static ssize_t num_tgts_show(struct device_driver *ddp, char *buf)
4866 {
4867 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_tgts);
4868 }
4869 static ssize_t num_tgts_store(struct device_driver *ddp, const char *buf,
4870 			      size_t count)
4871 {
4872 	int n;
4873 
4874 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4875 		sdebug_num_tgts = n;
4876 		sdebug_max_tgts_luns();
4877 		return count;
4878 	}
4879 	return -EINVAL;
4880 }
4881 static DRIVER_ATTR_RW(num_tgts);
4882 
4883 static ssize_t dev_size_mb_show(struct device_driver *ddp, char *buf)
4884 {
4885 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dev_size_mb);
4886 }
4887 static DRIVER_ATTR_RO(dev_size_mb);
4888 
4889 static ssize_t num_parts_show(struct device_driver *ddp, char *buf)
4890 {
4891 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_parts);
4892 }
4893 static DRIVER_ATTR_RO(num_parts);
4894 
4895 static ssize_t every_nth_show(struct device_driver *ddp, char *buf)
4896 {
4897 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_every_nth);
4898 }
4899 static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
4900 			       size_t count)
4901 {
4902 	int nth;
4903 
4904 	if ((count > 0) && (1 == sscanf(buf, "%d", &nth))) {
4905 		sdebug_every_nth = nth;
4906 		if (nth && !sdebug_statistics) {
4907 			pr_info("every_nth needs statistics=1, set it\n");
4908 			sdebug_statistics = true;
4909 		}
4910 		tweak_cmnd_count();
4911 		return count;
4912 	}
4913 	return -EINVAL;
4914 }
4915 static DRIVER_ATTR_RW(every_nth);
4916 
4917 static ssize_t max_luns_show(struct device_driver *ddp, char *buf)
4918 {
4919 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_luns);
4920 }
4921 static ssize_t max_luns_store(struct device_driver *ddp, const char *buf,
4922 			      size_t count)
4923 {
4924 	int n;
4925 	bool changed;
4926 
4927 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4928 		if (n > 256) {
4929 			pr_warn("max_luns can be no more than 256\n");
4930 			return -EINVAL;
4931 		}
4932 		changed = (sdebug_max_luns != n);
4933 		sdebug_max_luns = n;
4934 		sdebug_max_tgts_luns();
4935 		if (changed && (sdebug_scsi_level >= 5)) {	/* >= SPC-3 */
4936 			struct sdebug_host_info *sdhp;
4937 			struct sdebug_dev_info *dp;
4938 
4939 			spin_lock(&sdebug_host_list_lock);
4940 			list_for_each_entry(sdhp, &sdebug_host_list,
4941 					    host_list) {
4942 				list_for_each_entry(dp, &sdhp->dev_info_list,
4943 						    dev_list) {
4944 					set_bit(SDEBUG_UA_LUNS_CHANGED,
4945 						dp->uas_bm);
4946 				}
4947 			}
4948 			spin_unlock(&sdebug_host_list_lock);
4949 		}
4950 		return count;
4951 	}
4952 	return -EINVAL;
4953 }
4954 static DRIVER_ATTR_RW(max_luns);
4955 
4956 static ssize_t max_queue_show(struct device_driver *ddp, char *buf)
4957 {
4958 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_queue);
4959 }
4960 /* N.B. max_queue can be changed while there are queued commands. In flight
4961  * commands beyond the new max_queue will be completed. */
4962 static ssize_t max_queue_store(struct device_driver *ddp, const char *buf,
4963 			       size_t count)
4964 {
4965 	int j, n, k, a;
4966 	struct sdebug_queue *sqp;
4967 
4968 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
4969 	    (n <= SDEBUG_CANQUEUE)) {
4970 		block_unblock_all_queues(true);
4971 		k = 0;
4972 		for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
4973 		     ++j, ++sqp) {
4974 			a = find_last_bit(sqp->in_use_bm, SDEBUG_CANQUEUE);
4975 			if (a > k)
4976 				k = a;
4977 		}
4978 		sdebug_max_queue = n;
4979 		if (k == SDEBUG_CANQUEUE)
4980 			atomic_set(&retired_max_queue, 0);
4981 		else if (k >= n)
4982 			atomic_set(&retired_max_queue, k + 1);
4983 		else
4984 			atomic_set(&retired_max_queue, 0);
4985 		block_unblock_all_queues(false);
4986 		return count;
4987 	}
4988 	return -EINVAL;
4989 }
4990 static DRIVER_ATTR_RW(max_queue);
4991 
4992 static ssize_t no_uld_show(struct device_driver *ddp, char *buf)
4993 {
4994 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_uld);
4995 }
4996 static DRIVER_ATTR_RO(no_uld);
4997 
4998 static ssize_t scsi_level_show(struct device_driver *ddp, char *buf)
4999 {
5000 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_scsi_level);
5001 }
5002 static DRIVER_ATTR_RO(scsi_level);
5003 
5004 static ssize_t virtual_gb_show(struct device_driver *ddp, char *buf)
5005 {
5006 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_virtual_gb);
5007 }
5008 static ssize_t virtual_gb_store(struct device_driver *ddp, const char *buf,
5009 				size_t count)
5010 {
5011 	int n;
5012 	bool changed;
5013 
5014 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
5015 		changed = (sdebug_virtual_gb != n);
5016 		sdebug_virtual_gb = n;
5017 		sdebug_capacity = get_sdebug_capacity();
5018 		if (changed) {
5019 			struct sdebug_host_info *sdhp;
5020 			struct sdebug_dev_info *dp;
5021 
5022 			spin_lock(&sdebug_host_list_lock);
5023 			list_for_each_entry(sdhp, &sdebug_host_list,
5024 					    host_list) {
5025 				list_for_each_entry(dp, &sdhp->dev_info_list,
5026 						    dev_list) {
5027 					set_bit(SDEBUG_UA_CAPACITY_CHANGED,
5028 						dp->uas_bm);
5029 				}
5030 			}
5031 			spin_unlock(&sdebug_host_list_lock);
5032 		}
5033 		return count;
5034 	}
5035 	return -EINVAL;
5036 }
5037 static DRIVER_ATTR_RW(virtual_gb);
5038 
5039 static ssize_t add_host_show(struct device_driver *ddp, char *buf)
5040 {
5041 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_add_host);
5042 }
5043 
5044 static int sdebug_add_adapter(void);
5045 static void sdebug_remove_adapter(void);
5046 
5047 static ssize_t add_host_store(struct device_driver *ddp, const char *buf,
5048 			      size_t count)
5049 {
5050 	int delta_hosts;
5051 
5052 	if (sscanf(buf, "%d", &delta_hosts) != 1)
5053 		return -EINVAL;
5054 	if (delta_hosts > 0) {
5055 		do {
5056 			sdebug_add_adapter();
5057 		} while (--delta_hosts);
5058 	} else if (delta_hosts < 0) {
5059 		do {
5060 			sdebug_remove_adapter();
5061 		} while (++delta_hosts);
5062 	}
5063 	return count;
5064 }
5065 static DRIVER_ATTR_RW(add_host);
5066 
5067 static ssize_t vpd_use_hostno_show(struct device_driver *ddp, char *buf)
5068 {
5069 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_vpd_use_hostno);
5070 }
5071 static ssize_t vpd_use_hostno_store(struct device_driver *ddp, const char *buf,
5072 				    size_t count)
5073 {
5074 	int n;
5075 
5076 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
5077 		sdebug_vpd_use_hostno = n;
5078 		return count;
5079 	}
5080 	return -EINVAL;
5081 }
5082 static DRIVER_ATTR_RW(vpd_use_hostno);
5083 
5084 static ssize_t statistics_show(struct device_driver *ddp, char *buf)
5085 {
5086 	return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_statistics);
5087 }
5088 static ssize_t statistics_store(struct device_driver *ddp, const char *buf,
5089 				size_t count)
5090 {
5091 	int n;
5092 
5093 	if ((count > 0) && (sscanf(buf, "%d", &n) == 1) && (n >= 0)) {
5094 		if (n > 0)
5095 			sdebug_statistics = true;
5096 		else {
5097 			clear_queue_stats();
5098 			sdebug_statistics = false;
5099 		}
5100 		return count;
5101 	}
5102 	return -EINVAL;
5103 }
5104 static DRIVER_ATTR_RW(statistics);
5105 
5106 static ssize_t sector_size_show(struct device_driver *ddp, char *buf)
5107 {
5108 	return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_sector_size);
5109 }
5110 static DRIVER_ATTR_RO(sector_size);
5111 
5112 static ssize_t submit_queues_show(struct device_driver *ddp, char *buf)
5113 {
5114 	return scnprintf(buf, PAGE_SIZE, "%d\n", submit_queues);
5115 }
5116 static DRIVER_ATTR_RO(submit_queues);
5117 
5118 static ssize_t dix_show(struct device_driver *ddp, char *buf)
5119 {
5120 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dix);
5121 }
5122 static DRIVER_ATTR_RO(dix);
5123 
5124 static ssize_t dif_show(struct device_driver *ddp, char *buf)
5125 {
5126 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dif);
5127 }
5128 static DRIVER_ATTR_RO(dif);
5129 
5130 static ssize_t guard_show(struct device_driver *ddp, char *buf)
5131 {
5132 	return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_guard);
5133 }
5134 static DRIVER_ATTR_RO(guard);
5135 
5136 static ssize_t ato_show(struct device_driver *ddp, char *buf)
5137 {
5138 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ato);
5139 }
5140 static DRIVER_ATTR_RO(ato);
5141 
5142 static ssize_t map_show(struct device_driver *ddp, char *buf)
5143 {
5144 	ssize_t count;
5145 
5146 	if (!scsi_debug_lbp())
5147 		return scnprintf(buf, PAGE_SIZE, "0-%u\n",
5148 				 sdebug_store_sectors);
5149 
5150 	count = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
5151 			  (int)map_size, map_storep);
5152 	buf[count++] = '\n';
5153 	buf[count] = '\0';
5154 
5155 	return count;
5156 }
5157 static DRIVER_ATTR_RO(map);
5158 
5159 static ssize_t removable_show(struct device_driver *ddp, char *buf)
5160 {
5161 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_removable ? 1 : 0);
5162 }
5163 static ssize_t removable_store(struct device_driver *ddp, const char *buf,
5164 			       size_t count)
5165 {
5166 	int n;
5167 
5168 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
5169 		sdebug_removable = (n > 0);
5170 		return count;
5171 	}
5172 	return -EINVAL;
5173 }
5174 static DRIVER_ATTR_RW(removable);
5175 
5176 static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
5177 {
5178 	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_host_lock);
5179 }
5180 /* N.B. sdebug_host_lock does nothing, kept for backward compatibility */
5181 static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
5182 			       size_t count)
5183 {
5184 	int n;
5185 
5186 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
5187 		sdebug_host_lock = (n > 0);
5188 		return count;
5189 	}
5190 	return -EINVAL;
5191 }
5192 static DRIVER_ATTR_RW(host_lock);
5193 
5194 static ssize_t strict_show(struct device_driver *ddp, char *buf)
5195 {
5196 	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_strict);
5197 }
5198 static ssize_t strict_store(struct device_driver *ddp, const char *buf,
5199 			    size_t count)
5200 {
5201 	int n;
5202 
5203 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
5204 		sdebug_strict = (n > 0);
5205 		return count;
5206 	}
5207 	return -EINVAL;
5208 }
5209 static DRIVER_ATTR_RW(strict);
5210 
5211 static ssize_t uuid_ctl_show(struct device_driver *ddp, char *buf)
5212 {
5213 	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_uuid_ctl);
5214 }
5215 static DRIVER_ATTR_RO(uuid_ctl);
5216 
5217 static ssize_t cdb_len_show(struct device_driver *ddp, char *buf)
5218 {
5219 	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_cdb_len);
5220 }
5221 static ssize_t cdb_len_store(struct device_driver *ddp, const char *buf,
5222 			     size_t count)
5223 {
5224 	int ret, n;
5225 
5226 	ret = kstrtoint(buf, 0, &n);
5227 	if (ret)
5228 		return ret;
5229 	sdebug_cdb_len = n;
5230 	all_config_cdb_len();
5231 	return count;
5232 }
5233 static DRIVER_ATTR_RW(cdb_len);
5234 
5235 
5236 /* Note: The following array creates attribute files in the
5237    /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
5238    files (over those found in the /sys/module/scsi_debug/parameters
5239    directory) is that auxiliary actions can be triggered when an attribute
5240    is changed. For example see: sdebug_add_host_store() above.
5241  */
5242 
5243 static struct attribute *sdebug_drv_attrs[] = {
5244 	&driver_attr_delay.attr,
5245 	&driver_attr_opts.attr,
5246 	&driver_attr_ptype.attr,
5247 	&driver_attr_dsense.attr,
5248 	&driver_attr_fake_rw.attr,
5249 	&driver_attr_no_lun_0.attr,
5250 	&driver_attr_num_tgts.attr,
5251 	&driver_attr_dev_size_mb.attr,
5252 	&driver_attr_num_parts.attr,
5253 	&driver_attr_every_nth.attr,
5254 	&driver_attr_max_luns.attr,
5255 	&driver_attr_max_queue.attr,
5256 	&driver_attr_no_uld.attr,
5257 	&driver_attr_scsi_level.attr,
5258 	&driver_attr_virtual_gb.attr,
5259 	&driver_attr_add_host.attr,
5260 	&driver_attr_vpd_use_hostno.attr,
5261 	&driver_attr_sector_size.attr,
5262 	&driver_attr_statistics.attr,
5263 	&driver_attr_submit_queues.attr,
5264 	&driver_attr_dix.attr,
5265 	&driver_attr_dif.attr,
5266 	&driver_attr_guard.attr,
5267 	&driver_attr_ato.attr,
5268 	&driver_attr_map.attr,
5269 	&driver_attr_removable.attr,
5270 	&driver_attr_host_lock.attr,
5271 	&driver_attr_ndelay.attr,
5272 	&driver_attr_strict.attr,
5273 	&driver_attr_uuid_ctl.attr,
5274 	&driver_attr_cdb_len.attr,
5275 	NULL,
5276 };
5277 ATTRIBUTE_GROUPS(sdebug_drv);
5278 
5279 static struct device *pseudo_primary;
5280 
5281 static int __init scsi_debug_init(void)
5282 {
5283 	unsigned long sz;
5284 	int host_to_add;
5285 	int k;
5286 	int ret;
5287 
5288 	atomic_set(&retired_max_queue, 0);
5289 
5290 	if (sdebug_ndelay >= 1000 * 1000 * 1000) {
5291 		pr_warn("ndelay must be less than 1 second, ignored\n");
5292 		sdebug_ndelay = 0;
5293 	} else if (sdebug_ndelay > 0)
5294 		sdebug_jdelay = JDELAY_OVERRIDDEN;
5295 
5296 	switch (sdebug_sector_size) {
5297 	case  512:
5298 	case 1024:
5299 	case 2048:
5300 	case 4096:
5301 		break;
5302 	default:
5303 		pr_err("invalid sector_size %d\n", sdebug_sector_size);
5304 		return -EINVAL;
5305 	}
5306 
5307 	switch (sdebug_dif) {
5308 	case T10_PI_TYPE0_PROTECTION:
5309 		break;
5310 	case T10_PI_TYPE1_PROTECTION:
5311 	case T10_PI_TYPE2_PROTECTION:
5312 	case T10_PI_TYPE3_PROTECTION:
5313 		have_dif_prot = true;
5314 		break;
5315 
5316 	default:
5317 		pr_err("dif must be 0, 1, 2 or 3\n");
5318 		return -EINVAL;
5319 	}
5320 
5321 	if (sdebug_guard > 1) {
5322 		pr_err("guard must be 0 or 1\n");
5323 		return -EINVAL;
5324 	}
5325 
5326 	if (sdebug_ato > 1) {
5327 		pr_err("ato must be 0 or 1\n");
5328 		return -EINVAL;
5329 	}
5330 
5331 	if (sdebug_physblk_exp > 15) {
5332 		pr_err("invalid physblk_exp %u\n", sdebug_physblk_exp);
5333 		return -EINVAL;
5334 	}
5335 	if (sdebug_max_luns > 256) {
5336 		pr_warn("max_luns can be no more than 256, use default\n");
5337 		sdebug_max_luns = DEF_MAX_LUNS;
5338 	}
5339 
5340 	if (sdebug_lowest_aligned > 0x3fff) {
5341 		pr_err("lowest_aligned too big: %u\n", sdebug_lowest_aligned);
5342 		return -EINVAL;
5343 	}
5344 
5345 	if (submit_queues < 1) {
5346 		pr_err("submit_queues must be 1 or more\n");
5347 		return -EINVAL;
5348 	}
5349 	sdebug_q_arr = kcalloc(submit_queues, sizeof(struct sdebug_queue),
5350 			       GFP_KERNEL);
5351 	if (sdebug_q_arr == NULL)
5352 		return -ENOMEM;
5353 	for (k = 0; k < submit_queues; ++k)
5354 		spin_lock_init(&sdebug_q_arr[k].qc_lock);
5355 
5356 	if (sdebug_dev_size_mb < 1)
5357 		sdebug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
5358 	sz = (unsigned long)sdebug_dev_size_mb * 1048576;
5359 	sdebug_store_sectors = sz / sdebug_sector_size;
5360 	sdebug_capacity = get_sdebug_capacity();
5361 
5362 	/* play around with geometry, don't waste too much on track 0 */
5363 	sdebug_heads = 8;
5364 	sdebug_sectors_per = 32;
5365 	if (sdebug_dev_size_mb >= 256)
5366 		sdebug_heads = 64;
5367 	else if (sdebug_dev_size_mb >= 16)
5368 		sdebug_heads = 32;
5369 	sdebug_cylinders_per = (unsigned long)sdebug_capacity /
5370 			       (sdebug_sectors_per * sdebug_heads);
5371 	if (sdebug_cylinders_per >= 1024) {
5372 		/* other LLDs do this; implies >= 1GB ram disk ... */
5373 		sdebug_heads = 255;
5374 		sdebug_sectors_per = 63;
5375 		sdebug_cylinders_per = (unsigned long)sdebug_capacity /
5376 			       (sdebug_sectors_per * sdebug_heads);
5377 	}
5378 
5379 	if (sdebug_fake_rw == 0) {
5380 		fake_storep = vmalloc(sz);
5381 		if (NULL == fake_storep) {
5382 			pr_err("out of memory, 1\n");
5383 			ret = -ENOMEM;
5384 			goto free_q_arr;
5385 		}
5386 		memset(fake_storep, 0, sz);
5387 		if (sdebug_num_parts > 0)
5388 			sdebug_build_parts(fake_storep, sz);
5389 	}
5390 
5391 	if (sdebug_dix) {
5392 		int dif_size;
5393 
5394 		dif_size = sdebug_store_sectors * sizeof(struct t10_pi_tuple);
5395 		dif_storep = vmalloc(dif_size);
5396 
5397 		pr_err("dif_storep %u bytes @ %p\n", dif_size, dif_storep);
5398 
5399 		if (dif_storep == NULL) {
5400 			pr_err("out of mem. (DIX)\n");
5401 			ret = -ENOMEM;
5402 			goto free_vm;
5403 		}
5404 
5405 		memset(dif_storep, 0xff, dif_size);
5406 	}
5407 
5408 	/* Logical Block Provisioning */
5409 	if (scsi_debug_lbp()) {
5410 		sdebug_unmap_max_blocks =
5411 			clamp(sdebug_unmap_max_blocks, 0U, 0xffffffffU);
5412 
5413 		sdebug_unmap_max_desc =
5414 			clamp(sdebug_unmap_max_desc, 0U, 256U);
5415 
5416 		sdebug_unmap_granularity =
5417 			clamp(sdebug_unmap_granularity, 1U, 0xffffffffU);
5418 
5419 		if (sdebug_unmap_alignment &&
5420 		    sdebug_unmap_granularity <=
5421 		    sdebug_unmap_alignment) {
5422 			pr_err("ERR: unmap_granularity <= unmap_alignment\n");
5423 			ret = -EINVAL;
5424 			goto free_vm;
5425 		}
5426 
5427 		map_size = lba_to_map_index(sdebug_store_sectors - 1) + 1;
5428 		map_storep = vmalloc(BITS_TO_LONGS(map_size) * sizeof(long));
5429 
5430 		pr_info("%lu provisioning blocks\n", map_size);
5431 
5432 		if (map_storep == NULL) {
5433 			pr_err("out of mem. (MAP)\n");
5434 			ret = -ENOMEM;
5435 			goto free_vm;
5436 		}
5437 
5438 		bitmap_zero(map_storep, map_size);
5439 
5440 		/* Map first 1KB for partition table */
5441 		if (sdebug_num_parts)
5442 			map_region(0, 2);
5443 	}
5444 
5445 	pseudo_primary = root_device_register("pseudo_0");
5446 	if (IS_ERR(pseudo_primary)) {
5447 		pr_warn("root_device_register() error\n");
5448 		ret = PTR_ERR(pseudo_primary);
5449 		goto free_vm;
5450 	}
5451 	ret = bus_register(&pseudo_lld_bus);
5452 	if (ret < 0) {
5453 		pr_warn("bus_register error: %d\n", ret);
5454 		goto dev_unreg;
5455 	}
5456 	ret = driver_register(&sdebug_driverfs_driver);
5457 	if (ret < 0) {
5458 		pr_warn("driver_register error: %d\n", ret);
5459 		goto bus_unreg;
5460 	}
5461 
5462 	host_to_add = sdebug_add_host;
5463 	sdebug_add_host = 0;
5464 
5465 	for (k = 0; k < host_to_add; k++) {
5466 		if (sdebug_add_adapter()) {
5467 			pr_err("sdebug_add_adapter failed k=%d\n", k);
5468 			break;
5469 		}
5470 	}
5471 
5472 	if (sdebug_verbose)
5473 		pr_info("built %d host(s)\n", sdebug_add_host);
5474 
5475 	return 0;
5476 
5477 bus_unreg:
5478 	bus_unregister(&pseudo_lld_bus);
5479 dev_unreg:
5480 	root_device_unregister(pseudo_primary);
5481 free_vm:
5482 	vfree(map_storep);
5483 	vfree(dif_storep);
5484 	vfree(fake_storep);
5485 free_q_arr:
5486 	kfree(sdebug_q_arr);
5487 	return ret;
5488 }
5489 
5490 static void __exit scsi_debug_exit(void)
5491 {
5492 	int k = sdebug_add_host;
5493 
5494 	stop_all_queued();
5495 	free_all_queued();
5496 	for (; k; k--)
5497 		sdebug_remove_adapter();
5498 	driver_unregister(&sdebug_driverfs_driver);
5499 	bus_unregister(&pseudo_lld_bus);
5500 	root_device_unregister(pseudo_primary);
5501 
5502 	vfree(map_storep);
5503 	vfree(dif_storep);
5504 	vfree(fake_storep);
5505 	kfree(sdebug_q_arr);
5506 }
5507 
5508 device_initcall(scsi_debug_init);
5509 module_exit(scsi_debug_exit);
5510 
5511 static void sdebug_release_adapter(struct device *dev)
5512 {
5513 	struct sdebug_host_info *sdbg_host;
5514 
5515 	sdbg_host = to_sdebug_host(dev);
5516 	kfree(sdbg_host);
5517 }
5518 
5519 static int sdebug_add_adapter(void)
5520 {
5521 	int k, devs_per_host;
5522 	int error = 0;
5523 	struct sdebug_host_info *sdbg_host;
5524 	struct sdebug_dev_info *sdbg_devinfo, *tmp;
5525 
5526 	sdbg_host = kzalloc(sizeof(*sdbg_host), GFP_KERNEL);
5527 	if (sdbg_host == NULL) {
5528 		pr_err("out of memory at line %d\n", __LINE__);
5529 		return -ENOMEM;
5530 	}
5531 
5532 	INIT_LIST_HEAD(&sdbg_host->dev_info_list);
5533 
5534 	devs_per_host = sdebug_num_tgts * sdebug_max_luns;
5535 	for (k = 0; k < devs_per_host; k++) {
5536 		sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
5537 		if (!sdbg_devinfo) {
5538 			pr_err("out of memory at line %d\n", __LINE__);
5539 			error = -ENOMEM;
5540 			goto clean;
5541 		}
5542 	}
5543 
5544 	spin_lock(&sdebug_host_list_lock);
5545 	list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
5546 	spin_unlock(&sdebug_host_list_lock);
5547 
5548 	sdbg_host->dev.bus = &pseudo_lld_bus;
5549 	sdbg_host->dev.parent = pseudo_primary;
5550 	sdbg_host->dev.release = &sdebug_release_adapter;
5551 	dev_set_name(&sdbg_host->dev, "adapter%d", sdebug_add_host);
5552 
5553 	error = device_register(&sdbg_host->dev);
5554 
5555 	if (error)
5556 		goto clean;
5557 
5558 	++sdebug_add_host;
5559 	return error;
5560 
5561 clean:
5562 	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5563 				 dev_list) {
5564 		list_del(&sdbg_devinfo->dev_list);
5565 		kfree(sdbg_devinfo);
5566 	}
5567 
5568 	kfree(sdbg_host);
5569 	return error;
5570 }
5571 
5572 static void sdebug_remove_adapter(void)
5573 {
5574 	struct sdebug_host_info *sdbg_host = NULL;
5575 
5576 	spin_lock(&sdebug_host_list_lock);
5577 	if (!list_empty(&sdebug_host_list)) {
5578 		sdbg_host = list_entry(sdebug_host_list.prev,
5579 				       struct sdebug_host_info, host_list);
5580 		list_del(&sdbg_host->host_list);
5581 	}
5582 	spin_unlock(&sdebug_host_list_lock);
5583 
5584 	if (!sdbg_host)
5585 		return;
5586 
5587 	device_unregister(&sdbg_host->dev);
5588 	--sdebug_add_host;
5589 }
5590 
5591 static int sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
5592 {
5593 	int num_in_q = 0;
5594 	struct sdebug_dev_info *devip;
5595 
5596 	block_unblock_all_queues(true);
5597 	devip = (struct sdebug_dev_info *)sdev->hostdata;
5598 	if (NULL == devip) {
5599 		block_unblock_all_queues(false);
5600 		return	-ENODEV;
5601 	}
5602 	num_in_q = atomic_read(&devip->num_in_q);
5603 
5604 	if (qdepth < 1)
5605 		qdepth = 1;
5606 	/* allow to exceed max host qc_arr elements for testing */
5607 	if (qdepth > SDEBUG_CANQUEUE + 10)
5608 		qdepth = SDEBUG_CANQUEUE + 10;
5609 	scsi_change_queue_depth(sdev, qdepth);
5610 
5611 	if (SDEBUG_OPT_Q_NOISE & sdebug_opts) {
5612 		sdev_printk(KERN_INFO, sdev, "%s: qdepth=%d, num_in_q=%d\n",
5613 			    __func__, qdepth, num_in_q);
5614 	}
5615 	block_unblock_all_queues(false);
5616 	return sdev->queue_depth;
5617 }
5618 
5619 static bool fake_timeout(struct scsi_cmnd *scp)
5620 {
5621 	if (0 == (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth))) {
5622 		if (sdebug_every_nth < -1)
5623 			sdebug_every_nth = -1;
5624 		if (SDEBUG_OPT_TIMEOUT & sdebug_opts)
5625 			return true; /* ignore command causing timeout */
5626 		else if (SDEBUG_OPT_MAC_TIMEOUT & sdebug_opts &&
5627 			 scsi_medium_access_command(scp))
5628 			return true; /* time out reads and writes */
5629 	}
5630 	return false;
5631 }
5632 
5633 static bool fake_host_busy(struct scsi_cmnd *scp)
5634 {
5635 	return (sdebug_opts & SDEBUG_OPT_HOST_BUSY) &&
5636 		(atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) == 0;
5637 }
5638 
5639 static int scsi_debug_queuecommand(struct Scsi_Host *shost,
5640 				   struct scsi_cmnd *scp)
5641 {
5642 	u8 sdeb_i;
5643 	struct scsi_device *sdp = scp->device;
5644 	const struct opcode_info_t *oip;
5645 	const struct opcode_info_t *r_oip;
5646 	struct sdebug_dev_info *devip;
5647 	u8 *cmd = scp->cmnd;
5648 	int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
5649 	int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *) = NULL;
5650 	int k, na;
5651 	int errsts = 0;
5652 	u32 flags;
5653 	u16 sa;
5654 	u8 opcode = cmd[0];
5655 	bool has_wlun_rl;
5656 
5657 	scsi_set_resid(scp, 0);
5658 	if (sdebug_statistics)
5659 		atomic_inc(&sdebug_cmnd_count);
5660 	if (unlikely(sdebug_verbose &&
5661 		     !(SDEBUG_OPT_NO_CDB_NOISE & sdebug_opts))) {
5662 		char b[120];
5663 		int n, len, sb;
5664 
5665 		len = scp->cmd_len;
5666 		sb = (int)sizeof(b);
5667 		if (len > 32)
5668 			strcpy(b, "too long, over 32 bytes");
5669 		else {
5670 			for (k = 0, n = 0; k < len && n < sb; ++k)
5671 				n += scnprintf(b + n, sb - n, "%02x ",
5672 					       (u32)cmd[k]);
5673 		}
5674 		sdev_printk(KERN_INFO, sdp, "%s: tag=%#x, cmd %s\n", my_name,
5675 			    blk_mq_unique_tag(scp->request), b);
5676 	}
5677 	if (fake_host_busy(scp))
5678 		return SCSI_MLQUEUE_HOST_BUSY;
5679 	has_wlun_rl = (sdp->lun == SCSI_W_LUN_REPORT_LUNS);
5680 	if (unlikely((sdp->lun >= sdebug_max_luns) && !has_wlun_rl))
5681 		goto err_out;
5682 
5683 	sdeb_i = opcode_ind_arr[opcode];	/* fully mapped */
5684 	oip = &opcode_info_arr[sdeb_i];		/* safe if table consistent */
5685 	devip = (struct sdebug_dev_info *)sdp->hostdata;
5686 	if (unlikely(!devip)) {
5687 		devip = find_build_dev_info(sdp);
5688 		if (NULL == devip)
5689 			goto err_out;
5690 	}
5691 	na = oip->num_attached;
5692 	r_pfp = oip->pfp;
5693 	if (na) {	/* multiple commands with this opcode */
5694 		r_oip = oip;
5695 		if (FF_SA & r_oip->flags) {
5696 			if (F_SA_LOW & oip->flags)
5697 				sa = 0x1f & cmd[1];
5698 			else
5699 				sa = get_unaligned_be16(cmd + 8);
5700 			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5701 				if (opcode == oip->opcode && sa == oip->sa)
5702 					break;
5703 			}
5704 		} else {   /* since no service action only check opcode */
5705 			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5706 				if (opcode == oip->opcode)
5707 					break;
5708 			}
5709 		}
5710 		if (k > na) {
5711 			if (F_SA_LOW & r_oip->flags)
5712 				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 4);
5713 			else if (F_SA_HIGH & r_oip->flags)
5714 				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 8, 7);
5715 			else
5716 				mk_sense_invalid_opcode(scp);
5717 			goto check_cond;
5718 		}
5719 	}	/* else (when na==0) we assume the oip is a match */
5720 	flags = oip->flags;
5721 	if (unlikely(F_INV_OP & flags)) {
5722 		mk_sense_invalid_opcode(scp);
5723 		goto check_cond;
5724 	}
5725 	if (unlikely(has_wlun_rl && !(F_RL_WLUN_OK & flags))) {
5726 		if (sdebug_verbose)
5727 			sdev_printk(KERN_INFO, sdp, "%s: Opcode 0x%x not%s\n",
5728 				    my_name, opcode, " supported for wlun");
5729 		mk_sense_invalid_opcode(scp);
5730 		goto check_cond;
5731 	}
5732 	if (unlikely(sdebug_strict)) {	/* check cdb against mask */
5733 		u8 rem;
5734 		int j;
5735 
5736 		for (k = 1; k < oip->len_mask[0] && k < 16; ++k) {
5737 			rem = ~oip->len_mask[k] & cmd[k];
5738 			if (rem) {
5739 				for (j = 7; j >= 0; --j, rem <<= 1) {
5740 					if (0x80 & rem)
5741 						break;
5742 				}
5743 				mk_sense_invalid_fld(scp, SDEB_IN_CDB, k, j);
5744 				goto check_cond;
5745 			}
5746 		}
5747 	}
5748 	if (unlikely(!(F_SKIP_UA & flags) &&
5749 		     find_first_bit(devip->uas_bm,
5750 				    SDEBUG_NUM_UAS) != SDEBUG_NUM_UAS)) {
5751 		errsts = make_ua(scp, devip);
5752 		if (errsts)
5753 			goto check_cond;
5754 	}
5755 	if (unlikely((F_M_ACCESS & flags) && atomic_read(&devip->stopped))) {
5756 		mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
5757 		if (sdebug_verbose)
5758 			sdev_printk(KERN_INFO, sdp, "%s reports: Not ready: "
5759 				    "%s\n", my_name, "initializing command "
5760 				    "required");
5761 		errsts = check_condition_result;
5762 		goto fini;
5763 	}
5764 	if (sdebug_fake_rw && (F_FAKE_RW & flags))
5765 		goto fini;
5766 	if (unlikely(sdebug_every_nth)) {
5767 		if (fake_timeout(scp))
5768 			return 0;	/* ignore command: make trouble */
5769 	}
5770 	if (likely(oip->pfp))
5771 		pfp = oip->pfp;	/* calls a resp_* function */
5772 	else
5773 		pfp = r_pfp;    /* if leaf function ptr NULL, try the root's */
5774 
5775 fini:
5776 	if (F_DELAY_OVERR & flags)
5777 		return schedule_resp(scp, devip, errsts, pfp, 0, 0);
5778 	else if ((sdebug_jdelay || sdebug_ndelay) && (flags & F_LONG_DELAY)) {
5779 		/*
5780 		 * If any delay is active, want F_LONG_DELAY to be at least 1
5781 		 * second and if sdebug_jdelay>0 want a long delay of that
5782 		 * many seconds.
5783 		 */
5784 		int jdelay = (sdebug_jdelay < 2) ? 1 : sdebug_jdelay;
5785 
5786 		jdelay = mult_frac(USER_HZ * jdelay, HZ, USER_HZ);
5787 		return schedule_resp(scp, devip, errsts, pfp, jdelay, 0);
5788 	} else
5789 		return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay,
5790 				     sdebug_ndelay);
5791 check_cond:
5792 	return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0);
5793 err_out:
5794 	return schedule_resp(scp, NULL, DID_NO_CONNECT << 16, NULL, 0, 0);
5795 }
5796 
5797 static struct scsi_host_template sdebug_driver_template = {
5798 	.show_info =		scsi_debug_show_info,
5799 	.write_info =		scsi_debug_write_info,
5800 	.proc_name =		sdebug_proc_name,
5801 	.name =			"SCSI DEBUG",
5802 	.info =			scsi_debug_info,
5803 	.slave_alloc =		scsi_debug_slave_alloc,
5804 	.slave_configure =	scsi_debug_slave_configure,
5805 	.slave_destroy =	scsi_debug_slave_destroy,
5806 	.ioctl =		scsi_debug_ioctl,
5807 	.queuecommand =		scsi_debug_queuecommand,
5808 	.change_queue_depth =	sdebug_change_qdepth,
5809 	.eh_abort_handler =	scsi_debug_abort,
5810 	.eh_device_reset_handler = scsi_debug_device_reset,
5811 	.eh_target_reset_handler = scsi_debug_target_reset,
5812 	.eh_bus_reset_handler = scsi_debug_bus_reset,
5813 	.eh_host_reset_handler = scsi_debug_host_reset,
5814 	.can_queue =		SDEBUG_CANQUEUE,
5815 	.this_id =		7,
5816 	.sg_tablesize =		SG_MAX_SEGMENTS,
5817 	.cmd_per_lun =		DEF_CMD_PER_LUN,
5818 	.max_sectors =		-1U,
5819 	.use_clustering = 	DISABLE_CLUSTERING,
5820 	.module =		THIS_MODULE,
5821 	.track_queue_depth =	1,
5822 };
5823 
5824 static int sdebug_driver_probe(struct device *dev)
5825 {
5826 	int error = 0;
5827 	struct sdebug_host_info *sdbg_host;
5828 	struct Scsi_Host *hpnt;
5829 	int hprot;
5830 
5831 	sdbg_host = to_sdebug_host(dev);
5832 
5833 	sdebug_driver_template.can_queue = sdebug_max_queue;
5834 	if (sdebug_clustering)
5835 		sdebug_driver_template.use_clustering = ENABLE_CLUSTERING;
5836 	hpnt = scsi_host_alloc(&sdebug_driver_template, sizeof(sdbg_host));
5837 	if (NULL == hpnt) {
5838 		pr_err("scsi_host_alloc failed\n");
5839 		error = -ENODEV;
5840 		return error;
5841 	}
5842 	if (submit_queues > nr_cpu_ids) {
5843 		pr_warn("%s: trim submit_queues (was %d) to nr_cpu_ids=%u\n",
5844 			my_name, submit_queues, nr_cpu_ids);
5845 		submit_queues = nr_cpu_ids;
5846 	}
5847 	/* Decide whether to tell scsi subsystem that we want mq */
5848 	/* Following should give the same answer for each host */
5849 	if (shost_use_blk_mq(hpnt))
5850 		hpnt->nr_hw_queues = submit_queues;
5851 
5852 	sdbg_host->shost = hpnt;
5853 	*((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
5854 	if ((hpnt->this_id >= 0) && (sdebug_num_tgts > hpnt->this_id))
5855 		hpnt->max_id = sdebug_num_tgts + 1;
5856 	else
5857 		hpnt->max_id = sdebug_num_tgts;
5858 	/* = sdebug_max_luns; */
5859 	hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
5860 
5861 	hprot = 0;
5862 
5863 	switch (sdebug_dif) {
5864 
5865 	case T10_PI_TYPE1_PROTECTION:
5866 		hprot = SHOST_DIF_TYPE1_PROTECTION;
5867 		if (sdebug_dix)
5868 			hprot |= SHOST_DIX_TYPE1_PROTECTION;
5869 		break;
5870 
5871 	case T10_PI_TYPE2_PROTECTION:
5872 		hprot = SHOST_DIF_TYPE2_PROTECTION;
5873 		if (sdebug_dix)
5874 			hprot |= SHOST_DIX_TYPE2_PROTECTION;
5875 		break;
5876 
5877 	case T10_PI_TYPE3_PROTECTION:
5878 		hprot = SHOST_DIF_TYPE3_PROTECTION;
5879 		if (sdebug_dix)
5880 			hprot |= SHOST_DIX_TYPE3_PROTECTION;
5881 		break;
5882 
5883 	default:
5884 		if (sdebug_dix)
5885 			hprot |= SHOST_DIX_TYPE0_PROTECTION;
5886 		break;
5887 	}
5888 
5889 	scsi_host_set_prot(hpnt, hprot);
5890 
5891 	if (have_dif_prot || sdebug_dix)
5892 		pr_info("host protection%s%s%s%s%s%s%s\n",
5893 			(hprot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
5894 			(hprot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
5895 			(hprot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
5896 			(hprot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
5897 			(hprot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
5898 			(hprot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
5899 			(hprot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
5900 
5901 	if (sdebug_guard == 1)
5902 		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
5903 	else
5904 		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
5905 
5906 	sdebug_verbose = !!(SDEBUG_OPT_NOISE & sdebug_opts);
5907 	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & sdebug_opts);
5908 	if (sdebug_every_nth)	/* need stats counters for every_nth */
5909 		sdebug_statistics = true;
5910 	error = scsi_add_host(hpnt, &sdbg_host->dev);
5911 	if (error) {
5912 		pr_err("scsi_add_host failed\n");
5913 		error = -ENODEV;
5914 		scsi_host_put(hpnt);
5915 	} else
5916 		scsi_scan_host(hpnt);
5917 
5918 	return error;
5919 }
5920 
5921 static int sdebug_driver_remove(struct device *dev)
5922 {
5923 	struct sdebug_host_info *sdbg_host;
5924 	struct sdebug_dev_info *sdbg_devinfo, *tmp;
5925 
5926 	sdbg_host = to_sdebug_host(dev);
5927 
5928 	if (!sdbg_host) {
5929 		pr_err("Unable to locate host info\n");
5930 		return -ENODEV;
5931 	}
5932 
5933 	scsi_remove_host(sdbg_host->shost);
5934 
5935 	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5936 				 dev_list) {
5937 		list_del(&sdbg_devinfo->dev_list);
5938 		kfree(sdbg_devinfo);
5939 	}
5940 
5941 	scsi_host_put(sdbg_host->shost);
5942 	return 0;
5943 }
5944 
5945 static int pseudo_lld_bus_match(struct device *dev,
5946 				struct device_driver *dev_driver)
5947 {
5948 	return 1;
5949 }
5950 
5951 static struct bus_type pseudo_lld_bus = {
5952 	.name = "pseudo",
5953 	.match = pseudo_lld_bus_match,
5954 	.probe = sdebug_driver_probe,
5955 	.remove = sdebug_driver_remove,
5956 	.drv_groups = sdebug_drv_groups,
5957 };
5958