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