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