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