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