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