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