Linux 6.9-rc1
[linux-2.6-microblaze.git] / drivers / scsi / scsi_debug.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
4  *  Copyright (C) 1992  Eric Youngdale
5  *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
6  *  to make sure that we are not getting blocks mixed up, and PANIC if
7  *  anything out of the ordinary is seen.
8  * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9  *
10  * Copyright (C) 2001 - 2021 Douglas Gilbert
11  *
12  *  For documentation see http://sg.danny.cz/sg/scsi_debug.html
13  */
14
15
16 #define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
17
18 #include <linux/module.h>
19 #include <linux/align.h>
20 #include <linux/kernel.h>
21 #include <linux/errno.h>
22 #include <linux/jiffies.h>
23 #include <linux/slab.h>
24 #include <linux/types.h>
25 #include <linux/string.h>
26 #include <linux/fs.h>
27 #include <linux/init.h>
28 #include <linux/proc_fs.h>
29 #include <linux/vmalloc.h>
30 #include <linux/moduleparam.h>
31 #include <linux/scatterlist.h>
32 #include <linux/blkdev.h>
33 #include <linux/crc-t10dif.h>
34 #include <linux/spinlock.h>
35 #include <linux/interrupt.h>
36 #include <linux/atomic.h>
37 #include <linux/hrtimer.h>
38 #include <linux/uuid.h>
39 #include <linux/t10-pi.h>
40 #include <linux/msdos_partition.h>
41 #include <linux/random.h>
42 #include <linux/xarray.h>
43 #include <linux/prefetch.h>
44 #include <linux/debugfs.h>
45 #include <linux/async.h>
46 #include <linux/cleanup.h>
47
48 #include <net/checksum.h>
49
50 #include <asm/unaligned.h>
51
52 #include <scsi/scsi.h>
53 #include <scsi/scsi_cmnd.h>
54 #include <scsi/scsi_device.h>
55 #include <scsi/scsi_host.h>
56 #include <scsi/scsicam.h>
57 #include <scsi/scsi_eh.h>
58 #include <scsi/scsi_tcq.h>
59 #include <scsi/scsi_dbg.h>
60
61 #include "sd.h"
62 #include "scsi_logging.h"
63
64 /* make sure inq_product_rev string corresponds to this version */
65 #define SDEBUG_VERSION "0191"   /* format to fit INQUIRY revision field */
66 static const char *sdebug_version_date = "20210520";
67
68 #define MY_NAME "scsi_debug"
69
70 /* Additional Sense Code (ASC) */
71 #define NO_ADDITIONAL_SENSE 0x0
72 #define LOGICAL_UNIT_NOT_READY 0x4
73 #define LOGICAL_UNIT_COMMUNICATION_FAILURE 0x8
74 #define UNRECOVERED_READ_ERR 0x11
75 #define PARAMETER_LIST_LENGTH_ERR 0x1a
76 #define INVALID_OPCODE 0x20
77 #define LBA_OUT_OF_RANGE 0x21
78 #define INVALID_FIELD_IN_CDB 0x24
79 #define INVALID_FIELD_IN_PARAM_LIST 0x26
80 #define WRITE_PROTECTED 0x27
81 #define UA_RESET_ASC 0x29
82 #define UA_CHANGED_ASC 0x2a
83 #define TARGET_CHANGED_ASC 0x3f
84 #define LUNS_CHANGED_ASCQ 0x0e
85 #define INSUFF_RES_ASC 0x55
86 #define INSUFF_RES_ASCQ 0x3
87 #define POWER_ON_RESET_ASCQ 0x0
88 #define POWER_ON_OCCURRED_ASCQ 0x1
89 #define BUS_RESET_ASCQ 0x2      /* scsi bus reset occurred */
90 #define MODE_CHANGED_ASCQ 0x1   /* mode parameters changed */
91 #define CAPACITY_CHANGED_ASCQ 0x9
92 #define SAVING_PARAMS_UNSUP 0x39
93 #define TRANSPORT_PROBLEM 0x4b
94 #define THRESHOLD_EXCEEDED 0x5d
95 #define LOW_POWER_COND_ON 0x5e
96 #define MISCOMPARE_VERIFY_ASC 0x1d
97 #define MICROCODE_CHANGED_ASCQ 0x1      /* with TARGET_CHANGED_ASC */
98 #define MICROCODE_CHANGED_WO_RESET_ASCQ 0x16
99 #define WRITE_ERROR_ASC 0xc
100 #define UNALIGNED_WRITE_ASCQ 0x4
101 #define WRITE_BOUNDARY_ASCQ 0x5
102 #define READ_INVDATA_ASCQ 0x6
103 #define READ_BOUNDARY_ASCQ 0x7
104 #define ATTEMPT_ACCESS_GAP 0x9
105 #define INSUFF_ZONE_ASCQ 0xe
106
107 /* Additional Sense Code Qualifier (ASCQ) */
108 #define ACK_NAK_TO 0x3
109
110 /* Default values for driver parameters */
111 #define DEF_NUM_HOST   1
112 #define DEF_NUM_TGTS   1
113 #define DEF_MAX_LUNS   1
114 /* With these defaults, this driver will make 1 host with 1 target
115  * (id 0) containing 1 logical unit (lun 0). That is 1 device.
116  */
117 #define DEF_ATO 1
118 #define DEF_CDB_LEN 10
119 #define DEF_JDELAY   1          /* if > 0 unit is a jiffy */
120 #define DEF_DEV_SIZE_PRE_INIT   0
121 #define DEF_DEV_SIZE_MB   8
122 #define DEF_ZBC_DEV_SIZE_MB   128
123 #define DEF_DIF 0
124 #define DEF_DIX 0
125 #define DEF_PER_HOST_STORE false
126 #define DEF_D_SENSE   0
127 #define DEF_EVERY_NTH   0
128 #define DEF_FAKE_RW     0
129 #define DEF_GUARD 0
130 #define DEF_HOST_LOCK 0
131 #define DEF_LBPU 0
132 #define DEF_LBPWS 0
133 #define DEF_LBPWS10 0
134 #define DEF_LBPRZ 1
135 #define DEF_LOWEST_ALIGNED 0
136 #define DEF_NDELAY   0          /* if > 0 unit is a nanosecond */
137 #define DEF_NO_LUN_0   0
138 #define DEF_NUM_PARTS   0
139 #define DEF_OPTS   0
140 #define DEF_OPT_BLKS 1024
141 #define DEF_PHYSBLK_EXP 0
142 #define DEF_OPT_XFERLEN_EXP 0
143 #define DEF_PTYPE   TYPE_DISK
144 #define DEF_RANDOM false
145 #define DEF_REMOVABLE false
146 #define DEF_SCSI_LEVEL   7    /* INQUIRY, byte2 [6->SPC-4; 7->SPC-5] */
147 #define DEF_SECTOR_SIZE 512
148 #define DEF_UNMAP_ALIGNMENT 0
149 #define DEF_UNMAP_GRANULARITY 1
150 #define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
151 #define DEF_UNMAP_MAX_DESC 256
152 #define DEF_VIRTUAL_GB   0
153 #define DEF_VPD_USE_HOSTNO 1
154 #define DEF_WRITESAME_LENGTH 0xFFFF
155 #define DEF_STRICT 0
156 #define DEF_STATISTICS false
157 #define DEF_SUBMIT_QUEUES 1
158 #define DEF_TUR_MS_TO_READY 0
159 #define DEF_UUID_CTL 0
160 #define JDELAY_OVERRIDDEN -9999
161
162 /* Default parameters for ZBC drives */
163 #define DEF_ZBC_ZONE_SIZE_MB    128
164 #define DEF_ZBC_MAX_OPEN_ZONES  8
165 #define DEF_ZBC_NR_CONV_ZONES   1
166
167 #define SDEBUG_LUN_0_VAL 0
168
169 /* bit mask values for sdebug_opts */
170 #define SDEBUG_OPT_NOISE                1
171 #define SDEBUG_OPT_MEDIUM_ERR           2
172 #define SDEBUG_OPT_TIMEOUT              4
173 #define SDEBUG_OPT_RECOVERED_ERR        8
174 #define SDEBUG_OPT_TRANSPORT_ERR        16
175 #define SDEBUG_OPT_DIF_ERR              32
176 #define SDEBUG_OPT_DIX_ERR              64
177 #define SDEBUG_OPT_MAC_TIMEOUT          128
178 #define SDEBUG_OPT_SHORT_TRANSFER       0x100
179 #define SDEBUG_OPT_Q_NOISE              0x200
180 #define SDEBUG_OPT_ALL_TSF              0x400   /* ignore */
181 #define SDEBUG_OPT_RARE_TSF             0x800
182 #define SDEBUG_OPT_N_WCE                0x1000
183 #define SDEBUG_OPT_RESET_NOISE          0x2000
184 #define SDEBUG_OPT_NO_CDB_NOISE         0x4000
185 #define SDEBUG_OPT_HOST_BUSY            0x8000
186 #define SDEBUG_OPT_CMD_ABORT            0x10000
187 #define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \
188                               SDEBUG_OPT_RESET_NOISE)
189 #define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \
190                                   SDEBUG_OPT_TRANSPORT_ERR | \
191                                   SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \
192                                   SDEBUG_OPT_SHORT_TRANSFER | \
193                                   SDEBUG_OPT_HOST_BUSY | \
194                                   SDEBUG_OPT_CMD_ABORT)
195 #define SDEBUG_OPT_RECOV_DIF_DIX (SDEBUG_OPT_RECOVERED_ERR | \
196                                   SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR)
197
198 /* As indicated in SAM-5 and SPC-4 Unit Attentions (UAs) are returned in
199  * priority order. In the subset implemented here lower numbers have higher
200  * priority. The UA numbers should be a sequence starting from 0 with
201  * SDEBUG_NUM_UAS being 1 higher than the highest numbered UA. */
202 #define SDEBUG_UA_POR 0         /* Power on, reset, or bus device reset */
203 #define SDEBUG_UA_POOCCUR 1     /* Power on occurred */
204 #define SDEBUG_UA_BUS_RESET 2
205 #define SDEBUG_UA_MODE_CHANGED 3
206 #define SDEBUG_UA_CAPACITY_CHANGED 4
207 #define SDEBUG_UA_LUNS_CHANGED 5
208 #define SDEBUG_UA_MICROCODE_CHANGED 6   /* simulate firmware change */
209 #define SDEBUG_UA_MICROCODE_CHANGED_WO_RESET 7
210 #define SDEBUG_NUM_UAS 8
211
212 /* when 1==SDEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
213  * sector on read commands: */
214 #define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
215 #define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
216
217 /* SDEBUG_CANQUEUE is the maximum number of commands that can be queued
218  * (for response) per submit queue at one time. Can be reduced by max_queue
219  * option. Command responses are not queued when jdelay=0 and ndelay=0. The
220  * per-device DEF_CMD_PER_LUN can be changed via sysfs:
221  * /sys/class/scsi_device/<h:c:t:l>/device/queue_depth
222  * but cannot exceed SDEBUG_CANQUEUE .
223  */
224 #define SDEBUG_CANQUEUE_WORDS  3        /* a WORD is bits in a long */
225 #define SDEBUG_CANQUEUE  (SDEBUG_CANQUEUE_WORDS * BITS_PER_LONG)
226 #define DEF_CMD_PER_LUN  SDEBUG_CANQUEUE
227
228 /* UA - Unit Attention; SA - Service Action; SSU - Start Stop Unit */
229 #define F_D_IN                  1       /* Data-in command (e.g. READ) */
230 #define F_D_OUT                 2       /* Data-out command (e.g. WRITE) */
231 #define F_D_OUT_MAYBE           4       /* WRITE SAME, NDOB bit */
232 #define F_D_UNKN                8
233 #define F_RL_WLUN_OK            0x10    /* allowed with REPORT LUNS W-LUN */
234 #define F_SKIP_UA               0x20    /* bypass UAs (e.g. INQUIRY command) */
235 #define F_DELAY_OVERR           0x40    /* for commands like INQUIRY */
236 #define F_SA_LOW                0x80    /* SA is in cdb byte 1, bits 4 to 0 */
237 #define F_SA_HIGH               0x100   /* SA is in cdb bytes 8 and 9 */
238 #define F_INV_OP                0x200   /* invalid opcode (not supported) */
239 #define F_FAKE_RW               0x400   /* bypass resp_*() when fake_rw set */
240 #define F_M_ACCESS              0x800   /* media access, reacts to SSU state */
241 #define F_SSU_DELAY             0x1000  /* SSU command delay (long-ish) */
242 #define F_SYNC_DELAY            0x2000  /* SYNCHRONIZE CACHE delay */
243
244 /* Useful combinations of the above flags */
245 #define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
246 #define FF_MEDIA_IO (F_M_ACCESS | F_FAKE_RW)
247 #define FF_SA (F_SA_HIGH | F_SA_LOW)
248 #define F_LONG_DELAY            (F_SSU_DELAY | F_SYNC_DELAY)
249
250 #define SDEBUG_MAX_PARTS 4
251
252 #define SDEBUG_MAX_CMD_LEN 32
253
254 #define SDEB_XA_NOT_IN_USE XA_MARK_1
255
256 static struct kmem_cache *queued_cmd_cache;
257
258 #define TO_QUEUED_CMD(scmd)  ((void *)(scmd)->host_scribble)
259 #define ASSIGN_QUEUED_CMD(scmnd, qc) { (scmnd)->host_scribble = (void *) qc; }
260
261 /* Zone types (zbcr05 table 25) */
262 enum sdebug_z_type {
263         ZBC_ZTYPE_CNV   = 0x1,
264         ZBC_ZTYPE_SWR   = 0x2,
265         ZBC_ZTYPE_SWP   = 0x3,
266         /* ZBC_ZTYPE_SOBR = 0x4, */
267         ZBC_ZTYPE_GAP   = 0x5,
268 };
269
270 /* enumeration names taken from table 26, zbcr05 */
271 enum sdebug_z_cond {
272         ZBC_NOT_WRITE_POINTER   = 0x0,
273         ZC1_EMPTY               = 0x1,
274         ZC2_IMPLICIT_OPEN       = 0x2,
275         ZC3_EXPLICIT_OPEN       = 0x3,
276         ZC4_CLOSED              = 0x4,
277         ZC6_READ_ONLY           = 0xd,
278         ZC5_FULL                = 0xe,
279         ZC7_OFFLINE             = 0xf,
280 };
281
282 struct sdeb_zone_state {        /* ZBC: per zone state */
283         enum sdebug_z_type z_type;
284         enum sdebug_z_cond z_cond;
285         bool z_non_seq_resource;
286         unsigned int z_size;
287         sector_t z_start;
288         sector_t z_wp;
289 };
290
291 enum sdebug_err_type {
292         ERR_TMOUT_CMD           = 0,    /* make specific scsi command timeout */
293         ERR_FAIL_QUEUE_CMD      = 1,    /* make specific scsi command's */
294                                         /* queuecmd return failed */
295         ERR_FAIL_CMD            = 2,    /* make specific scsi command's */
296                                         /* queuecmd return succeed but */
297                                         /* with errors set in scsi_cmnd */
298         ERR_ABORT_CMD_FAILED    = 3,    /* control return FAILED from */
299                                         /* scsi_debug_abort() */
300         ERR_LUN_RESET_FAILED    = 4,    /* control return FAILED from */
301                                         /* scsi_debug_device_reseLUN_RESET_FAILEDt() */
302 };
303
304 struct sdebug_err_inject {
305         int type;
306         struct list_head list;
307         int cnt;
308         unsigned char cmd;
309         struct rcu_head rcu;
310
311         union {
312                 /*
313                  * For ERR_FAIL_QUEUE_CMD
314                  */
315                 int queuecmd_ret;
316
317                 /*
318                  * For ERR_FAIL_CMD
319                  */
320                 struct {
321                         unsigned char host_byte;
322                         unsigned char driver_byte;
323                         unsigned char status_byte;
324                         unsigned char sense_key;
325                         unsigned char asc;
326                         unsigned char asq;
327                 };
328         };
329 };
330
331 struct sdebug_dev_info {
332         struct list_head dev_list;
333         unsigned int channel;
334         unsigned int target;
335         u64 lun;
336         uuid_t lu_name;
337         struct sdebug_host_info *sdbg_host;
338         unsigned long uas_bm[1];
339         atomic_t stopped;       /* 1: by SSU, 2: device start */
340         bool used;
341
342         /* For ZBC devices */
343         bool zoned;
344         unsigned int zcap;
345         unsigned int zsize;
346         unsigned int zsize_shift;
347         unsigned int nr_zones;
348         unsigned int nr_conv_zones;
349         unsigned int nr_seq_zones;
350         unsigned int nr_imp_open;
351         unsigned int nr_exp_open;
352         unsigned int nr_closed;
353         unsigned int max_open;
354         ktime_t create_ts;      /* time since bootup that this device was created */
355         struct sdeb_zone_state *zstate;
356
357         struct dentry *debugfs_entry;
358         struct spinlock list_lock;
359         struct list_head inject_err_list;
360 };
361
362 struct sdebug_target_info {
363         bool reset_fail;
364         struct dentry *debugfs_entry;
365 };
366
367 struct sdebug_host_info {
368         struct list_head host_list;
369         int si_idx;     /* sdeb_store_info (per host) xarray index */
370         struct Scsi_Host *shost;
371         struct device dev;
372         struct list_head dev_info_list;
373 };
374
375 /* There is an xarray of pointers to this struct's objects, one per host */
376 struct sdeb_store_info {
377         rwlock_t macc_lck;      /* for atomic media access on this store */
378         u8 *storep;             /* user data storage (ram) */
379         struct t10_pi_tuple *dif_storep; /* protection info */
380         void *map_storep;       /* provisioning map */
381 };
382
383 #define dev_to_sdebug_host(d)   \
384         container_of(d, struct sdebug_host_info, dev)
385
386 #define shost_to_sdebug_host(shost)     \
387         dev_to_sdebug_host(shost->dma_dev)
388
389 enum sdeb_defer_type {SDEB_DEFER_NONE = 0, SDEB_DEFER_HRT = 1,
390                       SDEB_DEFER_WQ = 2, SDEB_DEFER_POLL = 3};
391
392 struct sdebug_defer {
393         struct hrtimer hrt;
394         struct execute_work ew;
395         ktime_t cmpl_ts;/* time since boot to complete this cmd */
396         int issuing_cpu;
397         bool aborted;   /* true when blk_abort_request() already called */
398         enum sdeb_defer_type defer_t;
399 };
400
401 struct sdebug_queued_cmd {
402         /* corresponding bit set in in_use_bm[] in owning struct sdebug_queue
403          * instance indicates this slot is in use.
404          */
405         struct sdebug_defer sd_dp;
406         struct scsi_cmnd *scmd;
407 };
408
409 struct sdebug_scsi_cmd {
410         spinlock_t   lock;
411 };
412
413 static atomic_t sdebug_cmnd_count;   /* number of incoming commands */
414 static atomic_t sdebug_completions;  /* count of deferred completions */
415 static atomic_t sdebug_miss_cpus;    /* submission + completion cpus differ */
416 static atomic_t sdebug_a_tsf;        /* 'almost task set full' counter */
417 static atomic_t sdeb_inject_pending;
418 static atomic_t sdeb_mq_poll_count;  /* bumped when mq_poll returns > 0 */
419
420 struct opcode_info_t {
421         u8 num_attached;        /* 0 if this is it (i.e. a leaf); use 0xff */
422                                 /* for terminating element */
423         u8 opcode;              /* if num_attached > 0, preferred */
424         u16 sa;                 /* service action */
425         u32 flags;              /* OR-ed set of SDEB_F_* */
426         int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
427         const struct opcode_info_t *arrp;  /* num_attached elements or NULL */
428         u8 len_mask[16];        /* len_mask[0]-->cdb_len, then mask for cdb */
429                                 /* 1 to min(cdb_len, 15); ignore cdb[15...] */
430 };
431
432 /* SCSI opcodes (first byte of cdb) of interest mapped onto these indexes */
433 enum sdeb_opcode_index {
434         SDEB_I_INVALID_OPCODE = 0,
435         SDEB_I_INQUIRY = 1,
436         SDEB_I_REPORT_LUNS = 2,
437         SDEB_I_REQUEST_SENSE = 3,
438         SDEB_I_TEST_UNIT_READY = 4,
439         SDEB_I_MODE_SENSE = 5,          /* 6, 10 */
440         SDEB_I_MODE_SELECT = 6,         /* 6, 10 */
441         SDEB_I_LOG_SENSE = 7,
442         SDEB_I_READ_CAPACITY = 8,       /* 10; 16 is in SA_IN(16) */
443         SDEB_I_READ = 9,                /* 6, 10, 12, 16 */
444         SDEB_I_WRITE = 10,              /* 6, 10, 12, 16 */
445         SDEB_I_START_STOP = 11,
446         SDEB_I_SERV_ACT_IN_16 = 12,     /* add ...SERV_ACT_IN_12 if needed */
447         SDEB_I_SERV_ACT_OUT_16 = 13,    /* add ...SERV_ACT_OUT_12 if needed */
448         SDEB_I_MAINT_IN = 14,
449         SDEB_I_MAINT_OUT = 15,
450         SDEB_I_VERIFY = 16,             /* VERIFY(10), VERIFY(16) */
451         SDEB_I_VARIABLE_LEN = 17,       /* READ(32), WRITE(32), WR_SCAT(32) */
452         SDEB_I_RESERVE = 18,            /* 6, 10 */
453         SDEB_I_RELEASE = 19,            /* 6, 10 */
454         SDEB_I_ALLOW_REMOVAL = 20,      /* PREVENT ALLOW MEDIUM REMOVAL */
455         SDEB_I_REZERO_UNIT = 21,        /* REWIND in SSC */
456         SDEB_I_ATA_PT = 22,             /* 12, 16 */
457         SDEB_I_SEND_DIAG = 23,
458         SDEB_I_UNMAP = 24,
459         SDEB_I_WRITE_BUFFER = 25,
460         SDEB_I_WRITE_SAME = 26,         /* 10, 16 */
461         SDEB_I_SYNC_CACHE = 27,         /* 10, 16 */
462         SDEB_I_COMP_WRITE = 28,
463         SDEB_I_PRE_FETCH = 29,          /* 10, 16 */
464         SDEB_I_ZONE_OUT = 30,           /* 0x94+SA; includes no data xfer */
465         SDEB_I_ZONE_IN = 31,            /* 0x95+SA; all have data-in */
466         SDEB_I_LAST_ELEM_P1 = 32,       /* keep this last (previous + 1) */
467 };
468
469
470 static const unsigned char opcode_ind_arr[256] = {
471 /* 0x0; 0x0->0x1f: 6 byte cdbs */
472         SDEB_I_TEST_UNIT_READY, SDEB_I_REZERO_UNIT, 0, SDEB_I_REQUEST_SENSE,
473             0, 0, 0, 0,
474         SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, 0,
475         0, 0, SDEB_I_INQUIRY, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
476             SDEB_I_RELEASE,
477         0, 0, SDEB_I_MODE_SENSE, SDEB_I_START_STOP, 0, SDEB_I_SEND_DIAG,
478             SDEB_I_ALLOW_REMOVAL, 0,
479 /* 0x20; 0x20->0x3f: 10 byte cdbs */
480         0, 0, 0, 0, 0, SDEB_I_READ_CAPACITY, 0, 0,
481         SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, SDEB_I_VERIFY,
482         0, 0, 0, 0, SDEB_I_PRE_FETCH, SDEB_I_SYNC_CACHE, 0, 0,
483         0, 0, 0, SDEB_I_WRITE_BUFFER, 0, 0, 0, 0,
484 /* 0x40; 0x40->0x5f: 10 byte cdbs */
485         0, SDEB_I_WRITE_SAME, SDEB_I_UNMAP, 0, 0, 0, 0, 0,
486         0, 0, 0, 0, 0, SDEB_I_LOG_SENSE, 0, 0,
487         0, 0, 0, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
488             SDEB_I_RELEASE,
489         0, 0, SDEB_I_MODE_SENSE, 0, 0, 0, 0, 0,
490 /* 0x60; 0x60->0x7d are reserved, 0x7e is "extended cdb" */
491         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
492         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
493         0, SDEB_I_VARIABLE_LEN,
494 /* 0x80; 0x80->0x9f: 16 byte cdbs */
495         0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
496         SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0,
497         0, 0, 0, SDEB_I_VERIFY,
498         SDEB_I_PRE_FETCH, SDEB_I_SYNC_CACHE, 0, SDEB_I_WRITE_SAME,
499         SDEB_I_ZONE_OUT, SDEB_I_ZONE_IN, 0, 0,
500         0, 0, 0, 0, 0, 0, SDEB_I_SERV_ACT_IN_16, SDEB_I_SERV_ACT_OUT_16,
501 /* 0xa0; 0xa0->0xbf: 12 byte cdbs */
502         SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
503              SDEB_I_MAINT_OUT, 0, 0, 0,
504         SDEB_I_READ, 0 /* SDEB_I_SERV_ACT_OUT_12 */, SDEB_I_WRITE,
505              0 /* SDEB_I_SERV_ACT_IN_12 */, 0, 0, 0, 0,
506         0, 0, 0, 0, 0, 0, 0, 0,
507         0, 0, 0, 0, 0, 0, 0, 0,
508 /* 0xc0; 0xc0->0xff: vendor specific */
509         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
510         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
511         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
512         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
513 };
514
515 /*
516  * The following "response" functions return the SCSI mid-level's 4 byte
517  * tuple-in-an-int. To handle commands with an IMMED bit, for a faster
518  * command completion, they can mask their return value with
519  * SDEG_RES_IMMED_MASK .
520  */
521 #define SDEG_RES_IMMED_MASK 0x40000000
522
523 static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
524 static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
525 static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
526 static int resp_mode_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
527 static int resp_mode_select(struct scsi_cmnd *, struct sdebug_dev_info *);
528 static int resp_log_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
529 static int resp_readcap(struct scsi_cmnd *, struct sdebug_dev_info *);
530 static int resp_read_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
531 static int resp_write_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
532 static int resp_write_scat(struct scsi_cmnd *, struct sdebug_dev_info *);
533 static int resp_start_stop(struct scsi_cmnd *, struct sdebug_dev_info *);
534 static int resp_readcap16(struct scsi_cmnd *, struct sdebug_dev_info *);
535 static int resp_get_lba_status(struct scsi_cmnd *, struct sdebug_dev_info *);
536 static int resp_get_stream_status(struct scsi_cmnd *scp,
537                                   struct sdebug_dev_info *devip);
538 static int resp_report_tgtpgs(struct scsi_cmnd *, struct sdebug_dev_info *);
539 static int resp_unmap(struct scsi_cmnd *, struct sdebug_dev_info *);
540 static int resp_rsup_opcodes(struct scsi_cmnd *, struct sdebug_dev_info *);
541 static int resp_rsup_tmfs(struct scsi_cmnd *, struct sdebug_dev_info *);
542 static int resp_verify(struct scsi_cmnd *, struct sdebug_dev_info *);
543 static int resp_write_same_10(struct scsi_cmnd *, struct sdebug_dev_info *);
544 static int resp_write_same_16(struct scsi_cmnd *, struct sdebug_dev_info *);
545 static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
546 static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
547 static int resp_sync_cache(struct scsi_cmnd *, struct sdebug_dev_info *);
548 static int resp_pre_fetch(struct scsi_cmnd *, struct sdebug_dev_info *);
549 static int resp_report_zones(struct scsi_cmnd *, struct sdebug_dev_info *);
550 static int resp_open_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
551 static int resp_close_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
552 static int resp_finish_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
553 static int resp_rwp_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
554
555 static int sdebug_do_add_host(bool mk_new_store);
556 static int sdebug_add_host_helper(int per_host_idx);
557 static void sdebug_do_remove_host(bool the_end);
558 static int sdebug_add_store(void);
559 static void sdebug_erase_store(int idx, struct sdeb_store_info *sip);
560 static void sdebug_erase_all_stores(bool apart_from_first);
561
562 static void sdebug_free_queued_cmd(struct sdebug_queued_cmd *sqcp);
563
564 /*
565  * The following are overflow arrays for cdbs that "hit" the same index in
566  * the opcode_info_arr array. The most time sensitive (or commonly used) cdb
567  * should be placed in opcode_info_arr[], the others should be placed here.
568  */
569 static const struct opcode_info_t msense_iarr[] = {
570         {0, 0x1a, 0, F_D_IN, NULL, NULL,
571             {6,  0xe8, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
572 };
573
574 static const struct opcode_info_t mselect_iarr[] = {
575         {0, 0x15, 0, F_D_OUT, NULL, NULL,
576             {6,  0xf1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
577 };
578
579 static const struct opcode_info_t read_iarr[] = {
580         {0, 0x28, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(10) */
581             {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
582              0, 0, 0, 0} },
583         {0, 0x8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL, /* READ(6) */
584             {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
585         {0, 0xa8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(12) */
586             {12,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
587              0xc7, 0, 0, 0, 0} },
588 };
589
590 static const struct opcode_info_t write_iarr[] = {
591         {0, 0x2a, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(10) */
592             NULL, {10,  0xfb, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7,
593                    0, 0, 0, 0, 0, 0} },
594         {0, 0xa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,   /* WRITE(6) */
595             NULL, {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0,
596                    0, 0, 0} },
597         {0, 0xaa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(12) */
598             NULL, {12,  0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
599                    0xbf, 0xc7, 0, 0, 0, 0} },
600 };
601
602 static const struct opcode_info_t verify_iarr[] = {
603         {0, 0x2f, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, resp_verify,/* VERIFY(10) */
604             NULL, {10,  0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc7,
605                    0, 0, 0, 0, 0, 0} },
606 };
607
608 static const struct opcode_info_t sa_in_16_iarr[] = {
609         {0, 0x9e, 0x12, F_SA_LOW | F_D_IN, resp_get_lba_status, NULL,
610             {16,  0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
611              0xff, 0xff, 0xff, 0, 0xc7} },      /* GET LBA STATUS(16) */
612         {0, 0x9e, 0x16, F_SA_LOW | F_D_IN, resp_get_stream_status, NULL,
613             {16, 0x16, 0, 0, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
614              0, 0} },   /* GET STREAM STATUS */
615 };
616
617 static const struct opcode_info_t vl_iarr[] = { /* VARIABLE LENGTH */
618         {0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_dt0,
619             NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0xb, 0xfa,
620                    0, 0xff, 0xff, 0xff, 0xff} },        /* WRITE(32) */
621         {0, 0x7f, 0x11, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
622             NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x11, 0xf8,
623                    0, 0xff, 0xff, 0x0, 0x0} },  /* WRITE SCATTERED(32) */
624 };
625
626 static const struct opcode_info_t maint_in_iarr[] = {   /* MAINT IN */
627         {0, 0xa3, 0xc, F_SA_LOW | F_D_IN, resp_rsup_opcodes, NULL,
628             {12,  0xc, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
629              0xc7, 0, 0, 0, 0} }, /* REPORT SUPPORTED OPERATION CODES */
630         {0, 0xa3, 0xd, F_SA_LOW | F_D_IN, resp_rsup_tmfs, NULL,
631             {12,  0xd, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
632              0, 0} },   /* REPORTED SUPPORTED TASK MANAGEMENT FUNCTIONS */
633 };
634
635 static const struct opcode_info_t write_same_iarr[] = {
636         {0, 0x93, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, resp_write_same_16, NULL,
637             {16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
638              0xff, 0xff, 0xff, 0x3f, 0xc7} },           /* WRITE SAME(16) */
639 };
640
641 static const struct opcode_info_t reserve_iarr[] = {
642         {0, 0x16, 0, F_D_OUT, NULL, NULL,               /* RESERVE(6) */
643             {6,  0x1f, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
644 };
645
646 static const struct opcode_info_t release_iarr[] = {
647         {0, 0x17, 0, F_D_OUT, NULL, NULL,               /* RELEASE(6) */
648             {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
649 };
650
651 static const struct opcode_info_t sync_cache_iarr[] = {
652         {0, 0x91, 0, F_SYNC_DELAY | F_M_ACCESS, resp_sync_cache, NULL,
653             {16,  0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
654              0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },     /* SYNC_CACHE (16) */
655 };
656
657 static const struct opcode_info_t pre_fetch_iarr[] = {
658         {0, 0x90, 0, F_SYNC_DELAY | FF_MEDIA_IO, resp_pre_fetch, NULL,
659             {16,  0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
660              0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },     /* PRE-FETCH (16) */
661 };
662
663 static const struct opcode_info_t zone_out_iarr[] = {   /* ZONE OUT(16) */
664         {0, 0x94, 0x1, F_SA_LOW | F_M_ACCESS, resp_close_zone, NULL,
665             {16, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
666              0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },      /* CLOSE ZONE */
667         {0, 0x94, 0x2, F_SA_LOW | F_M_ACCESS, resp_finish_zone, NULL,
668             {16, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
669              0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },      /* FINISH ZONE */
670         {0, 0x94, 0x4, F_SA_LOW | F_M_ACCESS, resp_rwp_zone, NULL,
671             {16, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
672              0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },  /* RESET WRITE POINTER */
673 };
674
675 static const struct opcode_info_t zone_in_iarr[] = {    /* ZONE IN(16) */
676         {0, 0x95, 0x6, F_SA_LOW | F_D_IN | F_M_ACCESS, NULL, NULL,
677             {16, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
678              0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} }, /* REPORT ZONES */
679 };
680
681
682 /* This array is accessed via SDEB_I_* values. Make sure all are mapped,
683  * plus the terminating elements for logic that scans this table such as
684  * REPORT SUPPORTED OPERATION CODES. */
685 static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEM_P1 + 1] = {
686 /* 0 */
687         {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL,    /* unknown opcodes */
688             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
689         {0, 0x12, 0, FF_RESPOND | F_D_IN, resp_inquiry, NULL, /* INQUIRY */
690             {6,  0xe3, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
691         {0, 0xa0, 0, FF_RESPOND | F_D_IN, resp_report_luns, NULL,
692             {12,  0xe3, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
693              0, 0} },                                   /* REPORT LUNS */
694         {0, 0x3, 0, FF_RESPOND | F_D_IN, resp_requests, NULL,
695             {6,  0xe1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
696         {0, 0x0, 0, F_M_ACCESS | F_RL_WLUN_OK, NULL, NULL,/* TEST UNIT READY */
697             {6,  0, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
698 /* 5 */
699         {ARRAY_SIZE(msense_iarr), 0x5a, 0, F_D_IN,      /* MODE SENSE(10) */
700             resp_mode_sense, msense_iarr, {10,  0xf8, 0xff, 0xff, 0, 0, 0,
701                 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
702         {ARRAY_SIZE(mselect_iarr), 0x55, 0, F_D_OUT,    /* MODE SELECT(10) */
703             resp_mode_select, mselect_iarr, {10,  0xf1, 0, 0, 0, 0, 0, 0xff,
704                 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
705         {0, 0x4d, 0, F_D_IN, resp_log_sense, NULL,      /* LOG SENSE */
706             {10,  0xe3, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0,
707              0, 0, 0} },
708         {0, 0x25, 0, F_D_IN, resp_readcap, NULL,    /* READ CAPACITY(10) */
709             {10,  0xe1, 0xff, 0xff, 0xff, 0xff, 0, 0, 0x1, 0xc7, 0, 0, 0, 0,
710              0, 0} },
711         {ARRAY_SIZE(read_iarr), 0x88, 0, F_D_IN | FF_MEDIA_IO, /* READ(16) */
712             resp_read_dt0, read_iarr, {16,  0xfe, 0xff, 0xff, 0xff, 0xff,
713             0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
714 /* 10 */
715         {ARRAY_SIZE(write_iarr), 0x8a, 0, F_D_OUT | FF_MEDIA_IO,
716             resp_write_dt0, write_iarr,                 /* WRITE(16) */
717                 {16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
718                  0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
719         {0, 0x1b, 0, F_SSU_DELAY, resp_start_stop, NULL,/* START STOP UNIT */
720             {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
721         {ARRAY_SIZE(sa_in_16_iarr), 0x9e, 0x10, F_SA_LOW | F_D_IN,
722             resp_readcap16, sa_in_16_iarr, /* SA_IN(16), READ CAPACITY(16) */
723                 {16,  0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
724                  0xff, 0xff, 0xff, 0xff, 0x1, 0xc7} },
725         {0, 0x9f, 0x12, F_SA_LOW | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
726             NULL, {16,  0x12, 0xf9, 0x0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff,
727             0xff, 0xff, 0xff, 0xff, 0xc7} },  /* SA_OUT(16), WRITE SCAT(16) */
728         {ARRAY_SIZE(maint_in_iarr), 0xa3, 0xa, F_SA_LOW | F_D_IN,
729             resp_report_tgtpgs, /* MAINT IN, REPORT TARGET PORT GROUPS */
730                 maint_in_iarr, {12,  0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff,
731                                 0xff, 0, 0xc7, 0, 0, 0, 0} },
732 /* 15 */
733         {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* MAINT OUT */
734             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
735         {ARRAY_SIZE(verify_iarr), 0x8f, 0,
736             F_D_OUT_MAYBE | FF_MEDIA_IO, resp_verify,   /* VERIFY(16) */
737             verify_iarr, {16,  0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
738                           0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },
739         {ARRAY_SIZE(vl_iarr), 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_MEDIA_IO,
740             resp_read_dt0, vl_iarr,     /* VARIABLE LENGTH, READ(32) */
741             {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x9, 0xfe, 0, 0xff, 0xff,
742              0xff, 0xff} },
743         {ARRAY_SIZE(reserve_iarr), 0x56, 0, F_D_OUT,
744             NULL, reserve_iarr, /* RESERVE(10) <no response function> */
745             {10,  0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
746              0} },
747         {ARRAY_SIZE(release_iarr), 0x57, 0, F_D_OUT,
748             NULL, release_iarr, /* RELEASE(10) <no response function> */
749             {10,  0x13, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
750              0} },
751 /* 20 */
752         {0, 0x1e, 0, 0, NULL, NULL, /* ALLOW REMOVAL */
753             {6,  0, 0, 0, 0x3, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
754         {0, 0x1, 0, 0, resp_start_stop, NULL, /* REWIND ?? */
755             {6,  0x1, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
756         {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ATA_PT */
757             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
758         {0, 0x1d, F_D_OUT, 0, NULL, NULL,       /* SEND DIAGNOSTIC */
759             {6,  0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
760         {0, 0x42, 0, F_D_OUT | FF_MEDIA_IO, resp_unmap, NULL, /* UNMAP */
761             {10,  0x1, 0, 0, 0, 0, 0x3f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
762 /* 25 */
763         {0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
764             {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
765              0, 0, 0, 0} },                     /* WRITE_BUFFER */
766         {ARRAY_SIZE(write_same_iarr), 0x41, 0, F_D_OUT_MAYBE | FF_MEDIA_IO,
767             resp_write_same_10, write_same_iarr,        /* WRITE SAME(10) */
768                 {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0,
769                  0, 0, 0, 0, 0} },
770         {ARRAY_SIZE(sync_cache_iarr), 0x35, 0, F_SYNC_DELAY | F_M_ACCESS,
771             resp_sync_cache, sync_cache_iarr,
772             {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
773              0, 0, 0, 0} },                     /* SYNC_CACHE (10) */
774         {0, 0x89, 0, F_D_OUT | FF_MEDIA_IO, resp_comp_write, NULL,
775             {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
776              0, 0xff, 0x3f, 0xc7} },            /* COMPARE AND WRITE */
777         {ARRAY_SIZE(pre_fetch_iarr), 0x34, 0, F_SYNC_DELAY | FF_MEDIA_IO,
778             resp_pre_fetch, pre_fetch_iarr,
779             {10,  0x2, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
780              0, 0, 0, 0} },                     /* PRE-FETCH (10) */
781
782 /* 30 */
783         {ARRAY_SIZE(zone_out_iarr), 0x94, 0x3, F_SA_LOW | F_M_ACCESS,
784             resp_open_zone, zone_out_iarr, /* ZONE_OUT(16), OPEN ZONE) */
785                 {16,  0x3 /* SA */, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
786                  0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0x1, 0xc7} },
787         {ARRAY_SIZE(zone_in_iarr), 0x95, 0x0, F_SA_LOW | F_M_ACCESS,
788             resp_report_zones, zone_in_iarr, /* ZONE_IN(16), REPORT ZONES) */
789                 {16,  0x0 /* SA */, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
790                  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xc7} },
791 /* sentinel */
792         {0xff, 0, 0, 0, NULL, NULL,             /* terminating element */
793             {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
794 };
795
796 static int sdebug_num_hosts;
797 static int sdebug_add_host = DEF_NUM_HOST;  /* in sysfs this is relative */
798 static int sdebug_ato = DEF_ATO;
799 static int sdebug_cdb_len = DEF_CDB_LEN;
800 static int sdebug_jdelay = DEF_JDELAY;  /* if > 0 then unit is jiffies */
801 static int sdebug_dev_size_mb = DEF_DEV_SIZE_PRE_INIT;
802 static int sdebug_dif = DEF_DIF;
803 static int sdebug_dix = DEF_DIX;
804 static int sdebug_dsense = DEF_D_SENSE;
805 static int sdebug_every_nth = DEF_EVERY_NTH;
806 static int sdebug_fake_rw = DEF_FAKE_RW;
807 static unsigned int sdebug_guard = DEF_GUARD;
808 static int sdebug_host_max_queue;       /* per host */
809 static int sdebug_lowest_aligned = DEF_LOWEST_ALIGNED;
810 static int sdebug_max_luns = DEF_MAX_LUNS;
811 static int sdebug_max_queue = SDEBUG_CANQUEUE;  /* per submit queue */
812 static unsigned int sdebug_medium_error_start = OPT_MEDIUM_ERR_ADDR;
813 static int sdebug_medium_error_count = OPT_MEDIUM_ERR_NUM;
814 static int sdebug_ndelay = DEF_NDELAY;  /* if > 0 then unit is nanoseconds */
815 static int sdebug_no_lun_0 = DEF_NO_LUN_0;
816 static int sdebug_no_uld;
817 static int sdebug_num_parts = DEF_NUM_PARTS;
818 static int sdebug_num_tgts = DEF_NUM_TGTS; /* targets per host */
819 static int sdebug_opt_blks = DEF_OPT_BLKS;
820 static int sdebug_opts = DEF_OPTS;
821 static int sdebug_physblk_exp = DEF_PHYSBLK_EXP;
822 static int sdebug_opt_xferlen_exp = DEF_OPT_XFERLEN_EXP;
823 static int sdebug_ptype = DEF_PTYPE; /* SCSI peripheral device type */
824 static int sdebug_scsi_level = DEF_SCSI_LEVEL;
825 static int sdebug_sector_size = DEF_SECTOR_SIZE;
826 static int sdeb_tur_ms_to_ready = DEF_TUR_MS_TO_READY;
827 static int sdebug_virtual_gb = DEF_VIRTUAL_GB;
828 static int sdebug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
829 static unsigned int sdebug_lbpu = DEF_LBPU;
830 static unsigned int sdebug_lbpws = DEF_LBPWS;
831 static unsigned int sdebug_lbpws10 = DEF_LBPWS10;
832 static unsigned int sdebug_lbprz = DEF_LBPRZ;
833 static unsigned int sdebug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
834 static unsigned int sdebug_unmap_granularity = DEF_UNMAP_GRANULARITY;
835 static unsigned int sdebug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
836 static unsigned int sdebug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
837 static unsigned int sdebug_write_same_length = DEF_WRITESAME_LENGTH;
838 static int sdebug_uuid_ctl = DEF_UUID_CTL;
839 static bool sdebug_random = DEF_RANDOM;
840 static bool sdebug_per_host_store = DEF_PER_HOST_STORE;
841 static bool sdebug_removable = DEF_REMOVABLE;
842 static bool sdebug_clustering;
843 static bool sdebug_host_lock = DEF_HOST_LOCK;
844 static bool sdebug_strict = DEF_STRICT;
845 static bool sdebug_any_injecting_opt;
846 static bool sdebug_no_rwlock;
847 static bool sdebug_verbose;
848 static bool have_dif_prot;
849 static bool write_since_sync;
850 static bool sdebug_statistics = DEF_STATISTICS;
851 static bool sdebug_wp;
852 static bool sdebug_allow_restart;
853 static enum {
854         BLK_ZONED_NONE  = 0,
855         BLK_ZONED_HA    = 1,
856         BLK_ZONED_HM    = 2,
857 } sdeb_zbc_model = BLK_ZONED_NONE;
858 static char *sdeb_zbc_model_s;
859
860 enum sam_lun_addr_method {SAM_LUN_AM_PERIPHERAL = 0x0,
861                           SAM_LUN_AM_FLAT = 0x1,
862                           SAM_LUN_AM_LOGICAL_UNIT = 0x2,
863                           SAM_LUN_AM_EXTENDED = 0x3};
864 static enum sam_lun_addr_method sdebug_lun_am = SAM_LUN_AM_PERIPHERAL;
865 static int sdebug_lun_am_i = (int)SAM_LUN_AM_PERIPHERAL;
866
867 static unsigned int sdebug_store_sectors;
868 static sector_t sdebug_capacity;        /* in sectors */
869
870 /* old BIOS stuff, kernel may get rid of them but some mode sense pages
871    may still need them */
872 static int sdebug_heads;                /* heads per disk */
873 static int sdebug_cylinders_per;        /* cylinders per surface */
874 static int sdebug_sectors_per;          /* sectors per cylinder */
875
876 static LIST_HEAD(sdebug_host_list);
877 static DEFINE_MUTEX(sdebug_host_list_mutex);
878
879 static struct xarray per_store_arr;
880 static struct xarray *per_store_ap = &per_store_arr;
881 static int sdeb_first_idx = -1;         /* invalid index ==> none created */
882 static int sdeb_most_recent_idx = -1;
883 static DEFINE_RWLOCK(sdeb_fake_rw_lck); /* need a RW lock when fake_rw=1 */
884
885 static unsigned long map_size;
886 static int num_aborts;
887 static int num_dev_resets;
888 static int num_target_resets;
889 static int num_bus_resets;
890 static int num_host_resets;
891 static int dix_writes;
892 static int dix_reads;
893 static int dif_errors;
894
895 /* ZBC global data */
896 static bool sdeb_zbc_in_use;    /* true for host-aware and host-managed disks */
897 static int sdeb_zbc_zone_cap_mb;
898 static int sdeb_zbc_zone_size_mb;
899 static int sdeb_zbc_max_open = DEF_ZBC_MAX_OPEN_ZONES;
900 static int sdeb_zbc_nr_conv = DEF_ZBC_NR_CONV_ZONES;
901
902 static int submit_queues = DEF_SUBMIT_QUEUES;  /* > 1 for multi-queue (mq) */
903 static int poll_queues; /* iouring iopoll interface.*/
904
905 static atomic_long_t writes_by_group_number[64];
906
907 static char sdebug_proc_name[] = MY_NAME;
908 static const char *my_name = MY_NAME;
909
910 static const struct bus_type pseudo_lld_bus;
911
912 static struct device_driver sdebug_driverfs_driver = {
913         .name           = sdebug_proc_name,
914         .bus            = &pseudo_lld_bus,
915 };
916
917 static const int check_condition_result =
918         SAM_STAT_CHECK_CONDITION;
919
920 static const int illegal_condition_result =
921         (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
922
923 static const int device_qfull_result =
924         (DID_ABORT << 16) | SAM_STAT_TASK_SET_FULL;
925
926 static const int condition_met_result = SAM_STAT_CONDITION_MET;
927
928 static struct dentry *sdebug_debugfs_root;
929
930 static void sdebug_err_free(struct rcu_head *head)
931 {
932         struct sdebug_err_inject *inject =
933                 container_of(head, typeof(*inject), rcu);
934
935         kfree(inject);
936 }
937
938 static void sdebug_err_add(struct scsi_device *sdev, struct sdebug_err_inject *new)
939 {
940         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdev->hostdata;
941         struct sdebug_err_inject *err;
942
943         spin_lock(&devip->list_lock);
944         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
945                 if (err->type == new->type && err->cmd == new->cmd) {
946                         list_del_rcu(&err->list);
947                         call_rcu(&err->rcu, sdebug_err_free);
948                 }
949         }
950
951         list_add_tail_rcu(&new->list, &devip->inject_err_list);
952         spin_unlock(&devip->list_lock);
953 }
954
955 static int sdebug_err_remove(struct scsi_device *sdev, const char *buf, size_t count)
956 {
957         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdev->hostdata;
958         struct sdebug_err_inject *err;
959         int type;
960         unsigned char cmd;
961
962         if (sscanf(buf, "- %d %hhx", &type, &cmd) != 2) {
963                 kfree(buf);
964                 return -EINVAL;
965         }
966
967         spin_lock(&devip->list_lock);
968         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
969                 if (err->type == type && err->cmd == cmd) {
970                         list_del_rcu(&err->list);
971                         call_rcu(&err->rcu, sdebug_err_free);
972                         spin_unlock(&devip->list_lock);
973                         kfree(buf);
974                         return count;
975                 }
976         }
977         spin_unlock(&devip->list_lock);
978
979         kfree(buf);
980         return -EINVAL;
981 }
982
983 static int sdebug_error_show(struct seq_file *m, void *p)
984 {
985         struct scsi_device *sdev = (struct scsi_device *)m->private;
986         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdev->hostdata;
987         struct sdebug_err_inject *err;
988
989         seq_puts(m, "Type\tCount\tCommand\n");
990
991         rcu_read_lock();
992         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
993                 switch (err->type) {
994                 case ERR_TMOUT_CMD:
995                 case ERR_ABORT_CMD_FAILED:
996                 case ERR_LUN_RESET_FAILED:
997                         seq_printf(m, "%d\t%d\t0x%x\n", err->type, err->cnt,
998                                 err->cmd);
999                 break;
1000
1001                 case ERR_FAIL_QUEUE_CMD:
1002                         seq_printf(m, "%d\t%d\t0x%x\t0x%x\n", err->type,
1003                                 err->cnt, err->cmd, err->queuecmd_ret);
1004                 break;
1005
1006                 case ERR_FAIL_CMD:
1007                         seq_printf(m, "%d\t%d\t0x%x\t0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
1008                                 err->type, err->cnt, err->cmd,
1009                                 err->host_byte, err->driver_byte,
1010                                 err->status_byte, err->sense_key,
1011                                 err->asc, err->asq);
1012                 break;
1013                 }
1014         }
1015         rcu_read_unlock();
1016
1017         return 0;
1018 }
1019
1020 static int sdebug_error_open(struct inode *inode, struct file *file)
1021 {
1022         return single_open(file, sdebug_error_show, inode->i_private);
1023 }
1024
1025 static ssize_t sdebug_error_write(struct file *file, const char __user *ubuf,
1026                 size_t count, loff_t *ppos)
1027 {
1028         char *buf;
1029         unsigned int inject_type;
1030         struct sdebug_err_inject *inject;
1031         struct scsi_device *sdev = (struct scsi_device *)file->f_inode->i_private;
1032
1033         buf = kzalloc(count + 1, GFP_KERNEL);
1034         if (!buf)
1035                 return -ENOMEM;
1036
1037         if (copy_from_user(buf, ubuf, count)) {
1038                 kfree(buf);
1039                 return -EFAULT;
1040         }
1041
1042         if (buf[0] == '-')
1043                 return sdebug_err_remove(sdev, buf, count);
1044
1045         if (sscanf(buf, "%d", &inject_type) != 1) {
1046                 kfree(buf);
1047                 return -EINVAL;
1048         }
1049
1050         inject = kzalloc(sizeof(struct sdebug_err_inject), GFP_KERNEL);
1051         if (!inject) {
1052                 kfree(buf);
1053                 return -ENOMEM;
1054         }
1055
1056         switch (inject_type) {
1057         case ERR_TMOUT_CMD:
1058         case ERR_ABORT_CMD_FAILED:
1059         case ERR_LUN_RESET_FAILED:
1060                 if (sscanf(buf, "%d %d %hhx", &inject->type, &inject->cnt,
1061                            &inject->cmd) != 3)
1062                         goto out_error;
1063         break;
1064
1065         case ERR_FAIL_QUEUE_CMD:
1066                 if (sscanf(buf, "%d %d %hhx %x", &inject->type, &inject->cnt,
1067                            &inject->cmd, &inject->queuecmd_ret) != 4)
1068                         goto out_error;
1069         break;
1070
1071         case ERR_FAIL_CMD:
1072                 if (sscanf(buf, "%d %d %hhx %hhx %hhx %hhx %hhx %hhx %hhx",
1073                            &inject->type, &inject->cnt, &inject->cmd,
1074                            &inject->host_byte, &inject->driver_byte,
1075                            &inject->status_byte, &inject->sense_key,
1076                            &inject->asc, &inject->asq) != 9)
1077                         goto out_error;
1078         break;
1079
1080         default:
1081                 goto out_error;
1082         break;
1083         }
1084
1085         kfree(buf);
1086         sdebug_err_add(sdev, inject);
1087
1088         return count;
1089
1090 out_error:
1091         kfree(buf);
1092         kfree(inject);
1093         return -EINVAL;
1094 }
1095
1096 static const struct file_operations sdebug_error_fops = {
1097         .open   = sdebug_error_open,
1098         .read   = seq_read,
1099         .write  = sdebug_error_write,
1100         .release = single_release,
1101 };
1102
1103 static int sdebug_target_reset_fail_show(struct seq_file *m, void *p)
1104 {
1105         struct scsi_target *starget = (struct scsi_target *)m->private;
1106         struct sdebug_target_info *targetip =
1107                 (struct sdebug_target_info *)starget->hostdata;
1108
1109         if (targetip)
1110                 seq_printf(m, "%c\n", targetip->reset_fail ? 'Y' : 'N');
1111
1112         return 0;
1113 }
1114
1115 static int sdebug_target_reset_fail_open(struct inode *inode, struct file *file)
1116 {
1117         return single_open(file, sdebug_target_reset_fail_show, inode->i_private);
1118 }
1119
1120 static ssize_t sdebug_target_reset_fail_write(struct file *file,
1121                 const char __user *ubuf, size_t count, loff_t *ppos)
1122 {
1123         int ret;
1124         struct scsi_target *starget =
1125                 (struct scsi_target *)file->f_inode->i_private;
1126         struct sdebug_target_info *targetip =
1127                 (struct sdebug_target_info *)starget->hostdata;
1128
1129         if (targetip) {
1130                 ret = kstrtobool_from_user(ubuf, count, &targetip->reset_fail);
1131                 return ret < 0 ? ret : count;
1132         }
1133         return -ENODEV;
1134 }
1135
1136 static const struct file_operations sdebug_target_reset_fail_fops = {
1137         .open   = sdebug_target_reset_fail_open,
1138         .read   = seq_read,
1139         .write  = sdebug_target_reset_fail_write,
1140         .release = single_release,
1141 };
1142
1143 static int sdebug_target_alloc(struct scsi_target *starget)
1144 {
1145         struct sdebug_target_info *targetip;
1146
1147         targetip = kzalloc(sizeof(struct sdebug_target_info), GFP_KERNEL);
1148         if (!targetip)
1149                 return -ENOMEM;
1150
1151         targetip->debugfs_entry = debugfs_create_dir(dev_name(&starget->dev),
1152                                 sdebug_debugfs_root);
1153
1154         debugfs_create_file("fail_reset", 0600, targetip->debugfs_entry, starget,
1155                                 &sdebug_target_reset_fail_fops);
1156
1157         starget->hostdata = targetip;
1158
1159         return 0;
1160 }
1161
1162 static void sdebug_tartget_cleanup_async(void *data, async_cookie_t cookie)
1163 {
1164         struct sdebug_target_info *targetip = data;
1165
1166         debugfs_remove(targetip->debugfs_entry);
1167         kfree(targetip);
1168 }
1169
1170 static void sdebug_target_destroy(struct scsi_target *starget)
1171 {
1172         struct sdebug_target_info *targetip;
1173
1174         targetip = (struct sdebug_target_info *)starget->hostdata;
1175         if (targetip) {
1176                 starget->hostdata = NULL;
1177                 async_schedule(sdebug_tartget_cleanup_async, targetip);
1178         }
1179 }
1180
1181 /* Only do the extra work involved in logical block provisioning if one or
1182  * more of the lbpu, lbpws or lbpws10 parameters are given and we are doing
1183  * real reads and writes (i.e. not skipping them for speed).
1184  */
1185 static inline bool scsi_debug_lbp(void)
1186 {
1187         return 0 == sdebug_fake_rw &&
1188                 (sdebug_lbpu || sdebug_lbpws || sdebug_lbpws10);
1189 }
1190
1191 static void *lba2fake_store(struct sdeb_store_info *sip,
1192                             unsigned long long lba)
1193 {
1194         struct sdeb_store_info *lsip = sip;
1195
1196         lba = do_div(lba, sdebug_store_sectors);
1197         if (!sip || !sip->storep) {
1198                 WARN_ON_ONCE(true);
1199                 lsip = xa_load(per_store_ap, 0);  /* should never be NULL */
1200         }
1201         return lsip->storep + lba * sdebug_sector_size;
1202 }
1203
1204 static struct t10_pi_tuple *dif_store(struct sdeb_store_info *sip,
1205                                       sector_t sector)
1206 {
1207         sector = sector_div(sector, sdebug_store_sectors);
1208
1209         return sip->dif_storep + sector;
1210 }
1211
1212 static void sdebug_max_tgts_luns(void)
1213 {
1214         struct sdebug_host_info *sdbg_host;
1215         struct Scsi_Host *hpnt;
1216
1217         mutex_lock(&sdebug_host_list_mutex);
1218         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
1219                 hpnt = sdbg_host->shost;
1220                 if ((hpnt->this_id >= 0) &&
1221                     (sdebug_num_tgts > hpnt->this_id))
1222                         hpnt->max_id = sdebug_num_tgts + 1;
1223                 else
1224                         hpnt->max_id = sdebug_num_tgts;
1225                 /* sdebug_max_luns; */
1226                 hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
1227         }
1228         mutex_unlock(&sdebug_host_list_mutex);
1229 }
1230
1231 enum sdeb_cmd_data {SDEB_IN_DATA = 0, SDEB_IN_CDB = 1};
1232
1233 /* Set in_bit to -1 to indicate no bit position of invalid field */
1234 static void mk_sense_invalid_fld(struct scsi_cmnd *scp,
1235                                  enum sdeb_cmd_data c_d,
1236                                  int in_byte, int in_bit)
1237 {
1238         unsigned char *sbuff;
1239         u8 sks[4];
1240         int sl, asc;
1241
1242         sbuff = scp->sense_buffer;
1243         if (!sbuff) {
1244                 sdev_printk(KERN_ERR, scp->device,
1245                             "%s: sense_buffer is NULL\n", __func__);
1246                 return;
1247         }
1248         asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
1249         memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
1250         scsi_build_sense(scp, sdebug_dsense, ILLEGAL_REQUEST, asc, 0);
1251         memset(sks, 0, sizeof(sks));
1252         sks[0] = 0x80;
1253         if (c_d)
1254                 sks[0] |= 0x40;
1255         if (in_bit >= 0) {
1256                 sks[0] |= 0x8;
1257                 sks[0] |= 0x7 & in_bit;
1258         }
1259         put_unaligned_be16(in_byte, sks + 1);
1260         if (sdebug_dsense) {
1261                 sl = sbuff[7] + 8;
1262                 sbuff[7] = sl;
1263                 sbuff[sl] = 0x2;
1264                 sbuff[sl + 1] = 0x6;
1265                 memcpy(sbuff + sl + 4, sks, 3);
1266         } else
1267                 memcpy(sbuff + 15, sks, 3);
1268         if (sdebug_verbose)
1269                 sdev_printk(KERN_INFO, scp->device, "%s:  [sense_key,asc,ascq"
1270                             "]: [0x5,0x%x,0x0] %c byte=%d, bit=%d\n",
1271                             my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
1272 }
1273
1274 static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
1275 {
1276         if (!scp->sense_buffer) {
1277                 sdev_printk(KERN_ERR, scp->device,
1278                             "%s: sense_buffer is NULL\n", __func__);
1279                 return;
1280         }
1281         memset(scp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1282
1283         scsi_build_sense(scp, sdebug_dsense, key, asc, asq);
1284
1285         if (sdebug_verbose)
1286                 sdev_printk(KERN_INFO, scp->device,
1287                             "%s:  [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
1288                             my_name, key, asc, asq);
1289 }
1290
1291 static void mk_sense_invalid_opcode(struct scsi_cmnd *scp)
1292 {
1293         mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
1294 }
1295
1296 static int scsi_debug_ioctl(struct scsi_device *dev, unsigned int cmd,
1297                             void __user *arg)
1298 {
1299         if (sdebug_verbose) {
1300                 if (0x1261 == cmd)
1301                         sdev_printk(KERN_INFO, dev,
1302                                     "%s: BLKFLSBUF [0x1261]\n", __func__);
1303                 else if (0x5331 == cmd)
1304                         sdev_printk(KERN_INFO, dev,
1305                                     "%s: CDROM_GET_CAPABILITY [0x5331]\n",
1306                                     __func__);
1307                 else
1308                         sdev_printk(KERN_INFO, dev, "%s: cmd=0x%x\n",
1309                                     __func__, cmd);
1310         }
1311         return -EINVAL;
1312         /* return -ENOTTY; // correct return but upsets fdisk */
1313 }
1314
1315 static void config_cdb_len(struct scsi_device *sdev)
1316 {
1317         switch (sdebug_cdb_len) {
1318         case 6: /* suggest 6 byte READ, WRITE and MODE SENSE/SELECT */
1319                 sdev->use_10_for_rw = false;
1320                 sdev->use_16_for_rw = false;
1321                 sdev->use_10_for_ms = false;
1322                 break;
1323         case 10: /* suggest 10 byte RWs and 6 byte MODE SENSE/SELECT */
1324                 sdev->use_10_for_rw = true;
1325                 sdev->use_16_for_rw = false;
1326                 sdev->use_10_for_ms = false;
1327                 break;
1328         case 12: /* suggest 10 byte RWs and 10 byte MODE SENSE/SELECT */
1329                 sdev->use_10_for_rw = true;
1330                 sdev->use_16_for_rw = false;
1331                 sdev->use_10_for_ms = true;
1332                 break;
1333         case 16:
1334                 sdev->use_10_for_rw = false;
1335                 sdev->use_16_for_rw = true;
1336                 sdev->use_10_for_ms = true;
1337                 break;
1338         case 32: /* No knobs to suggest this so same as 16 for now */
1339                 sdev->use_10_for_rw = false;
1340                 sdev->use_16_for_rw = true;
1341                 sdev->use_10_for_ms = true;
1342                 break;
1343         default:
1344                 pr_warn("unexpected cdb_len=%d, force to 10\n",
1345                         sdebug_cdb_len);
1346                 sdev->use_10_for_rw = true;
1347                 sdev->use_16_for_rw = false;
1348                 sdev->use_10_for_ms = false;
1349                 sdebug_cdb_len = 10;
1350                 break;
1351         }
1352 }
1353
1354 static void all_config_cdb_len(void)
1355 {
1356         struct sdebug_host_info *sdbg_host;
1357         struct Scsi_Host *shost;
1358         struct scsi_device *sdev;
1359
1360         mutex_lock(&sdebug_host_list_mutex);
1361         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
1362                 shost = sdbg_host->shost;
1363                 shost_for_each_device(sdev, shost) {
1364                         config_cdb_len(sdev);
1365                 }
1366         }
1367         mutex_unlock(&sdebug_host_list_mutex);
1368 }
1369
1370 static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
1371 {
1372         struct sdebug_host_info *sdhp = devip->sdbg_host;
1373         struct sdebug_dev_info *dp;
1374
1375         list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
1376                 if ((devip->sdbg_host == dp->sdbg_host) &&
1377                     (devip->target == dp->target)) {
1378                         clear_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
1379                 }
1380         }
1381 }
1382
1383 static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1384 {
1385         int k;
1386
1387         k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
1388         if (k != SDEBUG_NUM_UAS) {
1389                 const char *cp = NULL;
1390
1391                 switch (k) {
1392                 case SDEBUG_UA_POR:
1393                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1394                                         POWER_ON_RESET_ASCQ);
1395                         if (sdebug_verbose)
1396                                 cp = "power on reset";
1397                         break;
1398                 case SDEBUG_UA_POOCCUR:
1399                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1400                                         POWER_ON_OCCURRED_ASCQ);
1401                         if (sdebug_verbose)
1402                                 cp = "power on occurred";
1403                         break;
1404                 case SDEBUG_UA_BUS_RESET:
1405                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1406                                         BUS_RESET_ASCQ);
1407                         if (sdebug_verbose)
1408                                 cp = "bus reset";
1409                         break;
1410                 case SDEBUG_UA_MODE_CHANGED:
1411                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
1412                                         MODE_CHANGED_ASCQ);
1413                         if (sdebug_verbose)
1414                                 cp = "mode parameters changed";
1415                         break;
1416                 case SDEBUG_UA_CAPACITY_CHANGED:
1417                         mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
1418                                         CAPACITY_CHANGED_ASCQ);
1419                         if (sdebug_verbose)
1420                                 cp = "capacity data changed";
1421                         break;
1422                 case SDEBUG_UA_MICROCODE_CHANGED:
1423                         mk_sense_buffer(scp, UNIT_ATTENTION,
1424                                         TARGET_CHANGED_ASC,
1425                                         MICROCODE_CHANGED_ASCQ);
1426                         if (sdebug_verbose)
1427                                 cp = "microcode has been changed";
1428                         break;
1429                 case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
1430                         mk_sense_buffer(scp, UNIT_ATTENTION,
1431                                         TARGET_CHANGED_ASC,
1432                                         MICROCODE_CHANGED_WO_RESET_ASCQ);
1433                         if (sdebug_verbose)
1434                                 cp = "microcode has been changed without reset";
1435                         break;
1436                 case SDEBUG_UA_LUNS_CHANGED:
1437                         /*
1438                          * SPC-3 behavior is to report a UNIT ATTENTION with
1439                          * ASC/ASCQ REPORTED LUNS DATA HAS CHANGED on every LUN
1440                          * on the target, until a REPORT LUNS command is
1441                          * received.  SPC-4 behavior is to report it only once.
1442                          * NOTE:  sdebug_scsi_level does not use the same
1443                          * values as struct scsi_device->scsi_level.
1444                          */
1445                         if (sdebug_scsi_level >= 6)     /* SPC-4 and above */
1446                                 clear_luns_changed_on_target(devip);
1447                         mk_sense_buffer(scp, UNIT_ATTENTION,
1448                                         TARGET_CHANGED_ASC,
1449                                         LUNS_CHANGED_ASCQ);
1450                         if (sdebug_verbose)
1451                                 cp = "reported luns data has changed";
1452                         break;
1453                 default:
1454                         pr_warn("unexpected unit attention code=%d\n", k);
1455                         if (sdebug_verbose)
1456                                 cp = "unknown";
1457                         break;
1458                 }
1459                 clear_bit(k, devip->uas_bm);
1460                 if (sdebug_verbose)
1461                         sdev_printk(KERN_INFO, scp->device,
1462                                    "%s reports: Unit attention: %s\n",
1463                                    my_name, cp);
1464                 return check_condition_result;
1465         }
1466         return 0;
1467 }
1468
1469 /* Build SCSI "data-in" buffer. Returns 0 if ok else (DID_ERROR << 16). */
1470 static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1471                                 int arr_len)
1472 {
1473         int act_len;
1474         struct scsi_data_buffer *sdb = &scp->sdb;
1475
1476         if (!sdb->length)
1477                 return 0;
1478         if (scp->sc_data_direction != DMA_FROM_DEVICE)
1479                 return DID_ERROR << 16;
1480
1481         act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
1482                                       arr, arr_len);
1483         scsi_set_resid(scp, scsi_bufflen(scp) - act_len);
1484
1485         return 0;
1486 }
1487
1488 /* Partial build of SCSI "data-in" buffer. Returns 0 if ok else
1489  * (DID_ERROR << 16). Can write to offset in data-in buffer. If multiple
1490  * calls, not required to write in ascending offset order. Assumes resid
1491  * set to scsi_bufflen() prior to any calls.
1492  */
1493 static int p_fill_from_dev_buffer(struct scsi_cmnd *scp, const void *arr,
1494                                   int arr_len, unsigned int off_dst)
1495 {
1496         unsigned int act_len, n;
1497         struct scsi_data_buffer *sdb = &scp->sdb;
1498         off_t skip = off_dst;
1499
1500         if (sdb->length <= off_dst)
1501                 return 0;
1502         if (scp->sc_data_direction != DMA_FROM_DEVICE)
1503                 return DID_ERROR << 16;
1504
1505         act_len = sg_pcopy_from_buffer(sdb->table.sgl, sdb->table.nents,
1506                                        arr, arr_len, skip);
1507         pr_debug("%s: off_dst=%u, scsi_bufflen=%u, act_len=%u, resid=%d\n",
1508                  __func__, off_dst, scsi_bufflen(scp), act_len,
1509                  scsi_get_resid(scp));
1510         n = scsi_bufflen(scp) - (off_dst + act_len);
1511         scsi_set_resid(scp, min_t(u32, scsi_get_resid(scp), n));
1512         return 0;
1513 }
1514
1515 /* Fetches from SCSI "data-out" buffer. Returns number of bytes fetched into
1516  * 'arr' or -1 if error.
1517  */
1518 static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1519                                int arr_len)
1520 {
1521         if (!scsi_bufflen(scp))
1522                 return 0;
1523         if (scp->sc_data_direction != DMA_TO_DEVICE)
1524                 return -1;
1525
1526         return scsi_sg_copy_to_buffer(scp, arr, arr_len);
1527 }
1528
1529
1530 static char sdebug_inq_vendor_id[9] = "Linux   ";
1531 static char sdebug_inq_product_id[17] = "scsi_debug      ";
1532 static char sdebug_inq_product_rev[5] = SDEBUG_VERSION;
1533 /* Use some locally assigned NAAs for SAS addresses. */
1534 static const u64 naa3_comp_a = 0x3222222000000000ULL;
1535 static const u64 naa3_comp_b = 0x3333333000000000ULL;
1536 static const u64 naa3_comp_c = 0x3111111000000000ULL;
1537
1538 /* Device identification VPD page. Returns number of bytes placed in arr */
1539 static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
1540                           int target_dev_id, int dev_id_num,
1541                           const char *dev_id_str, int dev_id_str_len,
1542                           const uuid_t *lu_name)
1543 {
1544         int num, port_a;
1545         char b[32];
1546
1547         port_a = target_dev_id + 1;
1548         /* T10 vendor identifier field format (faked) */
1549         arr[0] = 0x2;   /* ASCII */
1550         arr[1] = 0x1;
1551         arr[2] = 0x0;
1552         memcpy(&arr[4], sdebug_inq_vendor_id, 8);
1553         memcpy(&arr[12], sdebug_inq_product_id, 16);
1554         memcpy(&arr[28], dev_id_str, dev_id_str_len);
1555         num = 8 + 16 + dev_id_str_len;
1556         arr[3] = num;
1557         num += 4;
1558         if (dev_id_num >= 0) {
1559                 if (sdebug_uuid_ctl) {
1560                         /* Locally assigned UUID */
1561                         arr[num++] = 0x1;  /* binary (not necessarily sas) */
1562                         arr[num++] = 0xa;  /* PIV=0, lu, naa */
1563                         arr[num++] = 0x0;
1564                         arr[num++] = 0x12;
1565                         arr[num++] = 0x10; /* uuid type=1, locally assigned */
1566                         arr[num++] = 0x0;
1567                         memcpy(arr + num, lu_name, 16);
1568                         num += 16;
1569                 } else {
1570                         /* NAA-3, Logical unit identifier (binary) */
1571                         arr[num++] = 0x1;  /* binary (not necessarily sas) */
1572                         arr[num++] = 0x3;  /* PIV=0, lu, naa */
1573                         arr[num++] = 0x0;
1574                         arr[num++] = 0x8;
1575                         put_unaligned_be64(naa3_comp_b + dev_id_num, arr + num);
1576                         num += 8;
1577                 }
1578                 /* Target relative port number */
1579                 arr[num++] = 0x61;      /* proto=sas, binary */
1580                 arr[num++] = 0x94;      /* PIV=1, target port, rel port */
1581                 arr[num++] = 0x0;       /* reserved */
1582                 arr[num++] = 0x4;       /* length */
1583                 arr[num++] = 0x0;       /* reserved */
1584                 arr[num++] = 0x0;       /* reserved */
1585                 arr[num++] = 0x0;
1586                 arr[num++] = 0x1;       /* relative port A */
1587         }
1588         /* NAA-3, Target port identifier */
1589         arr[num++] = 0x61;      /* proto=sas, binary */
1590         arr[num++] = 0x93;      /* piv=1, target port, naa */
1591         arr[num++] = 0x0;
1592         arr[num++] = 0x8;
1593         put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1594         num += 8;
1595         /* NAA-3, Target port group identifier */
1596         arr[num++] = 0x61;      /* proto=sas, binary */
1597         arr[num++] = 0x95;      /* piv=1, target port group id */
1598         arr[num++] = 0x0;
1599         arr[num++] = 0x4;
1600         arr[num++] = 0;
1601         arr[num++] = 0;
1602         put_unaligned_be16(port_group_id, arr + num);
1603         num += 2;
1604         /* NAA-3, Target device identifier */
1605         arr[num++] = 0x61;      /* proto=sas, binary */
1606         arr[num++] = 0xa3;      /* piv=1, target device, naa */
1607         arr[num++] = 0x0;
1608         arr[num++] = 0x8;
1609         put_unaligned_be64(naa3_comp_a + target_dev_id, arr + num);
1610         num += 8;
1611         /* SCSI name string: Target device identifier */
1612         arr[num++] = 0x63;      /* proto=sas, UTF-8 */
1613         arr[num++] = 0xa8;      /* piv=1, target device, SCSI name string */
1614         arr[num++] = 0x0;
1615         arr[num++] = 24;
1616         memcpy(arr + num, "naa.32222220", 12);
1617         num += 12;
1618         snprintf(b, sizeof(b), "%08X", target_dev_id);
1619         memcpy(arr + num, b, 8);
1620         num += 8;
1621         memset(arr + num, 0, 4);
1622         num += 4;
1623         return num;
1624 }
1625
1626 static unsigned char vpd84_data[] = {
1627 /* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
1628     0x22,0x22,0x22,0x0,0xbb,0x1,
1629     0x22,0x22,0x22,0x0,0xbb,0x2,
1630 };
1631
1632 /*  Software interface identification VPD page */
1633 static int inquiry_vpd_84(unsigned char *arr)
1634 {
1635         memcpy(arr, vpd84_data, sizeof(vpd84_data));
1636         return sizeof(vpd84_data);
1637 }
1638
1639 /* Management network addresses VPD page */
1640 static int inquiry_vpd_85(unsigned char *arr)
1641 {
1642         int num = 0;
1643         const char *na1 = "https://www.kernel.org/config";
1644         const char *na2 = "http://www.kernel.org/log";
1645         int plen, olen;
1646
1647         arr[num++] = 0x1;       /* lu, storage config */
1648         arr[num++] = 0x0;       /* reserved */
1649         arr[num++] = 0x0;
1650         olen = strlen(na1);
1651         plen = olen + 1;
1652         if (plen % 4)
1653                 plen = ((plen / 4) + 1) * 4;
1654         arr[num++] = plen;      /* length, null termianted, padded */
1655         memcpy(arr + num, na1, olen);
1656         memset(arr + num + olen, 0, plen - olen);
1657         num += plen;
1658
1659         arr[num++] = 0x4;       /* lu, logging */
1660         arr[num++] = 0x0;       /* reserved */
1661         arr[num++] = 0x0;
1662         olen = strlen(na2);
1663         plen = olen + 1;
1664         if (plen % 4)
1665                 plen = ((plen / 4) + 1) * 4;
1666         arr[num++] = plen;      /* length, null terminated, padded */
1667         memcpy(arr + num, na2, olen);
1668         memset(arr + num + olen, 0, plen - olen);
1669         num += plen;
1670
1671         return num;
1672 }
1673
1674 /* SCSI ports VPD page */
1675 static int inquiry_vpd_88(unsigned char *arr, int target_dev_id)
1676 {
1677         int num = 0;
1678         int port_a, port_b;
1679
1680         port_a = target_dev_id + 1;
1681         port_b = port_a + 1;
1682         arr[num++] = 0x0;       /* reserved */
1683         arr[num++] = 0x0;       /* reserved */
1684         arr[num++] = 0x0;
1685         arr[num++] = 0x1;       /* relative port 1 (primary) */
1686         memset(arr + num, 0, 6);
1687         num += 6;
1688         arr[num++] = 0x0;
1689         arr[num++] = 12;        /* length tp descriptor */
1690         /* naa-5 target port identifier (A) */
1691         arr[num++] = 0x61;      /* proto=sas, binary */
1692         arr[num++] = 0x93;      /* PIV=1, target port, NAA */
1693         arr[num++] = 0x0;       /* reserved */
1694         arr[num++] = 0x8;       /* length */
1695         put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1696         num += 8;
1697         arr[num++] = 0x0;       /* reserved */
1698         arr[num++] = 0x0;       /* reserved */
1699         arr[num++] = 0x0;
1700         arr[num++] = 0x2;       /* relative port 2 (secondary) */
1701         memset(arr + num, 0, 6);
1702         num += 6;
1703         arr[num++] = 0x0;
1704         arr[num++] = 12;        /* length tp descriptor */
1705         /* naa-5 target port identifier (B) */
1706         arr[num++] = 0x61;      /* proto=sas, binary */
1707         arr[num++] = 0x93;      /* PIV=1, target port, NAA */
1708         arr[num++] = 0x0;       /* reserved */
1709         arr[num++] = 0x8;       /* length */
1710         put_unaligned_be64(naa3_comp_a + port_b, arr + num);
1711         num += 8;
1712
1713         return num;
1714 }
1715
1716
1717 static unsigned char vpd89_data[] = {
1718 /* from 4th byte */ 0,0,0,0,
1719 'l','i','n','u','x',' ',' ',' ',
1720 'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
1721 '1','2','3','4',
1722 0x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
1723 0xec,0,0,0,
1724 0x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
1725 0,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
1726 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
1727 0x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
1728 0x53,0x41,
1729 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
1730 0x20,0x20,
1731 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
1732 0x10,0x80,
1733 0,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
1734 0x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
1735 0x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
1736 0,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
1737 0x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
1738 0x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
1739 0,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
1740 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1741 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1742 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1743 0x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
1744 0,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
1745 0xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
1746 0,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
1747 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1748 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1749 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1750 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1751 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1752 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1753 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1754 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1755 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1756 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1757 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1758 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
1759 };
1760
1761 /* ATA Information VPD page */
1762 static int inquiry_vpd_89(unsigned char *arr)
1763 {
1764         memcpy(arr, vpd89_data, sizeof(vpd89_data));
1765         return sizeof(vpd89_data);
1766 }
1767
1768
1769 static unsigned char vpdb0_data[] = {
1770         /* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
1771         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1772         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1773         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1774 };
1775
1776 /* Block limits VPD page (SBC-3) */
1777 static int inquiry_vpd_b0(unsigned char *arr)
1778 {
1779         unsigned int gran;
1780
1781         memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
1782
1783         /* Optimal transfer length granularity */
1784         if (sdebug_opt_xferlen_exp != 0 &&
1785             sdebug_physblk_exp < sdebug_opt_xferlen_exp)
1786                 gran = 1 << sdebug_opt_xferlen_exp;
1787         else
1788                 gran = 1 << sdebug_physblk_exp;
1789         put_unaligned_be16(gran, arr + 2);
1790
1791         /* Maximum Transfer Length */
1792         if (sdebug_store_sectors > 0x400)
1793                 put_unaligned_be32(sdebug_store_sectors, arr + 4);
1794
1795         /* Optimal Transfer Length */
1796         put_unaligned_be32(sdebug_opt_blks, &arr[8]);
1797
1798         if (sdebug_lbpu) {
1799                 /* Maximum Unmap LBA Count */
1800                 put_unaligned_be32(sdebug_unmap_max_blocks, &arr[16]);
1801
1802                 /* Maximum Unmap Block Descriptor Count */
1803                 put_unaligned_be32(sdebug_unmap_max_desc, &arr[20]);
1804         }
1805
1806         /* Unmap Granularity Alignment */
1807         if (sdebug_unmap_alignment) {
1808                 put_unaligned_be32(sdebug_unmap_alignment, &arr[28]);
1809                 arr[28] |= 0x80; /* UGAVALID */
1810         }
1811
1812         /* Optimal Unmap Granularity */
1813         put_unaligned_be32(sdebug_unmap_granularity, &arr[24]);
1814
1815         /* Maximum WRITE SAME Length */
1816         put_unaligned_be64(sdebug_write_same_length, &arr[32]);
1817
1818         return 0x3c; /* Mandatory page length for Logical Block Provisioning */
1819 }
1820
1821 /* Block device characteristics VPD page (SBC-3) */
1822 static int inquiry_vpd_b1(struct sdebug_dev_info *devip, unsigned char *arr)
1823 {
1824         memset(arr, 0, 0x3c);
1825         arr[0] = 0;
1826         arr[1] = 1;     /* non rotating medium (e.g. solid state) */
1827         arr[2] = 0;
1828         arr[3] = 5;     /* less than 1.8" */
1829
1830         return 0x3c;
1831 }
1832
1833 /* Logical block provisioning VPD page (SBC-4) */
1834 static int inquiry_vpd_b2(unsigned char *arr)
1835 {
1836         memset(arr, 0, 0x4);
1837         arr[0] = 0;                     /* threshold exponent */
1838         if (sdebug_lbpu)
1839                 arr[1] = 1 << 7;
1840         if (sdebug_lbpws)
1841                 arr[1] |= 1 << 6;
1842         if (sdebug_lbpws10)
1843                 arr[1] |= 1 << 5;
1844         if (sdebug_lbprz && scsi_debug_lbp())
1845                 arr[1] |= (sdebug_lbprz & 0x7) << 2;  /* sbc4r07 and later */
1846         /* anc_sup=0; dp=0 (no provisioning group descriptor) */
1847         /* minimum_percentage=0; provisioning_type=0 (unknown) */
1848         /* threshold_percentage=0 */
1849         return 0x4;
1850 }
1851
1852 /* Zoned block device characteristics VPD page (ZBC mandatory) */
1853 static int inquiry_vpd_b6(struct sdebug_dev_info *devip, unsigned char *arr)
1854 {
1855         memset(arr, 0, 0x3c);
1856         arr[0] = 0x1; /* set URSWRZ (unrestricted read in seq. wr req zone) */
1857         /*
1858          * Set Optimal number of open sequential write preferred zones and
1859          * Optimal number of non-sequentially written sequential write
1860          * preferred zones fields to 'not reported' (0xffffffff). Leave other
1861          * fields set to zero, apart from Max. number of open swrz_s field.
1862          */
1863         put_unaligned_be32(0xffffffff, &arr[4]);
1864         put_unaligned_be32(0xffffffff, &arr[8]);
1865         if (sdeb_zbc_model == BLK_ZONED_HM && devip->max_open)
1866                 put_unaligned_be32(devip->max_open, &arr[12]);
1867         else
1868                 put_unaligned_be32(0xffffffff, &arr[12]);
1869         if (devip->zcap < devip->zsize) {
1870                 arr[19] = ZBC_CONSTANT_ZONE_START_OFFSET;
1871                 put_unaligned_be64(devip->zsize, &arr[20]);
1872         } else {
1873                 arr[19] = 0;
1874         }
1875         return 0x3c;
1876 }
1877
1878 #define SDEBUG_BLE_LEN_AFTER_B4 28      /* thus vpage 32 bytes long */
1879
1880 enum { MAXIMUM_NUMBER_OF_STREAMS = 6, PERMANENT_STREAM_COUNT = 5 };
1881
1882 /* Block limits extension VPD page (SBC-4) */
1883 static int inquiry_vpd_b7(unsigned char *arrb4)
1884 {
1885         memset(arrb4, 0, SDEBUG_BLE_LEN_AFTER_B4);
1886         arrb4[1] = 1; /* Reduced stream control support (RSCS) */
1887         put_unaligned_be16(MAXIMUM_NUMBER_OF_STREAMS, &arrb4[2]);
1888         return SDEBUG_BLE_LEN_AFTER_B4;
1889 }
1890
1891 #define SDEBUG_LONG_INQ_SZ 96
1892 #define SDEBUG_MAX_INQ_ARR_SZ 584
1893
1894 static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1895 {
1896         unsigned char pq_pdt;
1897         unsigned char *arr;
1898         unsigned char *cmd = scp->cmnd;
1899         u32 alloc_len, n;
1900         int ret;
1901         bool have_wlun, is_disk, is_zbc, is_disk_zbc;
1902
1903         alloc_len = get_unaligned_be16(cmd + 3);
1904         arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
1905         if (! arr)
1906                 return DID_REQUEUE << 16;
1907         is_disk = (sdebug_ptype == TYPE_DISK);
1908         is_zbc = devip->zoned;
1909         is_disk_zbc = (is_disk || is_zbc);
1910         have_wlun = scsi_is_wlun(scp->device->lun);
1911         if (have_wlun)
1912                 pq_pdt = TYPE_WLUN;     /* present, wlun */
1913         else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL))
1914                 pq_pdt = 0x7f;  /* not present, PQ=3, PDT=0x1f */
1915         else
1916                 pq_pdt = (sdebug_ptype & 0x1f);
1917         arr[0] = pq_pdt;
1918         if (0x2 & cmd[1]) {  /* CMDDT bit set */
1919                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 1);
1920                 kfree(arr);
1921                 return check_condition_result;
1922         } else if (0x1 & cmd[1]) {  /* EVPD bit set */
1923                 int lu_id_num, port_group_id, target_dev_id;
1924                 u32 len;
1925                 char lu_id_str[6];
1926                 int host_no = devip->sdbg_host->shost->host_no;
1927
1928                 arr[1] = cmd[2];
1929                 port_group_id = (((host_no + 1) & 0x7f) << 8) +
1930                     (devip->channel & 0x7f);
1931                 if (sdebug_vpd_use_hostno == 0)
1932                         host_no = 0;
1933                 lu_id_num = have_wlun ? -1 : (((host_no + 1) * 2000) +
1934                             (devip->target * 1000) + devip->lun);
1935                 target_dev_id = ((host_no + 1) * 2000) +
1936                                  (devip->target * 1000) - 3;
1937                 len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
1938                 if (0 == cmd[2]) { /* supported vital product data pages */
1939                         n = 4;
1940                         arr[n++] = 0x0;   /* this page */
1941                         arr[n++] = 0x80;  /* unit serial number */
1942                         arr[n++] = 0x83;  /* device identification */
1943                         arr[n++] = 0x84;  /* software interface ident. */
1944                         arr[n++] = 0x85;  /* management network addresses */
1945                         arr[n++] = 0x86;  /* extended inquiry */
1946                         arr[n++] = 0x87;  /* mode page policy */
1947                         arr[n++] = 0x88;  /* SCSI ports */
1948                         if (is_disk_zbc) {        /* SBC or ZBC */
1949                                 arr[n++] = 0x89;  /* ATA information */
1950                                 arr[n++] = 0xb0;  /* Block limits */
1951                                 arr[n++] = 0xb1;  /* Block characteristics */
1952                                 if (is_disk)
1953                                         arr[n++] = 0xb2;  /* LB Provisioning */
1954                                 if (is_zbc)
1955                                         arr[n++] = 0xb6;  /* ZB dev. char. */
1956                                 arr[n++] = 0xb7;  /* Block limits extension */
1957                         }
1958                         arr[3] = n - 4;   /* number of supported VPD pages */
1959                 } else if (0x80 == cmd[2]) { /* unit serial number */
1960                         arr[3] = len;
1961                         memcpy(&arr[4], lu_id_str, len);
1962                 } else if (0x83 == cmd[2]) { /* device identification */
1963                         arr[3] = inquiry_vpd_83(&arr[4], port_group_id,
1964                                                 target_dev_id, lu_id_num,
1965                                                 lu_id_str, len,
1966                                                 &devip->lu_name);
1967                 } else if (0x84 == cmd[2]) { /* Software interface ident. */
1968                         arr[3] = inquiry_vpd_84(&arr[4]);
1969                 } else if (0x85 == cmd[2]) { /* Management network addresses */
1970                         arr[3] = inquiry_vpd_85(&arr[4]);
1971                 } else if (0x86 == cmd[2]) { /* extended inquiry */
1972                         arr[3] = 0x3c;  /* number of following entries */
1973                         if (sdebug_dif == T10_PI_TYPE3_PROTECTION)
1974                                 arr[4] = 0x4;   /* SPT: GRD_CHK:1 */
1975                         else if (have_dif_prot)
1976                                 arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
1977                         else
1978                                 arr[4] = 0x0;   /* no protection stuff */
1979                         /*
1980                          * GROUP_SUP=1; HEADSUP=1 (HEAD OF QUEUE); ORDSUP=1
1981                          * (ORDERED queuing); SIMPSUP=1 (SIMPLE queuing).
1982                          */
1983                         arr[5] = 0x17;
1984                 } else if (0x87 == cmd[2]) { /* mode page policy */
1985                         arr[3] = 0x8;   /* number of following entries */
1986                         arr[4] = 0x2;   /* disconnect-reconnect mp */
1987                         arr[6] = 0x80;  /* mlus, shared */
1988                         arr[8] = 0x18;   /* protocol specific lu */
1989                         arr[10] = 0x82;  /* mlus, per initiator port */
1990                 } else if (0x88 == cmd[2]) { /* SCSI Ports */
1991                         arr[3] = inquiry_vpd_88(&arr[4], target_dev_id);
1992                 } else if (is_disk_zbc && 0x89 == cmd[2]) { /* ATA info */
1993                         n = inquiry_vpd_89(&arr[4]);
1994                         put_unaligned_be16(n, arr + 2);
1995                 } else if (is_disk_zbc && 0xb0 == cmd[2]) { /* Block limits */
1996                         arr[3] = inquiry_vpd_b0(&arr[4]);
1997                 } else if (is_disk_zbc && 0xb1 == cmd[2]) { /* Block char. */
1998                         arr[3] = inquiry_vpd_b1(devip, &arr[4]);
1999                 } else if (is_disk && 0xb2 == cmd[2]) { /* LB Prov. */
2000                         arr[3] = inquiry_vpd_b2(&arr[4]);
2001                 } else if (is_zbc && cmd[2] == 0xb6) { /* ZB dev. charact. */
2002                         arr[3] = inquiry_vpd_b6(devip, &arr[4]);
2003                 } else if (cmd[2] == 0xb7) { /* block limits extension page */
2004                         arr[3] = inquiry_vpd_b7(&arr[4]);
2005                 } else {
2006                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
2007                         kfree(arr);
2008                         return check_condition_result;
2009                 }
2010                 len = min_t(u32, get_unaligned_be16(arr + 2) + 4, alloc_len);
2011                 ret = fill_from_dev_buffer(scp, arr,
2012                             min_t(u32, len, SDEBUG_MAX_INQ_ARR_SZ));
2013                 kfree(arr);
2014                 return ret;
2015         }
2016         /* drops through here for a standard inquiry */
2017         arr[1] = sdebug_removable ? 0x80 : 0;   /* Removable disk */
2018         arr[2] = sdebug_scsi_level;
2019         arr[3] = 2;    /* response_data_format==2 */
2020         arr[4] = SDEBUG_LONG_INQ_SZ - 5;
2021         arr[5] = (int)have_dif_prot;    /* PROTECT bit */
2022         if (sdebug_vpd_use_hostno == 0)
2023                 arr[5] |= 0x10; /* claim: implicit TPGS */
2024         arr[6] = 0x10; /* claim: MultiP */
2025         /* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
2026         arr[7] = 0xa; /* claim: LINKED + CMDQUE */
2027         memcpy(&arr[8], sdebug_inq_vendor_id, 8);
2028         memcpy(&arr[16], sdebug_inq_product_id, 16);
2029         memcpy(&arr[32], sdebug_inq_product_rev, 4);
2030         /* Use Vendor Specific area to place driver date in ASCII hex */
2031         memcpy(&arr[36], sdebug_version_date, 8);
2032         /* version descriptors (2 bytes each) follow */
2033         put_unaligned_be16(0xc0, arr + 58);   /* SAM-6 no version claimed */
2034         put_unaligned_be16(0x5c0, arr + 60);  /* SPC-5 no version claimed */
2035         n = 62;
2036         if (is_disk) {          /* SBC-4 no version claimed */
2037                 put_unaligned_be16(0x600, arr + n);
2038                 n += 2;
2039         } else if (sdebug_ptype == TYPE_TAPE) { /* SSC-4 rev 3 */
2040                 put_unaligned_be16(0x525, arr + n);
2041                 n += 2;
2042         } else if (is_zbc) {    /* ZBC BSR INCITS 536 revision 05 */
2043                 put_unaligned_be16(0x624, arr + n);
2044                 n += 2;
2045         }
2046         put_unaligned_be16(0x2100, arr + n);    /* SPL-4 no version claimed */
2047         ret = fill_from_dev_buffer(scp, arr,
2048                             min_t(u32, alloc_len, SDEBUG_LONG_INQ_SZ));
2049         kfree(arr);
2050         return ret;
2051 }
2052
2053 /* See resp_iec_m_pg() for how this data is manipulated */
2054 static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
2055                                    0, 0, 0x0, 0x0};
2056
2057 static int resp_requests(struct scsi_cmnd *scp,
2058                          struct sdebug_dev_info *devip)
2059 {
2060         unsigned char *cmd = scp->cmnd;
2061         unsigned char arr[SCSI_SENSE_BUFFERSIZE];       /* assume >= 18 bytes */
2062         bool dsense = !!(cmd[1] & 1);
2063         u32 alloc_len = cmd[4];
2064         u32 len = 18;
2065         int stopped_state = atomic_read(&devip->stopped);
2066
2067         memset(arr, 0, sizeof(arr));
2068         if (stopped_state > 0) {        /* some "pollable" data [spc6r02: 5.12.2] */
2069                 if (dsense) {
2070                         arr[0] = 0x72;
2071                         arr[1] = NOT_READY;
2072                         arr[2] = LOGICAL_UNIT_NOT_READY;
2073                         arr[3] = (stopped_state == 2) ? 0x1 : 0x2;
2074                         len = 8;
2075                 } else {
2076                         arr[0] = 0x70;
2077                         arr[2] = NOT_READY;             /* NO_SENSE in sense_key */
2078                         arr[7] = 0xa;                   /* 18 byte sense buffer */
2079                         arr[12] = LOGICAL_UNIT_NOT_READY;
2080                         arr[13] = (stopped_state == 2) ? 0x1 : 0x2;
2081                 }
2082         } else if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
2083                 /* Information exceptions control mode page: TEST=1, MRIE=6 */
2084                 if (dsense) {
2085                         arr[0] = 0x72;
2086                         arr[1] = 0x0;           /* NO_SENSE in sense_key */
2087                         arr[2] = THRESHOLD_EXCEEDED;
2088                         arr[3] = 0xff;          /* Failure prediction(false) */
2089                         len = 8;
2090                 } else {
2091                         arr[0] = 0x70;
2092                         arr[2] = 0x0;           /* NO_SENSE in sense_key */
2093                         arr[7] = 0xa;           /* 18 byte sense buffer */
2094                         arr[12] = THRESHOLD_EXCEEDED;
2095                         arr[13] = 0xff;         /* Failure prediction(false) */
2096                 }
2097         } else {        /* nothing to report */
2098                 if (dsense) {
2099                         len = 8;
2100                         memset(arr, 0, len);
2101                         arr[0] = 0x72;
2102                 } else {
2103                         memset(arr, 0, len);
2104                         arr[0] = 0x70;
2105                         arr[7] = 0xa;
2106                 }
2107         }
2108         return fill_from_dev_buffer(scp, arr, min_t(u32, len, alloc_len));
2109 }
2110
2111 static int resp_start_stop(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2112 {
2113         unsigned char *cmd = scp->cmnd;
2114         int power_cond, want_stop, stopped_state;
2115         bool changing;
2116
2117         power_cond = (cmd[4] & 0xf0) >> 4;
2118         if (power_cond) {
2119                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 7);
2120                 return check_condition_result;
2121         }
2122         want_stop = !(cmd[4] & 1);
2123         stopped_state = atomic_read(&devip->stopped);
2124         if (stopped_state == 2) {
2125                 ktime_t now_ts = ktime_get_boottime();
2126
2127                 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
2128                         u64 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
2129
2130                         if (diff_ns >= ((u64)sdeb_tur_ms_to_ready * 1000000)) {
2131                                 /* tur_ms_to_ready timer extinguished */
2132                                 atomic_set(&devip->stopped, 0);
2133                                 stopped_state = 0;
2134                         }
2135                 }
2136                 if (stopped_state == 2) {
2137                         if (want_stop) {
2138                                 stopped_state = 1;      /* dummy up success */
2139                         } else {        /* Disallow tur_ms_to_ready delay to be overridden */
2140                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 0 /* START bit */);
2141                                 return check_condition_result;
2142                         }
2143                 }
2144         }
2145         changing = (stopped_state != want_stop);
2146         if (changing)
2147                 atomic_xchg(&devip->stopped, want_stop);
2148         if (!changing || (cmd[1] & 0x1))  /* state unchanged or IMMED bit set in cdb */
2149                 return SDEG_RES_IMMED_MASK;
2150         else
2151                 return 0;
2152 }
2153
2154 static sector_t get_sdebug_capacity(void)
2155 {
2156         static const unsigned int gibibyte = 1073741824;
2157
2158         if (sdebug_virtual_gb > 0)
2159                 return (sector_t)sdebug_virtual_gb *
2160                         (gibibyte / sdebug_sector_size);
2161         else
2162                 return sdebug_store_sectors;
2163 }
2164
2165 #define SDEBUG_READCAP_ARR_SZ 8
2166 static int resp_readcap(struct scsi_cmnd *scp,
2167                         struct sdebug_dev_info *devip)
2168 {
2169         unsigned char arr[SDEBUG_READCAP_ARR_SZ];
2170         unsigned int capac;
2171
2172         /* following just in case virtual_gb changed */
2173         sdebug_capacity = get_sdebug_capacity();
2174         memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
2175         if (sdebug_capacity < 0xffffffff) {
2176                 capac = (unsigned int)sdebug_capacity - 1;
2177                 put_unaligned_be32(capac, arr + 0);
2178         } else
2179                 put_unaligned_be32(0xffffffff, arr + 0);
2180         put_unaligned_be16(sdebug_sector_size, arr + 6);
2181         return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
2182 }
2183
2184 #define SDEBUG_READCAP16_ARR_SZ 32
2185 static int resp_readcap16(struct scsi_cmnd *scp,
2186                           struct sdebug_dev_info *devip)
2187 {
2188         unsigned char *cmd = scp->cmnd;
2189         unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
2190         u32 alloc_len;
2191
2192         alloc_len = get_unaligned_be32(cmd + 10);
2193         /* following just in case virtual_gb changed */
2194         sdebug_capacity = get_sdebug_capacity();
2195         memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
2196         put_unaligned_be64((u64)(sdebug_capacity - 1), arr + 0);
2197         put_unaligned_be32(sdebug_sector_size, arr + 8);
2198         arr[13] = sdebug_physblk_exp & 0xf;
2199         arr[14] = (sdebug_lowest_aligned >> 8) & 0x3f;
2200
2201         if (scsi_debug_lbp()) {
2202                 arr[14] |= 0x80; /* LBPME */
2203                 /* from sbc4r07, this LBPRZ field is 1 bit, but the LBPRZ in
2204                  * the LB Provisioning VPD page is 3 bits. Note that lbprz=2
2205                  * in the wider field maps to 0 in this field.
2206                  */
2207                 if (sdebug_lbprz & 1)   /* precisely what the draft requires */
2208                         arr[14] |= 0x40;
2209         }
2210
2211         /*
2212          * Since the scsi_debug READ CAPACITY implementation always reports the
2213          * total disk capacity, set RC BASIS = 1 for host-managed ZBC devices.
2214          */
2215         if (devip->zoned)
2216                 arr[12] |= 1 << 4;
2217
2218         arr[15] = sdebug_lowest_aligned & 0xff;
2219
2220         if (have_dif_prot) {
2221                 arr[12] = (sdebug_dif - 1) << 1; /* P_TYPE */
2222                 arr[12] |= 1; /* PROT_EN */
2223         }
2224
2225         return fill_from_dev_buffer(scp, arr,
2226                             min_t(u32, alloc_len, SDEBUG_READCAP16_ARR_SZ));
2227 }
2228
2229 #define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
2230
2231 static int resp_report_tgtpgs(struct scsi_cmnd *scp,
2232                               struct sdebug_dev_info *devip)
2233 {
2234         unsigned char *cmd = scp->cmnd;
2235         unsigned char *arr;
2236         int host_no = devip->sdbg_host->shost->host_no;
2237         int port_group_a, port_group_b, port_a, port_b;
2238         u32 alen, n, rlen;
2239         int ret;
2240
2241         alen = get_unaligned_be32(cmd + 6);
2242         arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
2243         if (! arr)
2244                 return DID_REQUEUE << 16;
2245         /*
2246          * EVPD page 0x88 states we have two ports, one
2247          * real and a fake port with no device connected.
2248          * So we create two port groups with one port each
2249          * and set the group with port B to unavailable.
2250          */
2251         port_a = 0x1; /* relative port A */
2252         port_b = 0x2; /* relative port B */
2253         port_group_a = (((host_no + 1) & 0x7f) << 8) +
2254                         (devip->channel & 0x7f);
2255         port_group_b = (((host_no + 1) & 0x7f) << 8) +
2256                         (devip->channel & 0x7f) + 0x80;
2257
2258         /*
2259          * The asymmetric access state is cycled according to the host_id.
2260          */
2261         n = 4;
2262         if (sdebug_vpd_use_hostno == 0) {
2263                 arr[n++] = host_no % 3; /* Asymm access state */
2264                 arr[n++] = 0x0F; /* claim: all states are supported */
2265         } else {
2266                 arr[n++] = 0x0; /* Active/Optimized path */
2267                 arr[n++] = 0x01; /* only support active/optimized paths */
2268         }
2269         put_unaligned_be16(port_group_a, arr + n);
2270         n += 2;
2271         arr[n++] = 0;    /* Reserved */
2272         arr[n++] = 0;    /* Status code */
2273         arr[n++] = 0;    /* Vendor unique */
2274         arr[n++] = 0x1;  /* One port per group */
2275         arr[n++] = 0;    /* Reserved */
2276         arr[n++] = 0;    /* Reserved */
2277         put_unaligned_be16(port_a, arr + n);
2278         n += 2;
2279         arr[n++] = 3;    /* Port unavailable */
2280         arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
2281         put_unaligned_be16(port_group_b, arr + n);
2282         n += 2;
2283         arr[n++] = 0;    /* Reserved */
2284         arr[n++] = 0;    /* Status code */
2285         arr[n++] = 0;    /* Vendor unique */
2286         arr[n++] = 0x1;  /* One port per group */
2287         arr[n++] = 0;    /* Reserved */
2288         arr[n++] = 0;    /* Reserved */
2289         put_unaligned_be16(port_b, arr + n);
2290         n += 2;
2291
2292         rlen = n - 4;
2293         put_unaligned_be32(rlen, arr + 0);
2294
2295         /*
2296          * Return the smallest value of either
2297          * - The allocated length
2298          * - The constructed command length
2299          * - The maximum array size
2300          */
2301         rlen = min(alen, n);
2302         ret = fill_from_dev_buffer(scp, arr,
2303                            min_t(u32, rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
2304         kfree(arr);
2305         return ret;
2306 }
2307
2308 static int resp_rsup_opcodes(struct scsi_cmnd *scp,
2309                              struct sdebug_dev_info *devip)
2310 {
2311         bool rctd;
2312         u8 reporting_opts, req_opcode, sdeb_i, supp;
2313         u16 req_sa, u;
2314         u32 alloc_len, a_len;
2315         int k, offset, len, errsts, count, bump, na;
2316         const struct opcode_info_t *oip;
2317         const struct opcode_info_t *r_oip;
2318         u8 *arr;
2319         u8 *cmd = scp->cmnd;
2320
2321         rctd = !!(cmd[2] & 0x80);
2322         reporting_opts = cmd[2] & 0x7;
2323         req_opcode = cmd[3];
2324         req_sa = get_unaligned_be16(cmd + 4);
2325         alloc_len = get_unaligned_be32(cmd + 6);
2326         if (alloc_len < 4 || alloc_len > 0xffff) {
2327                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
2328                 return check_condition_result;
2329         }
2330         if (alloc_len > 8192)
2331                 a_len = 8192;
2332         else
2333                 a_len = alloc_len;
2334         arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
2335         if (NULL == arr) {
2336                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
2337                                 INSUFF_RES_ASCQ);
2338                 return check_condition_result;
2339         }
2340         switch (reporting_opts) {
2341         case 0: /* all commands */
2342                 /* count number of commands */
2343                 for (count = 0, oip = opcode_info_arr;
2344                      oip->num_attached != 0xff; ++oip) {
2345                         if (F_INV_OP & oip->flags)
2346                                 continue;
2347                         count += (oip->num_attached + 1);
2348                 }
2349                 bump = rctd ? 20 : 8;
2350                 put_unaligned_be32(count * bump, arr);
2351                 for (offset = 4, oip = opcode_info_arr;
2352                      oip->num_attached != 0xff && offset < a_len; ++oip) {
2353                         if (F_INV_OP & oip->flags)
2354                                 continue;
2355                         na = oip->num_attached;
2356                         arr[offset] = oip->opcode;
2357                         put_unaligned_be16(oip->sa, arr + offset + 2);
2358                         if (rctd)
2359                                 arr[offset + 5] |= 0x2;
2360                         if (FF_SA & oip->flags)
2361                                 arr[offset + 5] |= 0x1;
2362                         put_unaligned_be16(oip->len_mask[0], arr + offset + 6);
2363                         if (rctd)
2364                                 put_unaligned_be16(0xa, arr + offset + 8);
2365                         r_oip = oip;
2366                         for (k = 0, oip = oip->arrp; k < na; ++k, ++oip) {
2367                                 if (F_INV_OP & oip->flags)
2368                                         continue;
2369                                 offset += bump;
2370                                 arr[offset] = oip->opcode;
2371                                 put_unaligned_be16(oip->sa, arr + offset + 2);
2372                                 if (rctd)
2373                                         arr[offset + 5] |= 0x2;
2374                                 if (FF_SA & oip->flags)
2375                                         arr[offset + 5] |= 0x1;
2376                                 put_unaligned_be16(oip->len_mask[0],
2377                                                    arr + offset + 6);
2378                                 if (rctd)
2379                                         put_unaligned_be16(0xa,
2380                                                            arr + offset + 8);
2381                         }
2382                         oip = r_oip;
2383                         offset += bump;
2384                 }
2385                 break;
2386         case 1: /* one command: opcode only */
2387         case 2: /* one command: opcode plus service action */
2388         case 3: /* one command: if sa==0 then opcode only else opcode+sa */
2389                 sdeb_i = opcode_ind_arr[req_opcode];
2390                 oip = &opcode_info_arr[sdeb_i];
2391                 if (F_INV_OP & oip->flags) {
2392                         supp = 1;
2393                         offset = 4;
2394                 } else {
2395                         if (1 == reporting_opts) {
2396                                 if (FF_SA & oip->flags) {
2397                                         mk_sense_invalid_fld(scp, SDEB_IN_CDB,
2398                                                              2, 2);
2399                                         kfree(arr);
2400                                         return check_condition_result;
2401                                 }
2402                                 req_sa = 0;
2403                         } else if (2 == reporting_opts &&
2404                                    0 == (FF_SA & oip->flags)) {
2405                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
2406                                 kfree(arr);     /* point at requested sa */
2407                                 return check_condition_result;
2408                         }
2409                         if (0 == (FF_SA & oip->flags) &&
2410                             req_opcode == oip->opcode)
2411                                 supp = 3;
2412                         else if (0 == (FF_SA & oip->flags)) {
2413                                 na = oip->num_attached;
2414                                 for (k = 0, oip = oip->arrp; k < na;
2415                                      ++k, ++oip) {
2416                                         if (req_opcode == oip->opcode)
2417                                                 break;
2418                                 }
2419                                 supp = (k >= na) ? 1 : 3;
2420                         } else if (req_sa != oip->sa) {
2421                                 na = oip->num_attached;
2422                                 for (k = 0, oip = oip->arrp; k < na;
2423                                      ++k, ++oip) {
2424                                         if (req_sa == oip->sa)
2425                                                 break;
2426                                 }
2427                                 supp = (k >= na) ? 1 : 3;
2428                         } else
2429                                 supp = 3;
2430                         if (3 == supp) {
2431                                 u = oip->len_mask[0];
2432                                 put_unaligned_be16(u, arr + 2);
2433                                 arr[4] = oip->opcode;
2434                                 for (k = 1; k < u; ++k)
2435                                         arr[4 + k] = (k < 16) ?
2436                                                  oip->len_mask[k] : 0xff;
2437                                 offset = 4 + u;
2438                         } else
2439                                 offset = 4;
2440                 }
2441                 arr[1] = (rctd ? 0x80 : 0) | supp;
2442                 if (rctd) {
2443                         put_unaligned_be16(0xa, arr + offset);
2444                         offset += 12;
2445                 }
2446                 break;
2447         default:
2448                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
2449                 kfree(arr);
2450                 return check_condition_result;
2451         }
2452         offset = (offset < a_len) ? offset : a_len;
2453         len = (offset < alloc_len) ? offset : alloc_len;
2454         errsts = fill_from_dev_buffer(scp, arr, len);
2455         kfree(arr);
2456         return errsts;
2457 }
2458
2459 static int resp_rsup_tmfs(struct scsi_cmnd *scp,
2460                           struct sdebug_dev_info *devip)
2461 {
2462         bool repd;
2463         u32 alloc_len, len;
2464         u8 arr[16];
2465         u8 *cmd = scp->cmnd;
2466
2467         memset(arr, 0, sizeof(arr));
2468         repd = !!(cmd[2] & 0x80);
2469         alloc_len = get_unaligned_be32(cmd + 6);
2470         if (alloc_len < 4) {
2471                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
2472                 return check_condition_result;
2473         }
2474         arr[0] = 0xc8;          /* ATS | ATSS | LURS */
2475         arr[1] = 0x1;           /* ITNRS */
2476         if (repd) {
2477                 arr[3] = 0xc;
2478                 len = 16;
2479         } else
2480                 len = 4;
2481
2482         len = (len < alloc_len) ? len : alloc_len;
2483         return fill_from_dev_buffer(scp, arr, len);
2484 }
2485
2486 /* <<Following mode page info copied from ST318451LW>> */
2487
2488 static int resp_err_recov_pg(unsigned char *p, int pcontrol, int target)
2489 {       /* Read-Write Error Recovery page for mode_sense */
2490         unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
2491                                         5, 0, 0xff, 0xff};
2492
2493         memcpy(p, err_recov_pg, sizeof(err_recov_pg));
2494         if (1 == pcontrol)
2495                 memset(p + 2, 0, sizeof(err_recov_pg) - 2);
2496         return sizeof(err_recov_pg);
2497 }
2498
2499 static int resp_disconnect_pg(unsigned char *p, int pcontrol, int target)
2500 {       /* Disconnect-Reconnect page for mode_sense */
2501         unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
2502                                          0, 0, 0, 0, 0, 0, 0, 0};
2503
2504         memcpy(p, disconnect_pg, sizeof(disconnect_pg));
2505         if (1 == pcontrol)
2506                 memset(p + 2, 0, sizeof(disconnect_pg) - 2);
2507         return sizeof(disconnect_pg);
2508 }
2509
2510 static int resp_format_pg(unsigned char *p, int pcontrol, int target)
2511 {       /* Format device page for mode_sense */
2512         unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
2513                                      0, 0, 0, 0, 0, 0, 0, 0,
2514                                      0, 0, 0, 0, 0x40, 0, 0, 0};
2515
2516         memcpy(p, format_pg, sizeof(format_pg));
2517         put_unaligned_be16(sdebug_sectors_per, p + 10);
2518         put_unaligned_be16(sdebug_sector_size, p + 12);
2519         if (sdebug_removable)
2520                 p[20] |= 0x20; /* should agree with INQUIRY */
2521         if (1 == pcontrol)
2522                 memset(p + 2, 0, sizeof(format_pg) - 2);
2523         return sizeof(format_pg);
2524 }
2525
2526 static unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
2527                                      0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
2528                                      0, 0, 0, 0};
2529
2530 static int resp_caching_pg(unsigned char *p, int pcontrol, int target)
2531 {       /* Caching page for mode_sense */
2532         unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
2533                 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
2534         unsigned char d_caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
2535                 0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
2536
2537         if (SDEBUG_OPT_N_WCE & sdebug_opts)
2538                 caching_pg[2] &= ~0x4;  /* set WCE=0 (default WCE=1) */
2539         memcpy(p, caching_pg, sizeof(caching_pg));
2540         if (1 == pcontrol)
2541                 memcpy(p + 2, ch_caching_pg, sizeof(ch_caching_pg));
2542         else if (2 == pcontrol)
2543                 memcpy(p, d_caching_pg, sizeof(d_caching_pg));
2544         return sizeof(caching_pg);
2545 }
2546
2547 static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2548                                     0, 0, 0x2, 0x4b};
2549
2550 static int resp_ctrl_m_pg(unsigned char *p, int pcontrol, int target)
2551 {       /* Control mode page for mode_sense */
2552         unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
2553                                         0, 0, 0, 0};
2554         unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2555                                      0, 0, 0x2, 0x4b};
2556
2557         if (sdebug_dsense)
2558                 ctrl_m_pg[2] |= 0x4;
2559         else
2560                 ctrl_m_pg[2] &= ~0x4;
2561
2562         if (sdebug_ato)
2563                 ctrl_m_pg[5] |= 0x80; /* ATO=1 */
2564
2565         memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
2566         if (1 == pcontrol)
2567                 memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
2568         else if (2 == pcontrol)
2569                 memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
2570         return sizeof(ctrl_m_pg);
2571 }
2572
2573 /* IO Advice Hints Grouping mode page */
2574 static int resp_grouping_m_pg(unsigned char *p, int pcontrol, int target)
2575 {
2576         /* IO Advice Hints Grouping mode page */
2577         struct grouping_m_pg {
2578                 u8 page_code;   /* OR 0x40 when subpage_code > 0 */
2579                 u8 subpage_code;
2580                 __be16 page_length;
2581                 u8 reserved[12];
2582                 struct scsi_io_group_descriptor descr[MAXIMUM_NUMBER_OF_STREAMS];
2583         };
2584         static const struct grouping_m_pg gr_m_pg = {
2585                 .page_code = 0xa | 0x40,
2586                 .subpage_code = 5,
2587                 .page_length = cpu_to_be16(sizeof(gr_m_pg) - 4),
2588                 .descr = {
2589                         { .st_enble = 1 },
2590                         { .st_enble = 1 },
2591                         { .st_enble = 1 },
2592                         { .st_enble = 1 },
2593                         { .st_enble = 1 },
2594                         { .st_enble = 0 },
2595                 }
2596         };
2597
2598         BUILD_BUG_ON(sizeof(struct grouping_m_pg) !=
2599                      16 + MAXIMUM_NUMBER_OF_STREAMS * 16);
2600         memcpy(p, &gr_m_pg, sizeof(gr_m_pg));
2601         if (1 == pcontrol) {
2602                 /* There are no changeable values so clear from byte 4 on. */
2603                 memset(p + 4, 0, sizeof(gr_m_pg) - 4);
2604         }
2605         return sizeof(gr_m_pg);
2606 }
2607
2608 static int resp_iec_m_pg(unsigned char *p, int pcontrol, int target)
2609 {       /* Informational Exceptions control mode page for mode_sense */
2610         unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
2611                                        0, 0, 0x0, 0x0};
2612         unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
2613                                       0, 0, 0x0, 0x0};
2614
2615         memcpy(p, iec_m_pg, sizeof(iec_m_pg));
2616         if (1 == pcontrol)
2617                 memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
2618         else if (2 == pcontrol)
2619                 memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
2620         return sizeof(iec_m_pg);
2621 }
2622
2623 static int resp_sas_sf_m_pg(unsigned char *p, int pcontrol, int target)
2624 {       /* SAS SSP mode page - short format for mode_sense */
2625         unsigned char sas_sf_m_pg[] = {0x19, 0x6,
2626                 0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
2627
2628         memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
2629         if (1 == pcontrol)
2630                 memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
2631         return sizeof(sas_sf_m_pg);
2632 }
2633
2634
2635 static int resp_sas_pcd_m_spg(unsigned char *p, int pcontrol, int target,
2636                               int target_dev_id)
2637 {       /* SAS phy control and discover mode page for mode_sense */
2638         unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
2639                     0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
2640                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2641                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2642                     0x2, 0, 0, 0, 0, 0, 0, 0,
2643                     0x88, 0x99, 0, 0, 0, 0, 0, 0,
2644                     0, 0, 0, 0, 0, 0, 0, 0,
2645                     0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
2646                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2647                     0, 0, 0, 0, 0, 0, 0, 0,     /* insert SAS addr */
2648                     0x3, 0, 0, 0, 0, 0, 0, 0,
2649                     0x88, 0x99, 0, 0, 0, 0, 0, 0,
2650                     0, 0, 0, 0, 0, 0, 0, 0,
2651                 };
2652         int port_a, port_b;
2653
2654         put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 16);
2655         put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 24);
2656         put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 64);
2657         put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 72);
2658         port_a = target_dev_id + 1;
2659         port_b = port_a + 1;
2660         memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
2661         put_unaligned_be32(port_a, p + 20);
2662         put_unaligned_be32(port_b, p + 48 + 20);
2663         if (1 == pcontrol)
2664                 memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
2665         return sizeof(sas_pcd_m_pg);
2666 }
2667
2668 static int resp_sas_sha_m_spg(unsigned char *p, int pcontrol)
2669 {       /* SAS SSP shared protocol specific port mode subpage */
2670         unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
2671                     0, 0, 0, 0, 0, 0, 0, 0,
2672                 };
2673
2674         memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
2675         if (1 == pcontrol)
2676                 memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
2677         return sizeof(sas_sha_m_pg);
2678 }
2679
2680 /* PAGE_SIZE is more than necessary but provides room for future expansion. */
2681 #define SDEBUG_MAX_MSENSE_SZ PAGE_SIZE
2682
2683 static int resp_mode_sense(struct scsi_cmnd *scp,
2684                            struct sdebug_dev_info *devip)
2685 {
2686         int pcontrol, pcode, subpcode, bd_len;
2687         unsigned char dev_spec;
2688         u32 alloc_len, offset, len;
2689         int target_dev_id;
2690         int target = scp->device->id;
2691         unsigned char *ap;
2692         unsigned char *arr __free(kfree);
2693         unsigned char *cmd = scp->cmnd;
2694         bool dbd, llbaa, msense_6, is_disk, is_zbc;
2695
2696         arr = kzalloc(SDEBUG_MAX_MSENSE_SZ, GFP_ATOMIC);
2697         if (!arr)
2698                 return -ENOMEM;
2699         dbd = !!(cmd[1] & 0x8);         /* disable block descriptors */
2700         pcontrol = (cmd[2] & 0xc0) >> 6;
2701         pcode = cmd[2] & 0x3f;
2702         subpcode = cmd[3];
2703         msense_6 = (MODE_SENSE == cmd[0]);
2704         llbaa = msense_6 ? false : !!(cmd[1] & 0x10);
2705         is_disk = (sdebug_ptype == TYPE_DISK);
2706         is_zbc = devip->zoned;
2707         if ((is_disk || is_zbc) && !dbd)
2708                 bd_len = llbaa ? 16 : 8;
2709         else
2710                 bd_len = 0;
2711         alloc_len = msense_6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2712         memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
2713         if (0x3 == pcontrol) {  /* Saving values not supported */
2714                 mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
2715                 return check_condition_result;
2716         }
2717         target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2718                         (devip->target * 1000) - 3;
2719         /* for disks+zbc set DPOFUA bit and clear write protect (WP) bit */
2720         if (is_disk || is_zbc) {
2721                 dev_spec = 0x10;        /* =0x90 if WP=1 implies read-only */
2722                 if (sdebug_wp)
2723                         dev_spec |= 0x80;
2724         } else
2725                 dev_spec = 0x0;
2726         if (msense_6) {
2727                 arr[2] = dev_spec;
2728                 arr[3] = bd_len;
2729                 offset = 4;
2730         } else {
2731                 arr[3] = dev_spec;
2732                 if (16 == bd_len)
2733                         arr[4] = 0x1;   /* set LONGLBA bit */
2734                 arr[7] = bd_len;        /* assume 255 or less */
2735                 offset = 8;
2736         }
2737         ap = arr + offset;
2738         if ((bd_len > 0) && (!sdebug_capacity))
2739                 sdebug_capacity = get_sdebug_capacity();
2740
2741         if (8 == bd_len) {
2742                 if (sdebug_capacity > 0xfffffffe)
2743                         put_unaligned_be32(0xffffffff, ap + 0);
2744                 else
2745                         put_unaligned_be32(sdebug_capacity, ap + 0);
2746                 put_unaligned_be16(sdebug_sector_size, ap + 6);
2747                 offset += bd_len;
2748                 ap = arr + offset;
2749         } else if (16 == bd_len) {
2750                 put_unaligned_be64((u64)sdebug_capacity, ap + 0);
2751                 put_unaligned_be32(sdebug_sector_size, ap + 12);
2752                 offset += bd_len;
2753                 ap = arr + offset;
2754         }
2755
2756         /*
2757          * N.B. If len>0 before resp_*_pg() call, then form of that call should be:
2758          *        len += resp_*_pg(ap + len, pcontrol, target);
2759          */
2760         switch (pcode) {
2761         case 0x1:       /* Read-Write error recovery page, direct access */
2762                 if (subpcode > 0x0 && subpcode < 0xff)
2763                         goto bad_subpcode;
2764                 len = resp_err_recov_pg(ap, pcontrol, target);
2765                 offset += len;
2766                 break;
2767         case 0x2:       /* Disconnect-Reconnect page, all devices */
2768                 if (subpcode > 0x0 && subpcode < 0xff)
2769                         goto bad_subpcode;
2770                 len = resp_disconnect_pg(ap, pcontrol, target);
2771                 offset += len;
2772                 break;
2773         case 0x3:       /* Format device page, direct access */
2774                 if (subpcode > 0x0 && subpcode < 0xff)
2775                         goto bad_subpcode;
2776                 if (is_disk) {
2777                         len = resp_format_pg(ap, pcontrol, target);
2778                         offset += len;
2779                 } else {
2780                         goto bad_pcode;
2781                 }
2782                 break;
2783         case 0x8:       /* Caching page, direct access */
2784                 if (subpcode > 0x0 && subpcode < 0xff)
2785                         goto bad_subpcode;
2786                 if (is_disk || is_zbc) {
2787                         len = resp_caching_pg(ap, pcontrol, target);
2788                         offset += len;
2789                 } else {
2790                         goto bad_pcode;
2791                 }
2792                 break;
2793         case 0xa:       /* Control Mode page, all devices */
2794                 switch (subpcode) {
2795                 case 0:
2796                         len = resp_ctrl_m_pg(ap, pcontrol, target);
2797                         break;
2798                 case 0x05:
2799                         len = resp_grouping_m_pg(ap, pcontrol, target);
2800                         break;
2801                 case 0xff:
2802                         len = resp_ctrl_m_pg(ap, pcontrol, target);
2803                         len += resp_grouping_m_pg(ap + len, pcontrol, target);
2804                         break;
2805                 default:
2806                         goto bad_subpcode;
2807                 }
2808                 offset += len;
2809                 break;
2810         case 0x19:      /* if spc==1 then sas phy, control+discover */
2811                 if (subpcode > 0x2 && subpcode < 0xff)
2812                         goto bad_subpcode;
2813                 len = 0;
2814                 if ((0x0 == subpcode) || (0xff == subpcode))
2815                         len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2816                 if ((0x1 == subpcode) || (0xff == subpcode))
2817                         len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2818                                                   target_dev_id);
2819                 if ((0x2 == subpcode) || (0xff == subpcode))
2820                         len += resp_sas_sha_m_spg(ap + len, pcontrol);
2821                 offset += len;
2822                 break;
2823         case 0x1c:      /* Informational Exceptions Mode page, all devices */
2824                 if (subpcode > 0x0 && subpcode < 0xff)
2825                         goto bad_subpcode;
2826                 len = resp_iec_m_pg(ap, pcontrol, target);
2827                 offset += len;
2828                 break;
2829         case 0x3f:      /* Read all Mode pages */
2830                 if (subpcode > 0x0 && subpcode < 0xff)
2831                         goto bad_subpcode;
2832                 len = resp_err_recov_pg(ap, pcontrol, target);
2833                 len += resp_disconnect_pg(ap + len, pcontrol, target);
2834                 if (is_disk) {
2835                         len += resp_format_pg(ap + len, pcontrol, target);
2836                         len += resp_caching_pg(ap + len, pcontrol, target);
2837                 } else if (is_zbc) {
2838                         len += resp_caching_pg(ap + len, pcontrol, target);
2839                 }
2840                 len += resp_ctrl_m_pg(ap + len, pcontrol, target);
2841                 if (0xff == subpcode)
2842                         len += resp_grouping_m_pg(ap + len, pcontrol, target);
2843                 len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2844                 if (0xff == subpcode) {
2845                         len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2846                                                   target_dev_id);
2847                         len += resp_sas_sha_m_spg(ap + len, pcontrol);
2848                 }
2849                 len += resp_iec_m_pg(ap + len, pcontrol, target);
2850                 offset += len;
2851                 break;
2852         default:
2853                 goto bad_pcode;
2854         }
2855         if (msense_6)
2856                 arr[0] = offset - 1;
2857         else
2858                 put_unaligned_be16((offset - 2), arr + 0);
2859         return fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, offset));
2860
2861 bad_pcode:
2862         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2863         return check_condition_result;
2864
2865 bad_subpcode:
2866         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2867         return check_condition_result;
2868 }
2869
2870 #define SDEBUG_MAX_MSELECT_SZ 512
2871
2872 static int resp_mode_select(struct scsi_cmnd *scp,
2873                             struct sdebug_dev_info *devip)
2874 {
2875         int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
2876         int param_len, res, mpage;
2877         unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
2878         unsigned char *cmd = scp->cmnd;
2879         int mselect6 = (MODE_SELECT == cmd[0]);
2880
2881         memset(arr, 0, sizeof(arr));
2882         pf = cmd[1] & 0x10;
2883         sp = cmd[1] & 0x1;
2884         param_len = mselect6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2885         if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
2886                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, mselect6 ? 4 : 7, -1);
2887                 return check_condition_result;
2888         }
2889         res = fetch_to_dev_buffer(scp, arr, param_len);
2890         if (-1 == res)
2891                 return DID_ERROR << 16;
2892         else if (sdebug_verbose && (res < param_len))
2893                 sdev_printk(KERN_INFO, scp->device,
2894                             "%s: cdb indicated=%d, IO sent=%d bytes\n",
2895                             __func__, param_len, res);
2896         md_len = mselect6 ? (arr[0] + 1) : (get_unaligned_be16(arr + 0) + 2);
2897         bd_len = mselect6 ? arr[3] : get_unaligned_be16(arr + 6);
2898         off = bd_len + (mselect6 ? 4 : 8);
2899         if (md_len > 2 || off >= res) {
2900                 mk_sense_invalid_fld(scp, SDEB_IN_DATA, 0, -1);
2901                 return check_condition_result;
2902         }
2903         mpage = arr[off] & 0x3f;
2904         ps = !!(arr[off] & 0x80);
2905         if (ps) {
2906                 mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 7);
2907                 return check_condition_result;
2908         }
2909         spf = !!(arr[off] & 0x40);
2910         pg_len = spf ? (get_unaligned_be16(arr + off + 2) + 4) :
2911                        (arr[off + 1] + 2);
2912         if ((pg_len + off) > param_len) {
2913                 mk_sense_buffer(scp, ILLEGAL_REQUEST,
2914                                 PARAMETER_LIST_LENGTH_ERR, 0);
2915                 return check_condition_result;
2916         }
2917         switch (mpage) {
2918         case 0x8:      /* Caching Mode page */
2919                 if (caching_pg[1] == arr[off + 1]) {
2920                         memcpy(caching_pg + 2, arr + off + 2,
2921                                sizeof(caching_pg) - 2);
2922                         goto set_mode_changed_ua;
2923                 }
2924                 break;
2925         case 0xa:      /* Control Mode page */
2926                 if (ctrl_m_pg[1] == arr[off + 1]) {
2927                         memcpy(ctrl_m_pg + 2, arr + off + 2,
2928                                sizeof(ctrl_m_pg) - 2);
2929                         if (ctrl_m_pg[4] & 0x8)
2930                                 sdebug_wp = true;
2931                         else
2932                                 sdebug_wp = false;
2933                         sdebug_dsense = !!(ctrl_m_pg[2] & 0x4);
2934                         goto set_mode_changed_ua;
2935                 }
2936                 break;
2937         case 0x1c:      /* Informational Exceptions Mode page */
2938                 if (iec_m_pg[1] == arr[off + 1]) {
2939                         memcpy(iec_m_pg + 2, arr + off + 2,
2940                                sizeof(iec_m_pg) - 2);
2941                         goto set_mode_changed_ua;
2942                 }
2943                 break;
2944         default:
2945                 break;
2946         }
2947         mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 5);
2948         return check_condition_result;
2949 set_mode_changed_ua:
2950         set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2951         return 0;
2952 }
2953
2954 static int resp_temp_l_pg(unsigned char *arr)
2955 {
2956         unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
2957                                      0x0, 0x1, 0x3, 0x2, 0x0, 65,
2958                 };
2959
2960         memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
2961         return sizeof(temp_l_pg);
2962 }
2963
2964 static int resp_ie_l_pg(unsigned char *arr)
2965 {
2966         unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
2967                 };
2968
2969         memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
2970         if (iec_m_pg[2] & 0x4) {        /* TEST bit set */
2971                 arr[4] = THRESHOLD_EXCEEDED;
2972                 arr[5] = 0xff;
2973         }
2974         return sizeof(ie_l_pg);
2975 }
2976
2977 static int resp_env_rep_l_spg(unsigned char *arr)
2978 {
2979         unsigned char env_rep_l_spg[] = {0x0, 0x0, 0x23, 0x8,
2980                                          0x0, 40, 72, 0xff, 45, 18, 0, 0,
2981                                          0x1, 0x0, 0x23, 0x8,
2982                                          0x0, 55, 72, 35, 55, 45, 0, 0,
2983                 };
2984
2985         memcpy(arr, env_rep_l_spg, sizeof(env_rep_l_spg));
2986         return sizeof(env_rep_l_spg);
2987 }
2988
2989 #define SDEBUG_MAX_LSENSE_SZ 512
2990
2991 static int resp_log_sense(struct scsi_cmnd *scp,
2992                           struct sdebug_dev_info *devip)
2993 {
2994         int ppc, sp, pcode, subpcode;
2995         u32 alloc_len, len, n;
2996         unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
2997         unsigned char *cmd = scp->cmnd;
2998
2999         memset(arr, 0, sizeof(arr));
3000         ppc = cmd[1] & 0x2;
3001         sp = cmd[1] & 0x1;
3002         if (ppc || sp) {
3003                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, ppc ? 1 : 0);
3004                 return check_condition_result;
3005         }
3006         pcode = cmd[2] & 0x3f;
3007         subpcode = cmd[3] & 0xff;
3008         alloc_len = get_unaligned_be16(cmd + 7);
3009         arr[0] = pcode;
3010         if (0 == subpcode) {
3011                 switch (pcode) {
3012                 case 0x0:       /* Supported log pages log page */
3013                         n = 4;
3014                         arr[n++] = 0x0;         /* this page */
3015                         arr[n++] = 0xd;         /* Temperature */
3016                         arr[n++] = 0x2f;        /* Informational exceptions */
3017                         arr[3] = n - 4;
3018                         break;
3019                 case 0xd:       /* Temperature log page */
3020                         arr[3] = resp_temp_l_pg(arr + 4);
3021                         break;
3022                 case 0x2f:      /* Informational exceptions log page */
3023                         arr[3] = resp_ie_l_pg(arr + 4);
3024                         break;
3025                 default:
3026                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
3027                         return check_condition_result;
3028                 }
3029         } else if (0xff == subpcode) {
3030                 arr[0] |= 0x40;
3031                 arr[1] = subpcode;
3032                 switch (pcode) {
3033                 case 0x0:       /* Supported log pages and subpages log page */
3034                         n = 4;
3035                         arr[n++] = 0x0;
3036                         arr[n++] = 0x0;         /* 0,0 page */
3037                         arr[n++] = 0x0;
3038                         arr[n++] = 0xff;        /* this page */
3039                         arr[n++] = 0xd;
3040                         arr[n++] = 0x0;         /* Temperature */
3041                         arr[n++] = 0xd;
3042                         arr[n++] = 0x1;         /* Environment reporting */
3043                         arr[n++] = 0xd;
3044                         arr[n++] = 0xff;        /* all 0xd subpages */
3045                         arr[n++] = 0x2f;
3046                         arr[n++] = 0x0; /* Informational exceptions */
3047                         arr[n++] = 0x2f;
3048                         arr[n++] = 0xff;        /* all 0x2f subpages */
3049                         arr[3] = n - 4;
3050                         break;
3051                 case 0xd:       /* Temperature subpages */
3052                         n = 4;
3053                         arr[n++] = 0xd;
3054                         arr[n++] = 0x0;         /* Temperature */
3055                         arr[n++] = 0xd;
3056                         arr[n++] = 0x1;         /* Environment reporting */
3057                         arr[n++] = 0xd;
3058                         arr[n++] = 0xff;        /* these subpages */
3059                         arr[3] = n - 4;
3060                         break;
3061                 case 0x2f:      /* Informational exceptions subpages */
3062                         n = 4;
3063                         arr[n++] = 0x2f;
3064                         arr[n++] = 0x0;         /* Informational exceptions */
3065                         arr[n++] = 0x2f;
3066                         arr[n++] = 0xff;        /* these subpages */
3067                         arr[3] = n - 4;
3068                         break;
3069                 default:
3070                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
3071                         return check_condition_result;
3072                 }
3073         } else if (subpcode > 0) {
3074                 arr[0] |= 0x40;
3075                 arr[1] = subpcode;
3076                 if (pcode == 0xd && subpcode == 1)
3077                         arr[3] = resp_env_rep_l_spg(arr + 4);
3078                 else {
3079                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
3080                         return check_condition_result;
3081                 }
3082         } else {
3083                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
3084                 return check_condition_result;
3085         }
3086         len = min_t(u32, get_unaligned_be16(arr + 2) + 4, alloc_len);
3087         return fill_from_dev_buffer(scp, arr,
3088                     min_t(u32, len, SDEBUG_MAX_INQ_ARR_SZ));
3089 }
3090
3091 static inline bool sdebug_dev_is_zoned(struct sdebug_dev_info *devip)
3092 {
3093         return devip->nr_zones != 0;
3094 }
3095
3096 static struct sdeb_zone_state *zbc_zone(struct sdebug_dev_info *devip,
3097                                         unsigned long long lba)
3098 {
3099         u32 zno = lba >> devip->zsize_shift;
3100         struct sdeb_zone_state *zsp;
3101
3102         if (devip->zcap == devip->zsize || zno < devip->nr_conv_zones)
3103                 return &devip->zstate[zno];
3104
3105         /*
3106          * If the zone capacity is less than the zone size, adjust for gap
3107          * zones.
3108          */
3109         zno = 2 * zno - devip->nr_conv_zones;
3110         WARN_ONCE(zno >= devip->nr_zones, "%u > %u\n", zno, devip->nr_zones);
3111         zsp = &devip->zstate[zno];
3112         if (lba >= zsp->z_start + zsp->z_size)
3113                 zsp++;
3114         WARN_ON_ONCE(lba >= zsp->z_start + zsp->z_size);
3115         return zsp;
3116 }
3117
3118 static inline bool zbc_zone_is_conv(struct sdeb_zone_state *zsp)
3119 {
3120         return zsp->z_type == ZBC_ZTYPE_CNV;
3121 }
3122
3123 static inline bool zbc_zone_is_gap(struct sdeb_zone_state *zsp)
3124 {
3125         return zsp->z_type == ZBC_ZTYPE_GAP;
3126 }
3127
3128 static inline bool zbc_zone_is_seq(struct sdeb_zone_state *zsp)
3129 {
3130         return !zbc_zone_is_conv(zsp) && !zbc_zone_is_gap(zsp);
3131 }
3132
3133 static void zbc_close_zone(struct sdebug_dev_info *devip,
3134                            struct sdeb_zone_state *zsp)
3135 {
3136         enum sdebug_z_cond zc;
3137
3138         if (!zbc_zone_is_seq(zsp))
3139                 return;
3140
3141         zc = zsp->z_cond;
3142         if (!(zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN))
3143                 return;
3144
3145         if (zc == ZC2_IMPLICIT_OPEN)
3146                 devip->nr_imp_open--;
3147         else
3148                 devip->nr_exp_open--;
3149
3150         if (zsp->z_wp == zsp->z_start) {
3151                 zsp->z_cond = ZC1_EMPTY;
3152         } else {
3153                 zsp->z_cond = ZC4_CLOSED;
3154                 devip->nr_closed++;
3155         }
3156 }
3157
3158 static void zbc_close_imp_open_zone(struct sdebug_dev_info *devip)
3159 {
3160         struct sdeb_zone_state *zsp = &devip->zstate[0];
3161         unsigned int i;
3162
3163         for (i = 0; i < devip->nr_zones; i++, zsp++) {
3164                 if (zsp->z_cond == ZC2_IMPLICIT_OPEN) {
3165                         zbc_close_zone(devip, zsp);
3166                         return;
3167                 }
3168         }
3169 }
3170
3171 static void zbc_open_zone(struct sdebug_dev_info *devip,
3172                           struct sdeb_zone_state *zsp, bool explicit)
3173 {
3174         enum sdebug_z_cond zc;
3175
3176         if (!zbc_zone_is_seq(zsp))
3177                 return;
3178
3179         zc = zsp->z_cond;
3180         if ((explicit && zc == ZC3_EXPLICIT_OPEN) ||
3181             (!explicit && zc == ZC2_IMPLICIT_OPEN))
3182                 return;
3183
3184         /* Close an implicit open zone if necessary */
3185         if (explicit && zsp->z_cond == ZC2_IMPLICIT_OPEN)
3186                 zbc_close_zone(devip, zsp);
3187         else if (devip->max_open &&
3188                  devip->nr_imp_open + devip->nr_exp_open >= devip->max_open)
3189                 zbc_close_imp_open_zone(devip);
3190
3191         if (zsp->z_cond == ZC4_CLOSED)
3192                 devip->nr_closed--;
3193         if (explicit) {
3194                 zsp->z_cond = ZC3_EXPLICIT_OPEN;
3195                 devip->nr_exp_open++;
3196         } else {
3197                 zsp->z_cond = ZC2_IMPLICIT_OPEN;
3198                 devip->nr_imp_open++;
3199         }
3200 }
3201
3202 static inline void zbc_set_zone_full(struct sdebug_dev_info *devip,
3203                                      struct sdeb_zone_state *zsp)
3204 {
3205         switch (zsp->z_cond) {
3206         case ZC2_IMPLICIT_OPEN:
3207                 devip->nr_imp_open--;
3208                 break;
3209         case ZC3_EXPLICIT_OPEN:
3210                 devip->nr_exp_open--;
3211                 break;
3212         default:
3213                 WARN_ONCE(true, "Invalid zone %llu condition %x\n",
3214                           zsp->z_start, zsp->z_cond);
3215                 break;
3216         }
3217         zsp->z_cond = ZC5_FULL;
3218 }
3219
3220 static void zbc_inc_wp(struct sdebug_dev_info *devip,
3221                        unsigned long long lba, unsigned int num)
3222 {
3223         struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
3224         unsigned long long n, end, zend = zsp->z_start + zsp->z_size;
3225
3226         if (!zbc_zone_is_seq(zsp))
3227                 return;
3228
3229         if (zsp->z_type == ZBC_ZTYPE_SWR) {
3230                 zsp->z_wp += num;
3231                 if (zsp->z_wp >= zend)
3232                         zbc_set_zone_full(devip, zsp);
3233                 return;
3234         }
3235
3236         while (num) {
3237                 if (lba != zsp->z_wp)
3238                         zsp->z_non_seq_resource = true;
3239
3240                 end = lba + num;
3241                 if (end >= zend) {
3242                         n = zend - lba;
3243                         zsp->z_wp = zend;
3244                 } else if (end > zsp->z_wp) {
3245                         n = num;
3246                         zsp->z_wp = end;
3247                 } else {
3248                         n = num;
3249                 }
3250                 if (zsp->z_wp >= zend)
3251                         zbc_set_zone_full(devip, zsp);
3252
3253                 num -= n;
3254                 lba += n;
3255                 if (num) {
3256                         zsp++;
3257                         zend = zsp->z_start + zsp->z_size;
3258                 }
3259         }
3260 }
3261
3262 static int check_zbc_access_params(struct scsi_cmnd *scp,
3263                         unsigned long long lba, unsigned int num, bool write)
3264 {
3265         struct scsi_device *sdp = scp->device;
3266         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
3267         struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
3268         struct sdeb_zone_state *zsp_end = zbc_zone(devip, lba + num - 1);
3269
3270         if (!write) {
3271                 /* For host-managed, reads cannot cross zone types boundaries */
3272                 if (zsp->z_type != zsp_end->z_type) {
3273                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
3274                                         LBA_OUT_OF_RANGE,
3275                                         READ_INVDATA_ASCQ);
3276                         return check_condition_result;
3277                 }
3278                 return 0;
3279         }
3280
3281         /* Writing into a gap zone is not allowed */
3282         if (zbc_zone_is_gap(zsp)) {
3283                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE,
3284                                 ATTEMPT_ACCESS_GAP);
3285                 return check_condition_result;
3286         }
3287
3288         /* No restrictions for writes within conventional zones */
3289         if (zbc_zone_is_conv(zsp)) {
3290                 if (!zbc_zone_is_conv(zsp_end)) {
3291                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
3292                                         LBA_OUT_OF_RANGE,
3293                                         WRITE_BOUNDARY_ASCQ);
3294                         return check_condition_result;
3295                 }
3296                 return 0;
3297         }
3298
3299         if (zsp->z_type == ZBC_ZTYPE_SWR) {
3300                 /* Writes cannot cross sequential zone boundaries */
3301                 if (zsp_end != zsp) {
3302                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
3303                                         LBA_OUT_OF_RANGE,
3304                                         WRITE_BOUNDARY_ASCQ);
3305                         return check_condition_result;
3306                 }
3307                 /* Cannot write full zones */
3308                 if (zsp->z_cond == ZC5_FULL) {
3309                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
3310                                         INVALID_FIELD_IN_CDB, 0);
3311                         return check_condition_result;
3312                 }
3313                 /* Writes must be aligned to the zone WP */
3314                 if (lba != zsp->z_wp) {
3315                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
3316                                         LBA_OUT_OF_RANGE,
3317                                         UNALIGNED_WRITE_ASCQ);
3318                         return check_condition_result;
3319                 }
3320         }
3321
3322         /* Handle implicit open of closed and empty zones */
3323         if (zsp->z_cond == ZC1_EMPTY || zsp->z_cond == ZC4_CLOSED) {
3324                 if (devip->max_open &&
3325                     devip->nr_exp_open >= devip->max_open) {
3326                         mk_sense_buffer(scp, DATA_PROTECT,
3327                                         INSUFF_RES_ASC,
3328                                         INSUFF_ZONE_ASCQ);
3329                         return check_condition_result;
3330                 }
3331                 zbc_open_zone(devip, zsp, false);
3332         }
3333
3334         return 0;
3335 }
3336
3337 static inline int check_device_access_params
3338                         (struct scsi_cmnd *scp, unsigned long long lba,
3339                          unsigned int num, bool write)
3340 {
3341         struct scsi_device *sdp = scp->device;
3342         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
3343
3344         if (lba + num > sdebug_capacity) {
3345                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3346                 return check_condition_result;
3347         }
3348         /* transfer length excessive (tie in to block limits VPD page) */
3349         if (num > sdebug_store_sectors) {
3350                 /* needs work to find which cdb byte 'num' comes from */
3351                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3352                 return check_condition_result;
3353         }
3354         if (write && unlikely(sdebug_wp)) {
3355                 mk_sense_buffer(scp, DATA_PROTECT, WRITE_PROTECTED, 0x2);
3356                 return check_condition_result;
3357         }
3358         if (sdebug_dev_is_zoned(devip))
3359                 return check_zbc_access_params(scp, lba, num, write);
3360
3361         return 0;
3362 }
3363
3364 /*
3365  * Note: if BUG_ON() fires it usually indicates a problem with the parser
3366  * tables. Perhaps a missing F_FAKE_RW or FF_MEDIA_IO flag. Response functions
3367  * that access any of the "stores" in struct sdeb_store_info should call this
3368  * function with bug_if_fake_rw set to true.
3369  */
3370 static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip,
3371                                                 bool bug_if_fake_rw)
3372 {
3373         if (sdebug_fake_rw) {
3374                 BUG_ON(bug_if_fake_rw); /* See note above */
3375                 return NULL;
3376         }
3377         return xa_load(per_store_ap, devip->sdbg_host->si_idx);
3378 }
3379
3380 /* Returns number of bytes copied or -1 if error. */
3381 static int do_device_access(struct sdeb_store_info *sip, struct scsi_cmnd *scp,
3382                             u32 sg_skip, u64 lba, u32 num, bool do_write,
3383                             u8 group_number)
3384 {
3385         int ret;
3386         u64 block, rest = 0;
3387         enum dma_data_direction dir;
3388         struct scsi_data_buffer *sdb = &scp->sdb;
3389         u8 *fsp;
3390
3391         if (do_write) {
3392                 dir = DMA_TO_DEVICE;
3393                 write_since_sync = true;
3394         } else {
3395                 dir = DMA_FROM_DEVICE;
3396         }
3397
3398         if (!sdb->length || !sip)
3399                 return 0;
3400         if (scp->sc_data_direction != dir)
3401                 return -1;
3402
3403         if (do_write && group_number < ARRAY_SIZE(writes_by_group_number))
3404                 atomic_long_inc(&writes_by_group_number[group_number]);
3405
3406         fsp = sip->storep;
3407
3408         block = do_div(lba, sdebug_store_sectors);
3409         if (block + num > sdebug_store_sectors)
3410                 rest = block + num - sdebug_store_sectors;
3411
3412         ret = sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
3413                    fsp + (block * sdebug_sector_size),
3414                    (num - rest) * sdebug_sector_size, sg_skip, do_write);
3415         if (ret != (num - rest) * sdebug_sector_size)
3416                 return ret;
3417
3418         if (rest) {
3419                 ret += sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
3420                             fsp, rest * sdebug_sector_size,
3421                             sg_skip + ((num - rest) * sdebug_sector_size),
3422                             do_write);
3423         }
3424
3425         return ret;
3426 }
3427
3428 /* Returns number of bytes copied or -1 if error. */
3429 static int do_dout_fetch(struct scsi_cmnd *scp, u32 num, u8 *doutp)
3430 {
3431         struct scsi_data_buffer *sdb = &scp->sdb;
3432
3433         if (!sdb->length)
3434                 return 0;
3435         if (scp->sc_data_direction != DMA_TO_DEVICE)
3436                 return -1;
3437         return sg_copy_buffer(sdb->table.sgl, sdb->table.nents, doutp,
3438                               num * sdebug_sector_size, 0, true);
3439 }
3440
3441 /* If sip->storep+lba compares equal to arr(num), then copy top half of
3442  * arr into sip->storep+lba and return true. If comparison fails then
3443  * return false. */
3444 static bool comp_write_worker(struct sdeb_store_info *sip, u64 lba, u32 num,
3445                               const u8 *arr, bool compare_only)
3446 {
3447         bool res;
3448         u64 block, rest = 0;
3449         u32 store_blks = sdebug_store_sectors;
3450         u32 lb_size = sdebug_sector_size;
3451         u8 *fsp = sip->storep;
3452
3453         block = do_div(lba, store_blks);
3454         if (block + num > store_blks)
3455                 rest = block + num - store_blks;
3456
3457         res = !memcmp(fsp + (block * lb_size), arr, (num - rest) * lb_size);
3458         if (!res)
3459                 return res;
3460         if (rest)
3461                 res = memcmp(fsp, arr + ((num - rest) * lb_size),
3462                              rest * lb_size);
3463         if (!res)
3464                 return res;
3465         if (compare_only)
3466                 return true;
3467         arr += num * lb_size;
3468         memcpy(fsp + (block * lb_size), arr, (num - rest) * lb_size);
3469         if (rest)
3470                 memcpy(fsp, arr + ((num - rest) * lb_size), rest * lb_size);
3471         return res;
3472 }
3473
3474 static __be16 dif_compute_csum(const void *buf, int len)
3475 {
3476         __be16 csum;
3477
3478         if (sdebug_guard)
3479                 csum = (__force __be16)ip_compute_csum(buf, len);
3480         else
3481                 csum = cpu_to_be16(crc_t10dif(buf, len));
3482
3483         return csum;
3484 }
3485
3486 static int dif_verify(struct t10_pi_tuple *sdt, const void *data,
3487                       sector_t sector, u32 ei_lba)
3488 {
3489         __be16 csum = dif_compute_csum(data, sdebug_sector_size);
3490
3491         if (sdt->guard_tag != csum) {
3492                 pr_err("GUARD check failed on sector %lu rcvd 0x%04x, data 0x%04x\n",
3493                         (unsigned long)sector,
3494                         be16_to_cpu(sdt->guard_tag),
3495                         be16_to_cpu(csum));
3496                 return 0x01;
3497         }
3498         if (sdebug_dif == T10_PI_TYPE1_PROTECTION &&
3499             be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
3500                 pr_err("REF check failed on sector %lu\n",
3501                         (unsigned long)sector);
3502                 return 0x03;
3503         }
3504         if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3505             be32_to_cpu(sdt->ref_tag) != ei_lba) {
3506                 pr_err("REF check failed on sector %lu\n",
3507                         (unsigned long)sector);
3508                 return 0x03;
3509         }
3510         return 0;
3511 }
3512
3513 static void dif_copy_prot(struct scsi_cmnd *scp, sector_t sector,
3514                           unsigned int sectors, bool read)
3515 {
3516         size_t resid;
3517         void *paddr;
3518         struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
3519                                                 scp->device->hostdata, true);
3520         struct t10_pi_tuple *dif_storep = sip->dif_storep;
3521         const void *dif_store_end = dif_storep + sdebug_store_sectors;
3522         struct sg_mapping_iter miter;
3523
3524         /* Bytes of protection data to copy into sgl */
3525         resid = sectors * sizeof(*dif_storep);
3526
3527         sg_miter_start(&miter, scsi_prot_sglist(scp),
3528                        scsi_prot_sg_count(scp), SG_MITER_ATOMIC |
3529                        (read ? SG_MITER_TO_SG : SG_MITER_FROM_SG));
3530
3531         while (sg_miter_next(&miter) && resid > 0) {
3532                 size_t len = min_t(size_t, miter.length, resid);
3533                 void *start = dif_store(sip, sector);
3534                 size_t rest = 0;
3535
3536                 if (dif_store_end < start + len)
3537                         rest = start + len - dif_store_end;
3538
3539                 paddr = miter.addr;
3540
3541                 if (read)
3542                         memcpy(paddr, start, len - rest);
3543                 else
3544                         memcpy(start, paddr, len - rest);
3545
3546                 if (rest) {
3547                         if (read)
3548                                 memcpy(paddr + len - rest, dif_storep, rest);
3549                         else
3550                                 memcpy(dif_storep, paddr + len - rest, rest);
3551                 }
3552
3553                 sector += len / sizeof(*dif_storep);
3554                 resid -= len;
3555         }
3556         sg_miter_stop(&miter);
3557 }
3558
3559 static int prot_verify_read(struct scsi_cmnd *scp, sector_t start_sec,
3560                             unsigned int sectors, u32 ei_lba)
3561 {
3562         int ret = 0;
3563         unsigned int i;
3564         sector_t sector;
3565         struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
3566                                                 scp->device->hostdata, true);
3567         struct t10_pi_tuple *sdt;
3568
3569         for (i = 0; i < sectors; i++, ei_lba++) {
3570                 sector = start_sec + i;
3571                 sdt = dif_store(sip, sector);
3572
3573                 if (sdt->app_tag == cpu_to_be16(0xffff))
3574                         continue;
3575
3576                 /*
3577                  * Because scsi_debug acts as both initiator and
3578                  * target we proceed to verify the PI even if
3579                  * RDPROTECT=3. This is done so the "initiator" knows
3580                  * which type of error to return. Otherwise we would
3581                  * have to iterate over the PI twice.
3582                  */
3583                 if (scp->cmnd[1] >> 5) { /* RDPROTECT */
3584                         ret = dif_verify(sdt, lba2fake_store(sip, sector),
3585                                          sector, ei_lba);
3586                         if (ret) {
3587                                 dif_errors++;
3588                                 break;
3589                         }
3590                 }
3591         }
3592
3593         dif_copy_prot(scp, start_sec, sectors, true);
3594         dix_reads++;
3595
3596         return ret;
3597 }
3598
3599 static inline void
3600 sdeb_read_lock(struct sdeb_store_info *sip)
3601 {
3602         if (sdebug_no_rwlock) {
3603                 if (sip)
3604                         __acquire(&sip->macc_lck);
3605                 else
3606                         __acquire(&sdeb_fake_rw_lck);
3607         } else {
3608                 if (sip)
3609                         read_lock(&sip->macc_lck);
3610                 else
3611                         read_lock(&sdeb_fake_rw_lck);
3612         }
3613 }
3614
3615 static inline void
3616 sdeb_read_unlock(struct sdeb_store_info *sip)
3617 {
3618         if (sdebug_no_rwlock) {
3619                 if (sip)
3620                         __release(&sip->macc_lck);
3621                 else
3622                         __release(&sdeb_fake_rw_lck);
3623         } else {
3624                 if (sip)
3625                         read_unlock(&sip->macc_lck);
3626                 else
3627                         read_unlock(&sdeb_fake_rw_lck);
3628         }
3629 }
3630
3631 static inline void
3632 sdeb_write_lock(struct sdeb_store_info *sip)
3633 {
3634         if (sdebug_no_rwlock) {
3635                 if (sip)
3636                         __acquire(&sip->macc_lck);
3637                 else
3638                         __acquire(&sdeb_fake_rw_lck);
3639         } else {
3640                 if (sip)
3641                         write_lock(&sip->macc_lck);
3642                 else
3643                         write_lock(&sdeb_fake_rw_lck);
3644         }
3645 }
3646
3647 static inline void
3648 sdeb_write_unlock(struct sdeb_store_info *sip)
3649 {
3650         if (sdebug_no_rwlock) {
3651                 if (sip)
3652                         __release(&sip->macc_lck);
3653                 else
3654                         __release(&sdeb_fake_rw_lck);
3655         } else {
3656                 if (sip)
3657                         write_unlock(&sip->macc_lck);
3658                 else
3659                         write_unlock(&sdeb_fake_rw_lck);
3660         }
3661 }
3662
3663 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3664 {
3665         bool check_prot;
3666         u32 num;
3667         u32 ei_lba;
3668         int ret;
3669         u64 lba;
3670         struct sdeb_store_info *sip = devip2sip(devip, true);
3671         u8 *cmd = scp->cmnd;
3672
3673         switch (cmd[0]) {
3674         case READ_16:
3675                 ei_lba = 0;
3676                 lba = get_unaligned_be64(cmd + 2);
3677                 num = get_unaligned_be32(cmd + 10);
3678                 check_prot = true;
3679                 break;
3680         case READ_10:
3681                 ei_lba = 0;
3682                 lba = get_unaligned_be32(cmd + 2);
3683                 num = get_unaligned_be16(cmd + 7);
3684                 check_prot = true;
3685                 break;
3686         case READ_6:
3687                 ei_lba = 0;
3688                 lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
3689                       (u32)(cmd[1] & 0x1f) << 16;
3690                 num = (0 == cmd[4]) ? 256 : cmd[4];
3691                 check_prot = true;
3692                 break;
3693         case READ_12:
3694                 ei_lba = 0;
3695                 lba = get_unaligned_be32(cmd + 2);
3696                 num = get_unaligned_be32(cmd + 6);
3697                 check_prot = true;
3698                 break;
3699         case XDWRITEREAD_10:
3700                 ei_lba = 0;
3701                 lba = get_unaligned_be32(cmd + 2);
3702                 num = get_unaligned_be16(cmd + 7);
3703                 check_prot = false;
3704                 break;
3705         default:        /* assume READ(32) */
3706                 lba = get_unaligned_be64(cmd + 12);
3707                 ei_lba = get_unaligned_be32(cmd + 20);
3708                 num = get_unaligned_be32(cmd + 28);
3709                 check_prot = false;
3710                 break;
3711         }
3712         if (unlikely(have_dif_prot && check_prot)) {
3713                 if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3714                     (cmd[1] & 0xe0)) {
3715                         mk_sense_invalid_opcode(scp);
3716                         return check_condition_result;
3717                 }
3718                 if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3719                      sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3720                     (cmd[1] & 0xe0) == 0)
3721                         sdev_printk(KERN_ERR, scp->device, "Unprotected RD "
3722                                     "to DIF device\n");
3723         }
3724         if (unlikely((sdebug_opts & SDEBUG_OPT_SHORT_TRANSFER) &&
3725                      atomic_read(&sdeb_inject_pending))) {
3726                 num /= 2;
3727                 atomic_set(&sdeb_inject_pending, 0);
3728         }
3729
3730         ret = check_device_access_params(scp, lba, num, false);
3731         if (ret)
3732                 return ret;
3733         if (unlikely((SDEBUG_OPT_MEDIUM_ERR & sdebug_opts) &&
3734                      (lba <= (sdebug_medium_error_start + sdebug_medium_error_count - 1)) &&
3735                      ((lba + num) > sdebug_medium_error_start))) {
3736                 /* claim unrecoverable read error */
3737                 mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
3738                 /* set info field and valid bit for fixed descriptor */
3739                 if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
3740                         scp->sense_buffer[0] |= 0x80;   /* Valid bit */
3741                         ret = (lba < OPT_MEDIUM_ERR_ADDR)
3742                               ? OPT_MEDIUM_ERR_ADDR : (int)lba;
3743                         put_unaligned_be32(ret, scp->sense_buffer + 3);
3744                 }
3745                 scsi_set_resid(scp, scsi_bufflen(scp));
3746                 return check_condition_result;
3747         }
3748
3749         sdeb_read_lock(sip);
3750
3751         /* DIX + T10 DIF */
3752         if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
3753                 switch (prot_verify_read(scp, lba, num, ei_lba)) {
3754                 case 1: /* Guard tag error */
3755                         if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
3756                                 sdeb_read_unlock(sip);
3757                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3758                                 return check_condition_result;
3759                         } else if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
3760                                 sdeb_read_unlock(sip);
3761                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3762                                 return illegal_condition_result;
3763                         }
3764                         break;
3765                 case 3: /* Reference tag error */
3766                         if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
3767                                 sdeb_read_unlock(sip);
3768                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
3769                                 return check_condition_result;
3770                         } else if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
3771                                 sdeb_read_unlock(sip);
3772                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
3773                                 return illegal_condition_result;
3774                         }
3775                         break;
3776                 }
3777         }
3778
3779         ret = do_device_access(sip, scp, 0, lba, num, false, 0);
3780         sdeb_read_unlock(sip);
3781         if (unlikely(ret == -1))
3782                 return DID_ERROR << 16;
3783
3784         scsi_set_resid(scp, scsi_bufflen(scp) - ret);
3785
3786         if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
3787                      atomic_read(&sdeb_inject_pending))) {
3788                 if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
3789                         mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
3790                         atomic_set(&sdeb_inject_pending, 0);
3791                         return check_condition_result;
3792                 } else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
3793                         /* Logical block guard check failed */
3794                         mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3795                         atomic_set(&sdeb_inject_pending, 0);
3796                         return illegal_condition_result;
3797                 } else if (SDEBUG_OPT_DIX_ERR & sdebug_opts) {
3798                         mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3799                         atomic_set(&sdeb_inject_pending, 0);
3800                         return illegal_condition_result;
3801                 }
3802         }
3803         return 0;
3804 }
3805
3806 static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
3807                              unsigned int sectors, u32 ei_lba)
3808 {
3809         int ret;
3810         struct t10_pi_tuple *sdt;
3811         void *daddr;
3812         sector_t sector = start_sec;
3813         int ppage_offset;
3814         int dpage_offset;
3815         struct sg_mapping_iter diter;
3816         struct sg_mapping_iter piter;
3817
3818         BUG_ON(scsi_sg_count(SCpnt) == 0);
3819         BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
3820
3821         sg_miter_start(&piter, scsi_prot_sglist(SCpnt),
3822                         scsi_prot_sg_count(SCpnt),
3823                         SG_MITER_ATOMIC | SG_MITER_FROM_SG);
3824         sg_miter_start(&diter, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
3825                         SG_MITER_ATOMIC | SG_MITER_FROM_SG);
3826
3827         /* For each protection page */
3828         while (sg_miter_next(&piter)) {
3829                 dpage_offset = 0;
3830                 if (WARN_ON(!sg_miter_next(&diter))) {
3831                         ret = 0x01;
3832                         goto out;
3833                 }
3834
3835                 for (ppage_offset = 0; ppage_offset < piter.length;
3836                      ppage_offset += sizeof(struct t10_pi_tuple)) {
3837                         /* If we're at the end of the current
3838                          * data page advance to the next one
3839                          */
3840                         if (dpage_offset >= diter.length) {
3841                                 if (WARN_ON(!sg_miter_next(&diter))) {
3842                                         ret = 0x01;
3843                                         goto out;
3844                                 }
3845                                 dpage_offset = 0;
3846                         }
3847
3848                         sdt = piter.addr + ppage_offset;
3849                         daddr = diter.addr + dpage_offset;
3850
3851                         if (SCpnt->cmnd[1] >> 5 != 3) { /* WRPROTECT */
3852                                 ret = dif_verify(sdt, daddr, sector, ei_lba);
3853                                 if (ret)
3854                                         goto out;
3855                         }
3856
3857                         sector++;
3858                         ei_lba++;
3859                         dpage_offset += sdebug_sector_size;
3860                 }
3861                 diter.consumed = dpage_offset;
3862                 sg_miter_stop(&diter);
3863         }
3864         sg_miter_stop(&piter);
3865
3866         dif_copy_prot(SCpnt, start_sec, sectors, false);
3867         dix_writes++;
3868
3869         return 0;
3870
3871 out:
3872         dif_errors++;
3873         sg_miter_stop(&diter);
3874         sg_miter_stop(&piter);
3875         return ret;
3876 }
3877
3878 static unsigned long lba_to_map_index(sector_t lba)
3879 {
3880         if (sdebug_unmap_alignment)
3881                 lba += sdebug_unmap_granularity - sdebug_unmap_alignment;
3882         sector_div(lba, sdebug_unmap_granularity);
3883         return lba;
3884 }
3885
3886 static sector_t map_index_to_lba(unsigned long index)
3887 {
3888         sector_t lba = index * sdebug_unmap_granularity;
3889
3890         if (sdebug_unmap_alignment)
3891                 lba -= sdebug_unmap_granularity - sdebug_unmap_alignment;
3892         return lba;
3893 }
3894
3895 static unsigned int map_state(struct sdeb_store_info *sip, sector_t lba,
3896                               unsigned int *num)
3897 {
3898         sector_t end;
3899         unsigned int mapped;
3900         unsigned long index;
3901         unsigned long next;
3902
3903         index = lba_to_map_index(lba);
3904         mapped = test_bit(index, sip->map_storep);
3905
3906         if (mapped)
3907                 next = find_next_zero_bit(sip->map_storep, map_size, index);
3908         else
3909                 next = find_next_bit(sip->map_storep, map_size, index);
3910
3911         end = min_t(sector_t, sdebug_store_sectors,  map_index_to_lba(next));
3912         *num = end - lba;
3913         return mapped;
3914 }
3915
3916 static void map_region(struct sdeb_store_info *sip, sector_t lba,
3917                        unsigned int len)
3918 {
3919         sector_t end = lba + len;
3920
3921         while (lba < end) {
3922                 unsigned long index = lba_to_map_index(lba);
3923
3924                 if (index < map_size)
3925                         set_bit(index, sip->map_storep);
3926
3927                 lba = map_index_to_lba(index + 1);
3928         }
3929 }
3930
3931 static void unmap_region(struct sdeb_store_info *sip, sector_t lba,
3932                          unsigned int len)
3933 {
3934         sector_t end = lba + len;
3935         u8 *fsp = sip->storep;
3936
3937         while (lba < end) {
3938                 unsigned long index = lba_to_map_index(lba);
3939
3940                 if (lba == map_index_to_lba(index) &&
3941                     lba + sdebug_unmap_granularity <= end &&
3942                     index < map_size) {
3943                         clear_bit(index, sip->map_storep);
3944                         if (sdebug_lbprz) {  /* for LBPRZ=2 return 0xff_s */
3945                                 memset(fsp + lba * sdebug_sector_size,
3946                                        (sdebug_lbprz & 1) ? 0 : 0xff,
3947                                        sdebug_sector_size *
3948                                        sdebug_unmap_granularity);
3949                         }
3950                         if (sip->dif_storep) {
3951                                 memset(sip->dif_storep + lba, 0xff,
3952                                        sizeof(*sip->dif_storep) *
3953                                        sdebug_unmap_granularity);
3954                         }
3955                 }
3956                 lba = map_index_to_lba(index + 1);
3957         }
3958 }
3959
3960 static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3961 {
3962         bool check_prot;
3963         u32 num;
3964         u8 group = 0;
3965         u32 ei_lba;
3966         int ret;
3967         u64 lba;
3968         struct sdeb_store_info *sip = devip2sip(devip, true);
3969         u8 *cmd = scp->cmnd;
3970
3971         switch (cmd[0]) {
3972         case WRITE_16:
3973                 ei_lba = 0;
3974                 lba = get_unaligned_be64(cmd + 2);
3975                 num = get_unaligned_be32(cmd + 10);
3976                 group = cmd[14] & 0x3f;
3977                 check_prot = true;
3978                 break;
3979         case WRITE_10:
3980                 ei_lba = 0;
3981                 lba = get_unaligned_be32(cmd + 2);
3982                 group = cmd[6] & 0x3f;
3983                 num = get_unaligned_be16(cmd + 7);
3984                 check_prot = true;
3985                 break;
3986         case WRITE_6:
3987                 ei_lba = 0;
3988                 lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
3989                       (u32)(cmd[1] & 0x1f) << 16;
3990                 num = (0 == cmd[4]) ? 256 : cmd[4];
3991                 check_prot = true;
3992                 break;
3993         case WRITE_12:
3994                 ei_lba = 0;
3995                 lba = get_unaligned_be32(cmd + 2);
3996                 num = get_unaligned_be32(cmd + 6);
3997                 group = cmd[6] & 0x3f;
3998                 check_prot = true;
3999                 break;
4000         case 0x53:      /* XDWRITEREAD(10) */
4001                 ei_lba = 0;
4002                 lba = get_unaligned_be32(cmd + 2);
4003                 group = cmd[6] & 0x1f;
4004                 num = get_unaligned_be16(cmd + 7);
4005                 check_prot = false;
4006                 break;
4007         default:        /* assume WRITE(32) */
4008                 group = cmd[6] & 0x3f;
4009                 lba = get_unaligned_be64(cmd + 12);
4010                 ei_lba = get_unaligned_be32(cmd + 20);
4011                 num = get_unaligned_be32(cmd + 28);
4012                 check_prot = false;
4013                 break;
4014         }
4015         if (unlikely(have_dif_prot && check_prot)) {
4016                 if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
4017                     (cmd[1] & 0xe0)) {
4018                         mk_sense_invalid_opcode(scp);
4019                         return check_condition_result;
4020                 }
4021                 if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
4022                      sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
4023                     (cmd[1] & 0xe0) == 0)
4024                         sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
4025                                     "to DIF device\n");
4026         }
4027
4028         sdeb_write_lock(sip);
4029         ret = check_device_access_params(scp, lba, num, true);
4030         if (ret) {
4031                 sdeb_write_unlock(sip);
4032                 return ret;
4033         }
4034
4035         /* DIX + T10 DIF */
4036         if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
4037                 switch (prot_verify_write(scp, lba, num, ei_lba)) {
4038                 case 1: /* Guard tag error */
4039                         if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
4040                                 sdeb_write_unlock(sip);
4041                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
4042                                 return illegal_condition_result;
4043                         } else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
4044                                 sdeb_write_unlock(sip);
4045                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
4046                                 return check_condition_result;
4047                         }
4048                         break;
4049                 case 3: /* Reference tag error */
4050                         if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
4051                                 sdeb_write_unlock(sip);
4052                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
4053                                 return illegal_condition_result;
4054                         } else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
4055                                 sdeb_write_unlock(sip);
4056                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
4057                                 return check_condition_result;
4058                         }
4059                         break;
4060                 }
4061         }
4062
4063         ret = do_device_access(sip, scp, 0, lba, num, true, group);
4064         if (unlikely(scsi_debug_lbp()))
4065                 map_region(sip, lba, num);
4066         /* If ZBC zone then bump its write pointer */
4067         if (sdebug_dev_is_zoned(devip))
4068                 zbc_inc_wp(devip, lba, num);
4069         sdeb_write_unlock(sip);
4070         if (unlikely(-1 == ret))
4071                 return DID_ERROR << 16;
4072         else if (unlikely(sdebug_verbose &&
4073                           (ret < (num * sdebug_sector_size))))
4074                 sdev_printk(KERN_INFO, scp->device,
4075                             "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
4076                             my_name, num * sdebug_sector_size, ret);
4077
4078         if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
4079                      atomic_read(&sdeb_inject_pending))) {
4080                 if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
4081                         mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
4082                         atomic_set(&sdeb_inject_pending, 0);
4083                         return check_condition_result;
4084                 } else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
4085                         /* Logical block guard check failed */
4086                         mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
4087                         atomic_set(&sdeb_inject_pending, 0);
4088                         return illegal_condition_result;
4089                 } else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
4090                         mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
4091                         atomic_set(&sdeb_inject_pending, 0);
4092                         return illegal_condition_result;
4093                 }
4094         }
4095         return 0;
4096 }
4097
4098 /*
4099  * T10 has only specified WRITE SCATTERED(16) and WRITE SCATTERED(32).
4100  * No READ GATHERED yet (requires bidi or long cdb holding gather list).
4101  */
4102 static int resp_write_scat(struct scsi_cmnd *scp,
4103                            struct sdebug_dev_info *devip)
4104 {
4105         u8 *cmd = scp->cmnd;
4106         u8 *lrdp = NULL;
4107         u8 *up;
4108         struct sdeb_store_info *sip = devip2sip(devip, true);
4109         u8 wrprotect;
4110         u16 lbdof, num_lrd, k;
4111         u32 num, num_by, bt_len, lbdof_blen, sg_off, cum_lb;
4112         u32 lb_size = sdebug_sector_size;
4113         u32 ei_lba;
4114         u64 lba;
4115         u8 group;
4116         int ret, res;
4117         bool is_16;
4118         static const u32 lrd_size = 32; /* + parameter list header size */
4119
4120         if (cmd[0] == VARIABLE_LENGTH_CMD) {
4121                 is_16 = false;
4122                 group = cmd[6] & 0x3f;
4123                 wrprotect = (cmd[10] >> 5) & 0x7;
4124                 lbdof = get_unaligned_be16(cmd + 12);
4125                 num_lrd = get_unaligned_be16(cmd + 16);
4126                 bt_len = get_unaligned_be32(cmd + 28);
4127         } else {        /* that leaves WRITE SCATTERED(16) */
4128                 is_16 = true;
4129                 wrprotect = (cmd[2] >> 5) & 0x7;
4130                 lbdof = get_unaligned_be16(cmd + 4);
4131                 num_lrd = get_unaligned_be16(cmd + 8);
4132                 bt_len = get_unaligned_be32(cmd + 10);
4133                 group = cmd[14] & 0x3f;
4134                 if (unlikely(have_dif_prot)) {
4135                         if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
4136                             wrprotect) {
4137                                 mk_sense_invalid_opcode(scp);
4138                                 return illegal_condition_result;
4139                         }
4140                         if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
4141                              sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
4142                              wrprotect == 0)
4143                                 sdev_printk(KERN_ERR, scp->device,
4144                                             "Unprotected WR to DIF device\n");
4145                 }
4146         }
4147         if ((num_lrd == 0) || (bt_len == 0))
4148                 return 0;       /* T10 says these do-nothings are not errors */
4149         if (lbdof == 0) {
4150                 if (sdebug_verbose)
4151                         sdev_printk(KERN_INFO, scp->device,
4152                                 "%s: %s: LB Data Offset field bad\n",
4153                                 my_name, __func__);
4154                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4155                 return illegal_condition_result;
4156         }
4157         lbdof_blen = lbdof * lb_size;
4158         if ((lrd_size + (num_lrd * lrd_size)) > lbdof_blen) {
4159                 if (sdebug_verbose)
4160                         sdev_printk(KERN_INFO, scp->device,
4161                                 "%s: %s: LBA range descriptors don't fit\n",
4162                                 my_name, __func__);
4163                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4164                 return illegal_condition_result;
4165         }
4166         lrdp = kzalloc(lbdof_blen, GFP_ATOMIC | __GFP_NOWARN);
4167         if (lrdp == NULL)
4168                 return SCSI_MLQUEUE_HOST_BUSY;
4169         if (sdebug_verbose)
4170                 sdev_printk(KERN_INFO, scp->device,
4171                         "%s: %s: Fetch header+scatter_list, lbdof_blen=%u\n",
4172                         my_name, __func__, lbdof_blen);
4173         res = fetch_to_dev_buffer(scp, lrdp, lbdof_blen);
4174         if (res == -1) {
4175                 ret = DID_ERROR << 16;
4176                 goto err_out;
4177         }
4178
4179         sdeb_write_lock(sip);
4180         sg_off = lbdof_blen;
4181         /* Spec says Buffer xfer Length field in number of LBs in dout */
4182         cum_lb = 0;
4183         for (k = 0, up = lrdp + lrd_size; k < num_lrd; ++k, up += lrd_size) {
4184                 lba = get_unaligned_be64(up + 0);
4185                 num = get_unaligned_be32(up + 8);
4186                 if (sdebug_verbose)
4187                         sdev_printk(KERN_INFO, scp->device,
4188                                 "%s: %s: k=%d  LBA=0x%llx num=%u  sg_off=%u\n",
4189                                 my_name, __func__, k, lba, num, sg_off);
4190                 if (num == 0)
4191                         continue;
4192                 ret = check_device_access_params(scp, lba, num, true);
4193                 if (ret)
4194                         goto err_out_unlock;
4195                 num_by = num * lb_size;
4196                 ei_lba = is_16 ? 0 : get_unaligned_be32(up + 12);
4197
4198                 if ((cum_lb + num) > bt_len) {
4199                         if (sdebug_verbose)
4200                                 sdev_printk(KERN_INFO, scp->device,
4201                                     "%s: %s: sum of blocks > data provided\n",
4202                                     my_name, __func__);
4203                         mk_sense_buffer(scp, ILLEGAL_REQUEST, WRITE_ERROR_ASC,
4204                                         0);
4205                         ret = illegal_condition_result;
4206                         goto err_out_unlock;
4207                 }
4208
4209                 /* DIX + T10 DIF */
4210                 if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
4211                         int prot_ret = prot_verify_write(scp, lba, num,
4212                                                          ei_lba);
4213
4214                         if (prot_ret) {
4215                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10,
4216                                                 prot_ret);
4217                                 ret = illegal_condition_result;
4218                                 goto err_out_unlock;
4219                         }
4220                 }
4221
4222                 ret = do_device_access(sip, scp, sg_off, lba, num, true, group);
4223                 /* If ZBC zone then bump its write pointer */
4224                 if (sdebug_dev_is_zoned(devip))
4225                         zbc_inc_wp(devip, lba, num);
4226                 if (unlikely(scsi_debug_lbp()))
4227                         map_region(sip, lba, num);
4228                 if (unlikely(-1 == ret)) {
4229                         ret = DID_ERROR << 16;
4230                         goto err_out_unlock;
4231                 } else if (unlikely(sdebug_verbose && (ret < num_by)))
4232                         sdev_printk(KERN_INFO, scp->device,
4233                             "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
4234                             my_name, num_by, ret);
4235
4236                 if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
4237                              atomic_read(&sdeb_inject_pending))) {
4238                         if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
4239                                 mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
4240                                 atomic_set(&sdeb_inject_pending, 0);
4241                                 ret = check_condition_result;
4242                                 goto err_out_unlock;
4243                         } else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
4244                                 /* Logical block guard check failed */
4245                                 mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
4246                                 atomic_set(&sdeb_inject_pending, 0);
4247                                 ret = illegal_condition_result;
4248                                 goto err_out_unlock;
4249                         } else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
4250                                 mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
4251                                 atomic_set(&sdeb_inject_pending, 0);
4252                                 ret = illegal_condition_result;
4253                                 goto err_out_unlock;
4254                         }
4255                 }
4256                 sg_off += num_by;
4257                 cum_lb += num;
4258         }
4259         ret = 0;
4260 err_out_unlock:
4261         sdeb_write_unlock(sip);
4262 err_out:
4263         kfree(lrdp);
4264         return ret;
4265 }
4266
4267 static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num,
4268                            u32 ei_lba, bool unmap, bool ndob)
4269 {
4270         struct scsi_device *sdp = scp->device;
4271         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
4272         unsigned long long i;
4273         u64 block, lbaa;
4274         u32 lb_size = sdebug_sector_size;
4275         int ret;
4276         struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
4277                                                 scp->device->hostdata, true);
4278         u8 *fs1p;
4279         u8 *fsp;
4280
4281         sdeb_write_lock(sip);
4282
4283         ret = check_device_access_params(scp, lba, num, true);
4284         if (ret) {
4285                 sdeb_write_unlock(sip);
4286                 return ret;
4287         }
4288
4289         if (unmap && scsi_debug_lbp()) {
4290                 unmap_region(sip, lba, num);
4291                 goto out;
4292         }
4293         lbaa = lba;
4294         block = do_div(lbaa, sdebug_store_sectors);
4295         /* if ndob then zero 1 logical block, else fetch 1 logical block */
4296         fsp = sip->storep;
4297         fs1p = fsp + (block * lb_size);
4298         if (ndob) {
4299                 memset(fs1p, 0, lb_size);
4300                 ret = 0;
4301         } else
4302                 ret = fetch_to_dev_buffer(scp, fs1p, lb_size);
4303
4304         if (-1 == ret) {
4305                 sdeb_write_unlock(sip);
4306                 return DID_ERROR << 16;
4307         } else if (sdebug_verbose && !ndob && (ret < lb_size))
4308                 sdev_printk(KERN_INFO, scp->device,
4309                             "%s: %s: lb size=%u, IO sent=%d bytes\n",
4310                             my_name, "write same", lb_size, ret);
4311
4312         /* Copy first sector to remaining blocks */
4313         for (i = 1 ; i < num ; i++) {
4314                 lbaa = lba + i;
4315                 block = do_div(lbaa, sdebug_store_sectors);
4316                 memmove(fsp + (block * lb_size), fs1p, lb_size);
4317         }
4318         if (scsi_debug_lbp())
4319                 map_region(sip, lba, num);
4320         /* If ZBC zone then bump its write pointer */
4321         if (sdebug_dev_is_zoned(devip))
4322                 zbc_inc_wp(devip, lba, num);
4323 out:
4324         sdeb_write_unlock(sip);
4325
4326         return 0;
4327 }
4328
4329 static int resp_write_same_10(struct scsi_cmnd *scp,
4330                               struct sdebug_dev_info *devip)
4331 {
4332         u8 *cmd = scp->cmnd;
4333         u32 lba;
4334         u16 num;
4335         u32 ei_lba = 0;
4336         bool unmap = false;
4337
4338         if (cmd[1] & 0x8) {
4339                 if (sdebug_lbpws10 == 0) {
4340                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
4341                         return check_condition_result;
4342                 } else
4343                         unmap = true;
4344         }
4345         lba = get_unaligned_be32(cmd + 2);
4346         num = get_unaligned_be16(cmd + 7);
4347         if (num > sdebug_write_same_length) {
4348                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
4349                 return check_condition_result;
4350         }
4351         return resp_write_same(scp, lba, num, ei_lba, unmap, false);
4352 }
4353
4354 static int resp_write_same_16(struct scsi_cmnd *scp,
4355                               struct sdebug_dev_info *devip)
4356 {
4357         u8 *cmd = scp->cmnd;
4358         u64 lba;
4359         u32 num;
4360         u32 ei_lba = 0;
4361         bool unmap = false;
4362         bool ndob = false;
4363
4364         if (cmd[1] & 0x8) {     /* UNMAP */
4365                 if (sdebug_lbpws == 0) {
4366                         mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
4367                         return check_condition_result;
4368                 } else
4369                         unmap = true;
4370         }
4371         if (cmd[1] & 0x1)  /* NDOB (no data-out buffer, assumes zeroes) */
4372                 ndob = true;
4373         lba = get_unaligned_be64(cmd + 2);
4374         num = get_unaligned_be32(cmd + 10);
4375         if (num > sdebug_write_same_length) {
4376                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
4377                 return check_condition_result;
4378         }
4379         return resp_write_same(scp, lba, num, ei_lba, unmap, ndob);
4380 }
4381
4382 /* Note the mode field is in the same position as the (lower) service action
4383  * field. For the Report supported operation codes command, SPC-4 suggests
4384  * each mode of this command should be reported separately; for future. */
4385 static int resp_write_buffer(struct scsi_cmnd *scp,
4386                              struct sdebug_dev_info *devip)
4387 {
4388         u8 *cmd = scp->cmnd;
4389         struct scsi_device *sdp = scp->device;
4390         struct sdebug_dev_info *dp;
4391         u8 mode;
4392
4393         mode = cmd[1] & 0x1f;
4394         switch (mode) {
4395         case 0x4:       /* download microcode (MC) and activate (ACT) */
4396                 /* set UAs on this device only */
4397                 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
4398                 set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
4399                 break;
4400         case 0x5:       /* download MC, save and ACT */
4401                 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
4402                 break;
4403         case 0x6:       /* download MC with offsets and ACT */
4404                 /* set UAs on most devices (LUs) in this target */
4405                 list_for_each_entry(dp,
4406                                     &devip->sdbg_host->dev_info_list,
4407                                     dev_list)
4408                         if (dp->target == sdp->id) {
4409                                 set_bit(SDEBUG_UA_BUS_RESET, dp->uas_bm);
4410                                 if (devip != dp)
4411                                         set_bit(SDEBUG_UA_MICROCODE_CHANGED,
4412                                                 dp->uas_bm);
4413                         }
4414                 break;
4415         case 0x7:       /* download MC with offsets, save, and ACT */
4416                 /* set UA on all devices (LUs) in this target */
4417                 list_for_each_entry(dp,
4418                                     &devip->sdbg_host->dev_info_list,
4419                                     dev_list)
4420                         if (dp->target == sdp->id)
4421                                 set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET,
4422                                         dp->uas_bm);
4423                 break;
4424         default:
4425                 /* do nothing for this command for other mode values */
4426                 break;
4427         }
4428         return 0;
4429 }
4430
4431 static int resp_comp_write(struct scsi_cmnd *scp,
4432                            struct sdebug_dev_info *devip)
4433 {
4434         u8 *cmd = scp->cmnd;
4435         u8 *arr;
4436         struct sdeb_store_info *sip = devip2sip(devip, true);
4437         u64 lba;
4438         u32 dnum;
4439         u32 lb_size = sdebug_sector_size;
4440         u8 num;
4441         int ret;
4442         int retval = 0;
4443
4444         lba = get_unaligned_be64(cmd + 2);
4445         num = cmd[13];          /* 1 to a maximum of 255 logical blocks */
4446         if (0 == num)
4447                 return 0;       /* degenerate case, not an error */
4448         if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
4449             (cmd[1] & 0xe0)) {
4450                 mk_sense_invalid_opcode(scp);
4451                 return check_condition_result;
4452         }
4453         if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
4454              sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
4455             (cmd[1] & 0xe0) == 0)
4456                 sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
4457                             "to DIF device\n");
4458         ret = check_device_access_params(scp, lba, num, false);
4459         if (ret)
4460                 return ret;
4461         dnum = 2 * num;
4462         arr = kcalloc(lb_size, dnum, GFP_ATOMIC);
4463         if (NULL == arr) {
4464                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4465                                 INSUFF_RES_ASCQ);
4466                 return check_condition_result;
4467         }
4468
4469         sdeb_write_lock(sip);
4470
4471         ret = do_dout_fetch(scp, dnum, arr);
4472         if (ret == -1) {
4473                 retval = DID_ERROR << 16;
4474                 goto cleanup;
4475         } else if (sdebug_verbose && (ret < (dnum * lb_size)))
4476                 sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
4477                             "indicated=%u, IO sent=%d bytes\n", my_name,
4478                             dnum * lb_size, ret);
4479         if (!comp_write_worker(sip, lba, num, arr, false)) {
4480                 mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
4481                 retval = check_condition_result;
4482                 goto cleanup;
4483         }
4484         if (scsi_debug_lbp())
4485                 map_region(sip, lba, num);
4486 cleanup:
4487         sdeb_write_unlock(sip);
4488         kfree(arr);
4489         return retval;
4490 }
4491
4492 struct unmap_block_desc {
4493         __be64  lba;
4494         __be32  blocks;
4495         __be32  __reserved;
4496 };
4497
4498 static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4499 {
4500         unsigned char *buf;
4501         struct unmap_block_desc *desc;
4502         struct sdeb_store_info *sip = devip2sip(devip, true);
4503         unsigned int i, payload_len, descriptors;
4504         int ret;
4505
4506         if (!scsi_debug_lbp())
4507                 return 0;       /* fib and say its done */
4508         payload_len = get_unaligned_be16(scp->cmnd + 7);
4509         BUG_ON(scsi_bufflen(scp) != payload_len);
4510
4511         descriptors = (payload_len - 8) / 16;
4512         if (descriptors > sdebug_unmap_max_desc) {
4513                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
4514                 return check_condition_result;
4515         }
4516
4517         buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
4518         if (!buf) {
4519                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4520                                 INSUFF_RES_ASCQ);
4521                 return check_condition_result;
4522         }
4523
4524         scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
4525
4526         BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
4527         BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
4528
4529         desc = (void *)&buf[8];
4530
4531         sdeb_write_lock(sip);
4532
4533         for (i = 0 ; i < descriptors ; i++) {
4534                 unsigned long long lba = get_unaligned_be64(&desc[i].lba);
4535                 unsigned int num = get_unaligned_be32(&desc[i].blocks);
4536
4537                 ret = check_device_access_params(scp, lba, num, true);
4538                 if (ret)
4539                         goto out;
4540
4541                 unmap_region(sip, lba, num);
4542         }
4543
4544         ret = 0;
4545
4546 out:
4547         sdeb_write_unlock(sip);
4548         kfree(buf);
4549
4550         return ret;
4551 }
4552
4553 #define SDEBUG_GET_LBA_STATUS_LEN 32
4554
4555 static int resp_get_lba_status(struct scsi_cmnd *scp,
4556                                struct sdebug_dev_info *devip)
4557 {
4558         u8 *cmd = scp->cmnd;
4559         u64 lba;
4560         u32 alloc_len, mapped, num;
4561         int ret;
4562         u8 arr[SDEBUG_GET_LBA_STATUS_LEN];
4563
4564         lba = get_unaligned_be64(cmd + 2);
4565         alloc_len = get_unaligned_be32(cmd + 10);
4566
4567         if (alloc_len < 24)
4568                 return 0;
4569
4570         ret = check_device_access_params(scp, lba, 1, false);
4571         if (ret)
4572                 return ret;
4573
4574         if (scsi_debug_lbp()) {
4575                 struct sdeb_store_info *sip = devip2sip(devip, true);
4576
4577                 mapped = map_state(sip, lba, &num);
4578         } else {
4579                 mapped = 1;
4580                 /* following just in case virtual_gb changed */
4581                 sdebug_capacity = get_sdebug_capacity();
4582                 if (sdebug_capacity - lba <= 0xffffffff)
4583                         num = sdebug_capacity - lba;
4584                 else
4585                         num = 0xffffffff;
4586         }
4587
4588         memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
4589         put_unaligned_be32(20, arr);            /* Parameter Data Length */
4590         put_unaligned_be64(lba, arr + 8);       /* LBA */
4591         put_unaligned_be32(num, arr + 16);      /* Number of blocks */
4592         arr[20] = !mapped;              /* prov_stat=0: mapped; 1: dealloc */
4593
4594         return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
4595 }
4596
4597 static int resp_get_stream_status(struct scsi_cmnd *scp,
4598                                   struct sdebug_dev_info *devip)
4599 {
4600         u16 starting_stream_id, stream_id;
4601         const u8 *cmd = scp->cmnd;
4602         u32 alloc_len, offset;
4603         u8 arr[256] = {};
4604         struct scsi_stream_status_header *h = (void *)arr;
4605
4606         starting_stream_id = get_unaligned_be16(cmd + 4);
4607         alloc_len = get_unaligned_be32(cmd + 10);
4608
4609         if (alloc_len < 8) {
4610                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
4611                 return check_condition_result;
4612         }
4613
4614         if (starting_stream_id >= MAXIMUM_NUMBER_OF_STREAMS) {
4615                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
4616                 return check_condition_result;
4617         }
4618
4619         /*
4620          * The GET STREAM STATUS command only reports status information
4621          * about open streams. Treat the non-permanent stream as open.
4622          */
4623         put_unaligned_be16(MAXIMUM_NUMBER_OF_STREAMS,
4624                            &h->number_of_open_streams);
4625
4626         for (offset = 8, stream_id = starting_stream_id;
4627              offset + 8 <= min_t(u32, alloc_len, sizeof(arr)) &&
4628                      stream_id < MAXIMUM_NUMBER_OF_STREAMS;
4629              offset += 8, stream_id++) {
4630                 struct scsi_stream_status *stream_status = (void *)arr + offset;
4631
4632                 stream_status->perm = stream_id < PERMANENT_STREAM_COUNT;
4633                 put_unaligned_be16(stream_id,
4634                                    &stream_status->stream_identifier);
4635                 stream_status->rel_lifetime = stream_id + 1;
4636         }
4637         put_unaligned_be32(offset - 8, &h->len); /* PARAMETER DATA LENGTH */
4638
4639         return fill_from_dev_buffer(scp, arr, min(offset, alloc_len));
4640 }
4641
4642 static int resp_sync_cache(struct scsi_cmnd *scp,
4643                            struct sdebug_dev_info *devip)
4644 {
4645         int res = 0;
4646         u64 lba;
4647         u32 num_blocks;
4648         u8 *cmd = scp->cmnd;
4649
4650         if (cmd[0] == SYNCHRONIZE_CACHE) {      /* 10 byte cdb */
4651                 lba = get_unaligned_be32(cmd + 2);
4652                 num_blocks = get_unaligned_be16(cmd + 7);
4653         } else {                                /* SYNCHRONIZE_CACHE(16) */
4654                 lba = get_unaligned_be64(cmd + 2);
4655                 num_blocks = get_unaligned_be32(cmd + 10);
4656         }
4657         if (lba + num_blocks > sdebug_capacity) {
4658                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4659                 return check_condition_result;
4660         }
4661         if (!write_since_sync || (cmd[1] & 0x2))
4662                 res = SDEG_RES_IMMED_MASK;
4663         else            /* delay if write_since_sync and IMMED clear */
4664                 write_since_sync = false;
4665         return res;
4666 }
4667
4668 /*
4669  * Assuming the LBA+num_blocks is not out-of-range, this function will return
4670  * CONDITION MET if the specified blocks will/have fitted in the cache, and
4671  * a GOOD status otherwise. Model a disk with a big cache and yield
4672  * CONDITION MET. Actually tries to bring range in main memory into the
4673  * cache associated with the CPU(s).
4674  */
4675 static int resp_pre_fetch(struct scsi_cmnd *scp,
4676                           struct sdebug_dev_info *devip)
4677 {
4678         int res = 0;
4679         u64 lba;
4680         u64 block, rest = 0;
4681         u32 nblks;
4682         u8 *cmd = scp->cmnd;
4683         struct sdeb_store_info *sip = devip2sip(devip, true);
4684         u8 *fsp = sip->storep;
4685
4686         if (cmd[0] == PRE_FETCH) {      /* 10 byte cdb */
4687                 lba = get_unaligned_be32(cmd + 2);
4688                 nblks = get_unaligned_be16(cmd + 7);
4689         } else {                        /* PRE-FETCH(16) */
4690                 lba = get_unaligned_be64(cmd + 2);
4691                 nblks = get_unaligned_be32(cmd + 10);
4692         }
4693         if (lba + nblks > sdebug_capacity) {
4694                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4695                 return check_condition_result;
4696         }
4697         if (!fsp)
4698                 goto fini;
4699         /* PRE-FETCH spec says nothing about LBP or PI so skip them */
4700         block = do_div(lba, sdebug_store_sectors);
4701         if (block + nblks > sdebug_store_sectors)
4702                 rest = block + nblks - sdebug_store_sectors;
4703
4704         /* Try to bring the PRE-FETCH range into CPU's cache */
4705         sdeb_read_lock(sip);
4706         prefetch_range(fsp + (sdebug_sector_size * block),
4707                        (nblks - rest) * sdebug_sector_size);
4708         if (rest)
4709                 prefetch_range(fsp, rest * sdebug_sector_size);
4710         sdeb_read_unlock(sip);
4711 fini:
4712         if (cmd[1] & 0x2)
4713                 res = SDEG_RES_IMMED_MASK;
4714         return res | condition_met_result;
4715 }
4716
4717 #define RL_BUCKET_ELEMS 8
4718
4719 /* Even though each pseudo target has a REPORT LUNS "well known logical unit"
4720  * (W-LUN), the normal Linux scanning logic does not associate it with a
4721  * device (e.g. /dev/sg7). The following magic will make that association:
4722  *   "cd /sys/class/scsi_host/host<n> ; echo '- - 49409' > scan"
4723  * where <n> is a host number. If there are multiple targets in a host then
4724  * the above will associate a W-LUN to each target. To only get a W-LUN
4725  * for target 2, then use "echo '- 2 49409' > scan" .
4726  */
4727 static int resp_report_luns(struct scsi_cmnd *scp,
4728                             struct sdebug_dev_info *devip)
4729 {
4730         unsigned char *cmd = scp->cmnd;
4731         unsigned int alloc_len;
4732         unsigned char select_report;
4733         u64 lun;
4734         struct scsi_lun *lun_p;
4735         u8 arr[RL_BUCKET_ELEMS * sizeof(struct scsi_lun)];
4736         unsigned int lun_cnt;   /* normal LUN count (max: 256) */
4737         unsigned int wlun_cnt;  /* report luns W-LUN count */
4738         unsigned int tlun_cnt;  /* total LUN count */
4739         unsigned int rlen;      /* response length (in bytes) */
4740         int k, j, n, res;
4741         unsigned int off_rsp = 0;
4742         const int sz_lun = sizeof(struct scsi_lun);
4743
4744         clear_luns_changed_on_target(devip);
4745
4746         select_report = cmd[2];
4747         alloc_len = get_unaligned_be32(cmd + 6);
4748
4749         if (alloc_len < 4) {
4750                 pr_err("alloc len too small %d\n", alloc_len);
4751                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
4752                 return check_condition_result;
4753         }
4754
4755         switch (select_report) {
4756         case 0:         /* all LUNs apart from W-LUNs */
4757                 lun_cnt = sdebug_max_luns;
4758                 wlun_cnt = 0;
4759                 break;
4760         case 1:         /* only W-LUNs */
4761                 lun_cnt = 0;
4762                 wlun_cnt = 1;
4763                 break;
4764         case 2:         /* all LUNs */
4765                 lun_cnt = sdebug_max_luns;
4766                 wlun_cnt = 1;
4767                 break;
4768         case 0x10:      /* only administrative LUs */
4769         case 0x11:      /* see SPC-5 */
4770         case 0x12:      /* only subsiduary LUs owned by referenced LU */
4771         default:
4772                 pr_debug("select report invalid %d\n", select_report);
4773                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
4774                 return check_condition_result;
4775         }
4776
4777         if (sdebug_no_lun_0 && (lun_cnt > 0))
4778                 --lun_cnt;
4779
4780         tlun_cnt = lun_cnt + wlun_cnt;
4781         rlen = tlun_cnt * sz_lun;       /* excluding 8 byte header */
4782         scsi_set_resid(scp, scsi_bufflen(scp));
4783         pr_debug("select_report %d luns = %d wluns = %d no_lun0 %d\n",
4784                  select_report, lun_cnt, wlun_cnt, sdebug_no_lun_0);
4785
4786         /* loops rely on sizeof response header same as sizeof lun (both 8) */
4787         lun = sdebug_no_lun_0 ? 1 : 0;
4788         for (k = 0, j = 0, res = 0; true; ++k, j = 0) {
4789                 memset(arr, 0, sizeof(arr));
4790                 lun_p = (struct scsi_lun *)&arr[0];
4791                 if (k == 0) {
4792                         put_unaligned_be32(rlen, &arr[0]);
4793                         ++lun_p;
4794                         j = 1;
4795                 }
4796                 for ( ; j < RL_BUCKET_ELEMS; ++j, ++lun_p) {
4797                         if ((k * RL_BUCKET_ELEMS) + j > lun_cnt)
4798                                 break;
4799                         int_to_scsilun(lun++, lun_p);
4800                         if (lun > 1 && sdebug_lun_am == SAM_LUN_AM_FLAT)
4801                                 lun_p->scsi_lun[0] |= 0x40;
4802                 }
4803                 if (j < RL_BUCKET_ELEMS)
4804                         break;
4805                 n = j * sz_lun;
4806                 res = p_fill_from_dev_buffer(scp, arr, n, off_rsp);
4807                 if (res)
4808                         return res;
4809                 off_rsp += n;
4810         }
4811         if (wlun_cnt) {
4812                 int_to_scsilun(SCSI_W_LUN_REPORT_LUNS, lun_p);
4813                 ++j;
4814         }
4815         if (j > 0)
4816                 res = p_fill_from_dev_buffer(scp, arr, j * sz_lun, off_rsp);
4817         return res;
4818 }
4819
4820 static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4821 {
4822         bool is_bytchk3 = false;
4823         u8 bytchk;
4824         int ret, j;
4825         u32 vnum, a_num, off;
4826         const u32 lb_size = sdebug_sector_size;
4827         u64 lba;
4828         u8 *arr;
4829         u8 *cmd = scp->cmnd;
4830         struct sdeb_store_info *sip = devip2sip(devip, true);
4831
4832         bytchk = (cmd[1] >> 1) & 0x3;
4833         if (bytchk == 0) {
4834                 return 0;       /* always claim internal verify okay */
4835         } else if (bytchk == 2) {
4836                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
4837                 return check_condition_result;
4838         } else if (bytchk == 3) {
4839                 is_bytchk3 = true;      /* 1 block sent, compared repeatedly */
4840         }
4841         switch (cmd[0]) {
4842         case VERIFY_16:
4843                 lba = get_unaligned_be64(cmd + 2);
4844                 vnum = get_unaligned_be32(cmd + 10);
4845                 break;
4846         case VERIFY:            /* is VERIFY(10) */
4847                 lba = get_unaligned_be32(cmd + 2);
4848                 vnum = get_unaligned_be16(cmd + 7);
4849                 break;
4850         default:
4851                 mk_sense_invalid_opcode(scp);
4852                 return check_condition_result;
4853         }
4854         if (vnum == 0)
4855                 return 0;       /* not an error */
4856         a_num = is_bytchk3 ? 1 : vnum;
4857         /* Treat following check like one for read (i.e. no write) access */
4858         ret = check_device_access_params(scp, lba, a_num, false);
4859         if (ret)
4860                 return ret;
4861
4862         arr = kcalloc(lb_size, vnum, GFP_ATOMIC | __GFP_NOWARN);
4863         if (!arr) {
4864                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4865                                 INSUFF_RES_ASCQ);
4866                 return check_condition_result;
4867         }
4868         /* Not changing store, so only need read access */
4869         sdeb_read_lock(sip);
4870
4871         ret = do_dout_fetch(scp, a_num, arr);
4872         if (ret == -1) {
4873                 ret = DID_ERROR << 16;
4874                 goto cleanup;
4875         } else if (sdebug_verbose && (ret < (a_num * lb_size))) {
4876                 sdev_printk(KERN_INFO, scp->device,
4877                             "%s: %s: cdb indicated=%u, IO sent=%d bytes\n",
4878                             my_name, __func__, a_num * lb_size, ret);
4879         }
4880         if (is_bytchk3) {
4881                 for (j = 1, off = lb_size; j < vnum; ++j, off += lb_size)
4882                         memcpy(arr + off, arr, lb_size);
4883         }
4884         ret = 0;
4885         if (!comp_write_worker(sip, lba, vnum, arr, true)) {
4886                 mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
4887                 ret = check_condition_result;
4888                 goto cleanup;
4889         }
4890 cleanup:
4891         sdeb_read_unlock(sip);
4892         kfree(arr);
4893         return ret;
4894 }
4895
4896 #define RZONES_DESC_HD 64
4897
4898 /* Report zones depending on start LBA and reporting options */
4899 static int resp_report_zones(struct scsi_cmnd *scp,
4900                              struct sdebug_dev_info *devip)
4901 {
4902         unsigned int rep_max_zones, nrz = 0;
4903         int ret = 0;
4904         u32 alloc_len, rep_opts, rep_len;
4905         bool partial;
4906         u64 lba, zs_lba;
4907         u8 *arr = NULL, *desc;
4908         u8 *cmd = scp->cmnd;
4909         struct sdeb_zone_state *zsp = NULL;
4910         struct sdeb_store_info *sip = devip2sip(devip, false);
4911
4912         if (!sdebug_dev_is_zoned(devip)) {
4913                 mk_sense_invalid_opcode(scp);
4914                 return check_condition_result;
4915         }
4916         zs_lba = get_unaligned_be64(cmd + 2);
4917         alloc_len = get_unaligned_be32(cmd + 10);
4918         if (alloc_len == 0)
4919                 return 0;       /* not an error */
4920         rep_opts = cmd[14] & 0x3f;
4921         partial = cmd[14] & 0x80;
4922
4923         if (zs_lba >= sdebug_capacity) {
4924                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4925                 return check_condition_result;
4926         }
4927
4928         rep_max_zones = (alloc_len - 64) >> ilog2(RZONES_DESC_HD);
4929
4930         arr = kzalloc(alloc_len, GFP_ATOMIC | __GFP_NOWARN);
4931         if (!arr) {
4932                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4933                                 INSUFF_RES_ASCQ);
4934                 return check_condition_result;
4935         }
4936
4937         sdeb_read_lock(sip);
4938
4939         desc = arr + 64;
4940         for (lba = zs_lba; lba < sdebug_capacity;
4941              lba = zsp->z_start + zsp->z_size) {
4942                 if (WARN_ONCE(zbc_zone(devip, lba) == zsp, "lba = %llu\n", lba))
4943                         break;
4944                 zsp = zbc_zone(devip, lba);
4945                 switch (rep_opts) {
4946                 case 0x00:
4947                         /* All zones */
4948                         break;
4949                 case 0x01:
4950                         /* Empty zones */
4951                         if (zsp->z_cond != ZC1_EMPTY)
4952                                 continue;
4953                         break;
4954                 case 0x02:
4955                         /* Implicit open zones */
4956                         if (zsp->z_cond != ZC2_IMPLICIT_OPEN)
4957                                 continue;
4958                         break;
4959                 case 0x03:
4960                         /* Explicit open zones */
4961                         if (zsp->z_cond != ZC3_EXPLICIT_OPEN)
4962                                 continue;
4963                         break;
4964                 case 0x04:
4965                         /* Closed zones */
4966                         if (zsp->z_cond != ZC4_CLOSED)
4967                                 continue;
4968                         break;
4969                 case 0x05:
4970                         /* Full zones */
4971                         if (zsp->z_cond != ZC5_FULL)
4972                                 continue;
4973                         break;
4974                 case 0x06:
4975                 case 0x07:
4976                 case 0x10:
4977                         /*
4978                          * Read-only, offline, reset WP recommended are
4979                          * not emulated: no zones to report;
4980                          */
4981                         continue;
4982                 case 0x11:
4983                         /* non-seq-resource set */
4984                         if (!zsp->z_non_seq_resource)
4985                                 continue;
4986                         break;
4987                 case 0x3e:
4988                         /* All zones except gap zones. */
4989                         if (zbc_zone_is_gap(zsp))
4990                                 continue;
4991                         break;
4992                 case 0x3f:
4993                         /* Not write pointer (conventional) zones */
4994                         if (zbc_zone_is_seq(zsp))
4995                                 continue;
4996                         break;
4997                 default:
4998                         mk_sense_buffer(scp, ILLEGAL_REQUEST,
4999                                         INVALID_FIELD_IN_CDB, 0);
5000                         ret = check_condition_result;
5001                         goto fini;
5002                 }
5003
5004                 if (nrz < rep_max_zones) {
5005                         /* Fill zone descriptor */
5006                         desc[0] = zsp->z_type;
5007                         desc[1] = zsp->z_cond << 4;
5008                         if (zsp->z_non_seq_resource)
5009                                 desc[1] |= 1 << 1;
5010                         put_unaligned_be64((u64)zsp->z_size, desc + 8);
5011                         put_unaligned_be64((u64)zsp->z_start, desc + 16);
5012                         put_unaligned_be64((u64)zsp->z_wp, desc + 24);
5013                         desc += 64;
5014                 }
5015
5016                 if (partial && nrz >= rep_max_zones)
5017                         break;
5018
5019                 nrz++;
5020         }
5021
5022         /* Report header */
5023         /* Zone list length. */
5024         put_unaligned_be32(nrz * RZONES_DESC_HD, arr + 0);
5025         /* Maximum LBA */
5026         put_unaligned_be64(sdebug_capacity - 1, arr + 8);
5027         /* Zone starting LBA granularity. */
5028         if (devip->zcap < devip->zsize)
5029                 put_unaligned_be64(devip->zsize, arr + 16);
5030
5031         rep_len = (unsigned long)desc - (unsigned long)arr;
5032         ret = fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, rep_len));
5033
5034 fini:
5035         sdeb_read_unlock(sip);
5036         kfree(arr);
5037         return ret;
5038 }
5039
5040 /* Logic transplanted from tcmu-runner, file_zbc.c */
5041 static void zbc_open_all(struct sdebug_dev_info *devip)
5042 {
5043         struct sdeb_zone_state *zsp = &devip->zstate[0];
5044         unsigned int i;
5045
5046         for (i = 0; i < devip->nr_zones; i++, zsp++) {
5047                 if (zsp->z_cond == ZC4_CLOSED)
5048                         zbc_open_zone(devip, &devip->zstate[i], true);
5049         }
5050 }
5051
5052 static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
5053 {
5054         int res = 0;
5055         u64 z_id;
5056         enum sdebug_z_cond zc;
5057         u8 *cmd = scp->cmnd;
5058         struct sdeb_zone_state *zsp;
5059         bool all = cmd[14] & 0x01;
5060         struct sdeb_store_info *sip = devip2sip(devip, false);
5061
5062         if (!sdebug_dev_is_zoned(devip)) {
5063                 mk_sense_invalid_opcode(scp);
5064                 return check_condition_result;
5065         }
5066
5067         sdeb_write_lock(sip);
5068
5069         if (all) {
5070                 /* Check if all closed zones can be open */
5071                 if (devip->max_open &&
5072                     devip->nr_exp_open + devip->nr_closed > devip->max_open) {
5073                         mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
5074                                         INSUFF_ZONE_ASCQ);
5075                         res = check_condition_result;
5076                         goto fini;
5077                 }
5078                 /* Open all closed zones */
5079                 zbc_open_all(devip);
5080                 goto fini;
5081         }
5082
5083         /* Open the specified zone */
5084         z_id = get_unaligned_be64(cmd + 2);
5085         if (z_id >= sdebug_capacity) {
5086                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5087                 res = check_condition_result;
5088                 goto fini;
5089         }
5090
5091         zsp = zbc_zone(devip, z_id);
5092         if (z_id != zsp->z_start) {
5093                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5094                 res = check_condition_result;
5095                 goto fini;
5096         }
5097         if (zbc_zone_is_conv(zsp)) {
5098                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5099                 res = check_condition_result;
5100                 goto fini;
5101         }
5102
5103         zc = zsp->z_cond;
5104         if (zc == ZC3_EXPLICIT_OPEN || zc == ZC5_FULL)
5105                 goto fini;
5106
5107         if (devip->max_open && devip->nr_exp_open >= devip->max_open) {
5108                 mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
5109                                 INSUFF_ZONE_ASCQ);
5110                 res = check_condition_result;
5111                 goto fini;
5112         }
5113
5114         zbc_open_zone(devip, zsp, true);
5115 fini:
5116         sdeb_write_unlock(sip);
5117         return res;
5118 }
5119
5120 static void zbc_close_all(struct sdebug_dev_info *devip)
5121 {
5122         unsigned int i;
5123
5124         for (i = 0; i < devip->nr_zones; i++)
5125                 zbc_close_zone(devip, &devip->zstate[i]);
5126 }
5127
5128 static int resp_close_zone(struct scsi_cmnd *scp,
5129                            struct sdebug_dev_info *devip)
5130 {
5131         int res = 0;
5132         u64 z_id;
5133         u8 *cmd = scp->cmnd;
5134         struct sdeb_zone_state *zsp;
5135         bool all = cmd[14] & 0x01;
5136         struct sdeb_store_info *sip = devip2sip(devip, false);
5137
5138         if (!sdebug_dev_is_zoned(devip)) {
5139                 mk_sense_invalid_opcode(scp);
5140                 return check_condition_result;
5141         }
5142
5143         sdeb_write_lock(sip);
5144
5145         if (all) {
5146                 zbc_close_all(devip);
5147                 goto fini;
5148         }
5149
5150         /* Close specified zone */
5151         z_id = get_unaligned_be64(cmd + 2);
5152         if (z_id >= sdebug_capacity) {
5153                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5154                 res = check_condition_result;
5155                 goto fini;
5156         }
5157
5158         zsp = zbc_zone(devip, z_id);
5159         if (z_id != zsp->z_start) {
5160                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5161                 res = check_condition_result;
5162                 goto fini;
5163         }
5164         if (zbc_zone_is_conv(zsp)) {
5165                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5166                 res = check_condition_result;
5167                 goto fini;
5168         }
5169
5170         zbc_close_zone(devip, zsp);
5171 fini:
5172         sdeb_write_unlock(sip);
5173         return res;
5174 }
5175
5176 static void zbc_finish_zone(struct sdebug_dev_info *devip,
5177                             struct sdeb_zone_state *zsp, bool empty)
5178 {
5179         enum sdebug_z_cond zc = zsp->z_cond;
5180
5181         if (zc == ZC4_CLOSED || zc == ZC2_IMPLICIT_OPEN ||
5182             zc == ZC3_EXPLICIT_OPEN || (empty && zc == ZC1_EMPTY)) {
5183                 if (zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN)
5184                         zbc_close_zone(devip, zsp);
5185                 if (zsp->z_cond == ZC4_CLOSED)
5186                         devip->nr_closed--;
5187                 zsp->z_wp = zsp->z_start + zsp->z_size;
5188                 zsp->z_cond = ZC5_FULL;
5189         }
5190 }
5191
5192 static void zbc_finish_all(struct sdebug_dev_info *devip)
5193 {
5194         unsigned int i;
5195
5196         for (i = 0; i < devip->nr_zones; i++)
5197                 zbc_finish_zone(devip, &devip->zstate[i], false);
5198 }
5199
5200 static int resp_finish_zone(struct scsi_cmnd *scp,
5201                             struct sdebug_dev_info *devip)
5202 {
5203         struct sdeb_zone_state *zsp;
5204         int res = 0;
5205         u64 z_id;
5206         u8 *cmd = scp->cmnd;
5207         bool all = cmd[14] & 0x01;
5208         struct sdeb_store_info *sip = devip2sip(devip, false);
5209
5210         if (!sdebug_dev_is_zoned(devip)) {
5211                 mk_sense_invalid_opcode(scp);
5212                 return check_condition_result;
5213         }
5214
5215         sdeb_write_lock(sip);
5216
5217         if (all) {
5218                 zbc_finish_all(devip);
5219                 goto fini;
5220         }
5221
5222         /* Finish the specified zone */
5223         z_id = get_unaligned_be64(cmd + 2);
5224         if (z_id >= sdebug_capacity) {
5225                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5226                 res = check_condition_result;
5227                 goto fini;
5228         }
5229
5230         zsp = zbc_zone(devip, z_id);
5231         if (z_id != zsp->z_start) {
5232                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5233                 res = check_condition_result;
5234                 goto fini;
5235         }
5236         if (zbc_zone_is_conv(zsp)) {
5237                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5238                 res = check_condition_result;
5239                 goto fini;
5240         }
5241
5242         zbc_finish_zone(devip, zsp, true);
5243 fini:
5244         sdeb_write_unlock(sip);
5245         return res;
5246 }
5247
5248 static void zbc_rwp_zone(struct sdebug_dev_info *devip,
5249                          struct sdeb_zone_state *zsp)
5250 {
5251         enum sdebug_z_cond zc;
5252         struct sdeb_store_info *sip = devip2sip(devip, false);
5253
5254         if (!zbc_zone_is_seq(zsp))
5255                 return;
5256
5257         zc = zsp->z_cond;
5258         if (zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN)
5259                 zbc_close_zone(devip, zsp);
5260
5261         if (zsp->z_cond == ZC4_CLOSED)
5262                 devip->nr_closed--;
5263
5264         if (zsp->z_wp > zsp->z_start)
5265                 memset(sip->storep + zsp->z_start * sdebug_sector_size, 0,
5266                        (zsp->z_wp - zsp->z_start) * sdebug_sector_size);
5267
5268         zsp->z_non_seq_resource = false;
5269         zsp->z_wp = zsp->z_start;
5270         zsp->z_cond = ZC1_EMPTY;
5271 }
5272
5273 static void zbc_rwp_all(struct sdebug_dev_info *devip)
5274 {
5275         unsigned int i;
5276
5277         for (i = 0; i < devip->nr_zones; i++)
5278                 zbc_rwp_zone(devip, &devip->zstate[i]);
5279 }
5280
5281 static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
5282 {
5283         struct sdeb_zone_state *zsp;
5284         int res = 0;
5285         u64 z_id;
5286         u8 *cmd = scp->cmnd;
5287         bool all = cmd[14] & 0x01;
5288         struct sdeb_store_info *sip = devip2sip(devip, false);
5289
5290         if (!sdebug_dev_is_zoned(devip)) {
5291                 mk_sense_invalid_opcode(scp);
5292                 return check_condition_result;
5293         }
5294
5295         sdeb_write_lock(sip);
5296
5297         if (all) {
5298                 zbc_rwp_all(devip);
5299                 goto fini;
5300         }
5301
5302         z_id = get_unaligned_be64(cmd + 2);
5303         if (z_id >= sdebug_capacity) {
5304                 mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5305                 res = check_condition_result;
5306                 goto fini;
5307         }
5308
5309         zsp = zbc_zone(devip, z_id);
5310         if (z_id != zsp->z_start) {
5311                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5312                 res = check_condition_result;
5313                 goto fini;
5314         }
5315         if (zbc_zone_is_conv(zsp)) {
5316                 mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5317                 res = check_condition_result;
5318                 goto fini;
5319         }
5320
5321         zbc_rwp_zone(devip, zsp);
5322 fini:
5323         sdeb_write_unlock(sip);
5324         return res;
5325 }
5326
5327 static u32 get_tag(struct scsi_cmnd *cmnd)
5328 {
5329         return blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
5330 }
5331
5332 /* Queued (deferred) command completions converge here. */
5333 static void sdebug_q_cmd_complete(struct sdebug_defer *sd_dp)
5334 {
5335         struct sdebug_queued_cmd *sqcp = container_of(sd_dp, struct sdebug_queued_cmd, sd_dp);
5336         unsigned long flags;
5337         struct scsi_cmnd *scp = sqcp->scmd;
5338         struct sdebug_scsi_cmd *sdsc;
5339         bool aborted;
5340
5341         if (sdebug_statistics) {
5342                 atomic_inc(&sdebug_completions);
5343                 if (raw_smp_processor_id() != sd_dp->issuing_cpu)
5344                         atomic_inc(&sdebug_miss_cpus);
5345         }
5346
5347         if (!scp) {
5348                 pr_err("scmd=NULL\n");
5349                 goto out;
5350         }
5351
5352         sdsc = scsi_cmd_priv(scp);
5353         spin_lock_irqsave(&sdsc->lock, flags);
5354         aborted = sd_dp->aborted;
5355         if (unlikely(aborted))
5356                 sd_dp->aborted = false;
5357         ASSIGN_QUEUED_CMD(scp, NULL);
5358
5359         spin_unlock_irqrestore(&sdsc->lock, flags);
5360
5361         if (aborted) {
5362                 pr_info("bypassing scsi_done() due to aborted cmd, kicking-off EH\n");
5363                 blk_abort_request(scsi_cmd_to_rq(scp));
5364                 goto out;
5365         }
5366
5367         scsi_done(scp); /* callback to mid level */
5368 out:
5369         sdebug_free_queued_cmd(sqcp);
5370 }
5371
5372 /* When high resolution timer goes off this function is called. */
5373 static enum hrtimer_restart sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
5374 {
5375         struct sdebug_defer *sd_dp = container_of(timer, struct sdebug_defer,
5376                                                   hrt);
5377         sdebug_q_cmd_complete(sd_dp);
5378         return HRTIMER_NORESTART;
5379 }
5380
5381 /* When work queue schedules work, it calls this function. */
5382 static void sdebug_q_cmd_wq_complete(struct work_struct *work)
5383 {
5384         struct sdebug_defer *sd_dp = container_of(work, struct sdebug_defer,
5385                                                   ew.work);
5386         sdebug_q_cmd_complete(sd_dp);
5387 }
5388
5389 static bool got_shared_uuid;
5390 static uuid_t shared_uuid;
5391
5392 static int sdebug_device_create_zones(struct sdebug_dev_info *devip)
5393 {
5394         struct sdeb_zone_state *zsp;
5395         sector_t capacity = get_sdebug_capacity();
5396         sector_t conv_capacity;
5397         sector_t zstart = 0;
5398         unsigned int i;
5399
5400         /*
5401          * Set the zone size: if sdeb_zbc_zone_size_mb is not set, figure out
5402          * a zone size allowing for at least 4 zones on the device. Otherwise,
5403          * use the specified zone size checking that at least 2 zones can be
5404          * created for the device.
5405          */
5406         if (!sdeb_zbc_zone_size_mb) {
5407                 devip->zsize = (DEF_ZBC_ZONE_SIZE_MB * SZ_1M)
5408                         >> ilog2(sdebug_sector_size);
5409                 while (capacity < devip->zsize << 2 && devip->zsize >= 2)
5410                         devip->zsize >>= 1;
5411                 if (devip->zsize < 2) {
5412                         pr_err("Device capacity too small\n");
5413                         return -EINVAL;
5414                 }
5415         } else {
5416                 if (!is_power_of_2(sdeb_zbc_zone_size_mb)) {
5417                         pr_err("Zone size is not a power of 2\n");
5418                         return -EINVAL;
5419                 }
5420                 devip->zsize = (sdeb_zbc_zone_size_mb * SZ_1M)
5421                         >> ilog2(sdebug_sector_size);
5422                 if (devip->zsize >= capacity) {
5423                         pr_err("Zone size too large for device capacity\n");
5424                         return -EINVAL;
5425                 }
5426         }
5427
5428         devip->zsize_shift = ilog2(devip->zsize);
5429         devip->nr_zones = (capacity + devip->zsize - 1) >> devip->zsize_shift;
5430
5431         if (sdeb_zbc_zone_cap_mb == 0) {
5432                 devip->zcap = devip->zsize;
5433         } else {
5434                 devip->zcap = (sdeb_zbc_zone_cap_mb * SZ_1M) >>
5435                               ilog2(sdebug_sector_size);
5436                 if (devip->zcap > devip->zsize) {
5437                         pr_err("Zone capacity too large\n");
5438                         return -EINVAL;
5439                 }
5440         }
5441
5442         conv_capacity = (sector_t)sdeb_zbc_nr_conv << devip->zsize_shift;
5443         if (conv_capacity >= capacity) {
5444                 pr_err("Number of conventional zones too large\n");
5445                 return -EINVAL;
5446         }
5447         devip->nr_conv_zones = sdeb_zbc_nr_conv;
5448         devip->nr_seq_zones = ALIGN(capacity - conv_capacity, devip->zsize) >>
5449                               devip->zsize_shift;
5450         devip->nr_zones = devip->nr_conv_zones + devip->nr_seq_zones;
5451
5452         /* Add gap zones if zone capacity is smaller than the zone size */
5453         if (devip->zcap < devip->zsize)
5454                 devip->nr_zones += devip->nr_seq_zones;
5455
5456         if (devip->zoned) {
5457                 /* zbc_max_open_zones can be 0, meaning "not reported" */
5458                 if (sdeb_zbc_max_open >= devip->nr_zones - 1)
5459                         devip->max_open = (devip->nr_zones - 1) / 2;
5460                 else
5461                         devip->max_open = sdeb_zbc_max_open;
5462         }
5463
5464         devip->zstate = kcalloc(devip->nr_zones,
5465                                 sizeof(struct sdeb_zone_state), GFP_KERNEL);
5466         if (!devip->zstate)
5467                 return -ENOMEM;
5468
5469         for (i = 0; i < devip->nr_zones; i++) {
5470                 zsp = &devip->zstate[i];
5471
5472                 zsp->z_start = zstart;
5473
5474                 if (i < devip->nr_conv_zones) {
5475                         zsp->z_type = ZBC_ZTYPE_CNV;
5476                         zsp->z_cond = ZBC_NOT_WRITE_POINTER;
5477                         zsp->z_wp = (sector_t)-1;
5478                         zsp->z_size =
5479                                 min_t(u64, devip->zsize, capacity - zstart);
5480                 } else if ((zstart & (devip->zsize - 1)) == 0) {
5481                         if (devip->zoned)
5482                                 zsp->z_type = ZBC_ZTYPE_SWR;
5483                         else
5484                                 zsp->z_type = ZBC_ZTYPE_SWP;
5485                         zsp->z_cond = ZC1_EMPTY;
5486                         zsp->z_wp = zsp->z_start;
5487                         zsp->z_size =
5488                                 min_t(u64, devip->zcap, capacity - zstart);
5489                 } else {
5490                         zsp->z_type = ZBC_ZTYPE_GAP;
5491                         zsp->z_cond = ZBC_NOT_WRITE_POINTER;
5492                         zsp->z_wp = (sector_t)-1;
5493                         zsp->z_size = min_t(u64, devip->zsize - devip->zcap,
5494                                             capacity - zstart);
5495                 }
5496
5497                 WARN_ON_ONCE((int)zsp->z_size <= 0);
5498                 zstart += zsp->z_size;
5499         }
5500
5501         return 0;
5502 }
5503
5504 static struct sdebug_dev_info *sdebug_device_create(
5505                         struct sdebug_host_info *sdbg_host, gfp_t flags)
5506 {
5507         struct sdebug_dev_info *devip;
5508
5509         devip = kzalloc(sizeof(*devip), flags);
5510         if (devip) {
5511                 if (sdebug_uuid_ctl == 1)
5512                         uuid_gen(&devip->lu_name);
5513                 else if (sdebug_uuid_ctl == 2) {
5514                         if (got_shared_uuid)
5515                                 devip->lu_name = shared_uuid;
5516                         else {
5517                                 uuid_gen(&shared_uuid);
5518                                 got_shared_uuid = true;
5519                                 devip->lu_name = shared_uuid;
5520                         }
5521                 }
5522                 devip->sdbg_host = sdbg_host;
5523                 if (sdeb_zbc_in_use) {
5524                         devip->zoned = sdeb_zbc_model == BLK_ZONED_HM;
5525                         if (sdebug_device_create_zones(devip)) {
5526                                 kfree(devip);
5527                                 return NULL;
5528                         }
5529                 } else {
5530                         devip->zoned = false;
5531                 }
5532                 devip->create_ts = ktime_get_boottime();
5533                 atomic_set(&devip->stopped, (sdeb_tur_ms_to_ready > 0 ? 2 : 0));
5534                 spin_lock_init(&devip->list_lock);
5535                 INIT_LIST_HEAD(&devip->inject_err_list);
5536                 list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
5537         }
5538         return devip;
5539 }
5540
5541 static struct sdebug_dev_info *find_build_dev_info(struct scsi_device *sdev)
5542 {
5543         struct sdebug_host_info *sdbg_host;
5544         struct sdebug_dev_info *open_devip = NULL;
5545         struct sdebug_dev_info *devip;
5546
5547         sdbg_host = shost_to_sdebug_host(sdev->host);
5548
5549         list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5550                 if ((devip->used) && (devip->channel == sdev->channel) &&
5551                     (devip->target == sdev->id) &&
5552                     (devip->lun == sdev->lun))
5553                         return devip;
5554                 else {
5555                         if ((!devip->used) && (!open_devip))
5556                                 open_devip = devip;
5557                 }
5558         }
5559         if (!open_devip) { /* try and make a new one */
5560                 open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
5561                 if (!open_devip) {
5562                         pr_err("out of memory at line %d\n", __LINE__);
5563                         return NULL;
5564                 }
5565         }
5566
5567         open_devip->channel = sdev->channel;
5568         open_devip->target = sdev->id;
5569         open_devip->lun = sdev->lun;
5570         open_devip->sdbg_host = sdbg_host;
5571         set_bit(SDEBUG_UA_POOCCUR, open_devip->uas_bm);
5572         open_devip->used = true;
5573         return open_devip;
5574 }
5575
5576 static int scsi_debug_slave_alloc(struct scsi_device *sdp)
5577 {
5578         if (sdebug_verbose)
5579                 pr_info("slave_alloc <%u %u %u %llu>\n",
5580                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5581
5582         return 0;
5583 }
5584
5585 static int scsi_debug_slave_configure(struct scsi_device *sdp)
5586 {
5587         struct sdebug_dev_info *devip =
5588                         (struct sdebug_dev_info *)sdp->hostdata;
5589         struct dentry *dentry;
5590
5591         if (sdebug_verbose)
5592                 pr_info("slave_configure <%u %u %u %llu>\n",
5593                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5594         if (sdp->host->max_cmd_len != SDEBUG_MAX_CMD_LEN)
5595                 sdp->host->max_cmd_len = SDEBUG_MAX_CMD_LEN;
5596         if (devip == NULL) {
5597                 devip = find_build_dev_info(sdp);
5598                 if (devip == NULL)
5599                         return 1;  /* no resources, will be marked offline */
5600         }
5601         sdp->hostdata = devip;
5602         if (sdebug_no_uld)
5603                 sdp->no_uld_attach = 1;
5604         config_cdb_len(sdp);
5605
5606         if (sdebug_allow_restart)
5607                 sdp->allow_restart = 1;
5608
5609         devip->debugfs_entry = debugfs_create_dir(dev_name(&sdp->sdev_dev),
5610                                 sdebug_debugfs_root);
5611         if (IS_ERR_OR_NULL(devip->debugfs_entry))
5612                 pr_info("%s: failed to create debugfs directory for device %s\n",
5613                         __func__, dev_name(&sdp->sdev_gendev));
5614
5615         dentry = debugfs_create_file("error", 0600, devip->debugfs_entry, sdp,
5616                                 &sdebug_error_fops);
5617         if (IS_ERR_OR_NULL(dentry))
5618                 pr_info("%s: failed to create error file for device %s\n",
5619                         __func__, dev_name(&sdp->sdev_gendev));
5620
5621         return 0;
5622 }
5623
5624 static void scsi_debug_slave_destroy(struct scsi_device *sdp)
5625 {
5626         struct sdebug_dev_info *devip =
5627                 (struct sdebug_dev_info *)sdp->hostdata;
5628         struct sdebug_err_inject *err;
5629
5630         if (sdebug_verbose)
5631                 pr_info("slave_destroy <%u %u %u %llu>\n",
5632                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5633
5634         if (!devip)
5635                 return;
5636
5637         spin_lock(&devip->list_lock);
5638         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
5639                 list_del_rcu(&err->list);
5640                 call_rcu(&err->rcu, sdebug_err_free);
5641         }
5642         spin_unlock(&devip->list_lock);
5643
5644         debugfs_remove(devip->debugfs_entry);
5645
5646         /* make this slot available for re-use */
5647         devip->used = false;
5648         sdp->hostdata = NULL;
5649 }
5650
5651 /* Returns true if we require the queued memory to be freed by the caller. */
5652 static bool stop_qc_helper(struct sdebug_defer *sd_dp,
5653                            enum sdeb_defer_type defer_t)
5654 {
5655         if (defer_t == SDEB_DEFER_HRT) {
5656                 int res = hrtimer_try_to_cancel(&sd_dp->hrt);
5657
5658                 switch (res) {
5659                 case 0: /* Not active, it must have already run */
5660                 case -1: /* -1 It's executing the CB */
5661                         return false;
5662                 case 1: /* Was active, we've now cancelled */
5663                 default:
5664                         return true;
5665                 }
5666         } else if (defer_t == SDEB_DEFER_WQ) {
5667                 /* Cancel if pending */
5668                 if (cancel_work_sync(&sd_dp->ew.work))
5669                         return true;
5670                 /* Was not pending, so it must have run */
5671                 return false;
5672         } else if (defer_t == SDEB_DEFER_POLL) {
5673                 return true;
5674         }
5675
5676         return false;
5677 }
5678
5679
5680 static bool scsi_debug_stop_cmnd(struct scsi_cmnd *cmnd)
5681 {
5682         enum sdeb_defer_type l_defer_t;
5683         struct sdebug_defer *sd_dp;
5684         struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmnd);
5685         struct sdebug_queued_cmd *sqcp = TO_QUEUED_CMD(cmnd);
5686
5687         lockdep_assert_held(&sdsc->lock);
5688
5689         if (!sqcp)
5690                 return false;
5691         sd_dp = &sqcp->sd_dp;
5692         l_defer_t = READ_ONCE(sd_dp->defer_t);
5693         ASSIGN_QUEUED_CMD(cmnd, NULL);
5694
5695         if (stop_qc_helper(sd_dp, l_defer_t))
5696                 sdebug_free_queued_cmd(sqcp);
5697
5698         return true;
5699 }
5700
5701 /*
5702  * Called from scsi_debug_abort() only, which is for timed-out cmd.
5703  */
5704 static bool scsi_debug_abort_cmnd(struct scsi_cmnd *cmnd)
5705 {
5706         struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmnd);
5707         unsigned long flags;
5708         bool res;
5709
5710         spin_lock_irqsave(&sdsc->lock, flags);
5711         res = scsi_debug_stop_cmnd(cmnd);
5712         spin_unlock_irqrestore(&sdsc->lock, flags);
5713
5714         return res;
5715 }
5716
5717 /*
5718  * All we can do is set the cmnd as internally aborted and wait for it to
5719  * finish. We cannot call scsi_done() as normal completion path may do that.
5720  */
5721 static bool sdebug_stop_cmnd(struct request *rq, void *data)
5722 {
5723         scsi_debug_abort_cmnd(blk_mq_rq_to_pdu(rq));
5724
5725         return true;
5726 }
5727
5728 /* Deletes (stops) timers or work queues of all queued commands */
5729 static void stop_all_queued(void)
5730 {
5731         struct sdebug_host_info *sdhp;
5732
5733         mutex_lock(&sdebug_host_list_mutex);
5734         list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
5735                 struct Scsi_Host *shost = sdhp->shost;
5736
5737                 blk_mq_tagset_busy_iter(&shost->tag_set, sdebug_stop_cmnd, NULL);
5738         }
5739         mutex_unlock(&sdebug_host_list_mutex);
5740 }
5741
5742 static int sdebug_fail_abort(struct scsi_cmnd *cmnd)
5743 {
5744         struct scsi_device *sdp = cmnd->device;
5745         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
5746         struct sdebug_err_inject *err;
5747         unsigned char *cmd = cmnd->cmnd;
5748         int ret = 0;
5749
5750         if (devip == NULL)
5751                 return 0;
5752
5753         rcu_read_lock();
5754         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
5755                 if (err->type == ERR_ABORT_CMD_FAILED &&
5756                     (err->cmd == cmd[0] || err->cmd == 0xff)) {
5757                         ret = !!err->cnt;
5758                         if (err->cnt < 0)
5759                                 err->cnt++;
5760
5761                         rcu_read_unlock();
5762                         return ret;
5763                 }
5764         }
5765         rcu_read_unlock();
5766
5767         return 0;
5768 }
5769
5770 static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
5771 {
5772         bool ok = scsi_debug_abort_cmnd(SCpnt);
5773         u8 *cmd = SCpnt->cmnd;
5774         u8 opcode = cmd[0];
5775
5776         ++num_aborts;
5777
5778         if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5779                 sdev_printk(KERN_INFO, SCpnt->device,
5780                             "%s: command%s found\n", __func__,
5781                             ok ? "" : " not");
5782
5783         if (sdebug_fail_abort(SCpnt)) {
5784                 scmd_printk(KERN_INFO, SCpnt, "fail abort command 0x%x\n",
5785                             opcode);
5786                 return FAILED;
5787         }
5788
5789         return SUCCESS;
5790 }
5791
5792 static bool scsi_debug_stop_all_queued_iter(struct request *rq, void *data)
5793 {
5794         struct scsi_device *sdp = data;
5795         struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq);
5796
5797         if (scmd->device == sdp)
5798                 scsi_debug_abort_cmnd(scmd);
5799
5800         return true;
5801 }
5802
5803 /* Deletes (stops) timers or work queues of all queued commands per sdev */
5804 static void scsi_debug_stop_all_queued(struct scsi_device *sdp)
5805 {
5806         struct Scsi_Host *shost = sdp->host;
5807
5808         blk_mq_tagset_busy_iter(&shost->tag_set,
5809                                 scsi_debug_stop_all_queued_iter, sdp);
5810 }
5811
5812 static int sdebug_fail_lun_reset(struct scsi_cmnd *cmnd)
5813 {
5814         struct scsi_device *sdp = cmnd->device;
5815         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
5816         struct sdebug_err_inject *err;
5817         unsigned char *cmd = cmnd->cmnd;
5818         int ret = 0;
5819
5820         if (devip == NULL)
5821                 return 0;
5822
5823         rcu_read_lock();
5824         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
5825                 if (err->type == ERR_LUN_RESET_FAILED &&
5826                     (err->cmd == cmd[0] || err->cmd == 0xff)) {
5827                         ret = !!err->cnt;
5828                         if (err->cnt < 0)
5829                                 err->cnt++;
5830
5831                         rcu_read_unlock();
5832                         return ret;
5833                 }
5834         }
5835         rcu_read_unlock();
5836
5837         return 0;
5838 }
5839
5840 static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
5841 {
5842         struct scsi_device *sdp = SCpnt->device;
5843         struct sdebug_dev_info *devip = sdp->hostdata;
5844         u8 *cmd = SCpnt->cmnd;
5845         u8 opcode = cmd[0];
5846
5847         ++num_dev_resets;
5848
5849         if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5850                 sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
5851
5852         scsi_debug_stop_all_queued(sdp);
5853         if (devip)
5854                 set_bit(SDEBUG_UA_POR, devip->uas_bm);
5855
5856         if (sdebug_fail_lun_reset(SCpnt)) {
5857                 scmd_printk(KERN_INFO, SCpnt, "fail lun reset 0x%x\n", opcode);
5858                 return FAILED;
5859         }
5860
5861         return SUCCESS;
5862 }
5863
5864 static int sdebug_fail_target_reset(struct scsi_cmnd *cmnd)
5865 {
5866         struct scsi_target *starget = scsi_target(cmnd->device);
5867         struct sdebug_target_info *targetip =
5868                 (struct sdebug_target_info *)starget->hostdata;
5869
5870         if (targetip)
5871                 return targetip->reset_fail;
5872
5873         return 0;
5874 }
5875
5876 static int scsi_debug_target_reset(struct scsi_cmnd *SCpnt)
5877 {
5878         struct scsi_device *sdp = SCpnt->device;
5879         struct sdebug_host_info *sdbg_host = shost_to_sdebug_host(sdp->host);
5880         struct sdebug_dev_info *devip;
5881         u8 *cmd = SCpnt->cmnd;
5882         u8 opcode = cmd[0];
5883         int k = 0;
5884
5885         ++num_target_resets;
5886         if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5887                 sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
5888
5889         list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5890                 if (devip->target == sdp->id) {
5891                         set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5892                         ++k;
5893                 }
5894         }
5895
5896         if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
5897                 sdev_printk(KERN_INFO, sdp,
5898                             "%s: %d device(s) found in target\n", __func__, k);
5899
5900         if (sdebug_fail_target_reset(SCpnt)) {
5901                 scmd_printk(KERN_INFO, SCpnt, "fail target reset 0x%x\n",
5902                             opcode);
5903                 return FAILED;
5904         }
5905
5906         return SUCCESS;
5907 }
5908
5909 static int scsi_debug_bus_reset(struct scsi_cmnd *SCpnt)
5910 {
5911         struct scsi_device *sdp = SCpnt->device;
5912         struct sdebug_host_info *sdbg_host = shost_to_sdebug_host(sdp->host);
5913         struct sdebug_dev_info *devip;
5914         int k = 0;
5915
5916         ++num_bus_resets;
5917
5918         if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5919                 sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
5920
5921         list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5922                 set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5923                 ++k;
5924         }
5925
5926         if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
5927                 sdev_printk(KERN_INFO, sdp,
5928                             "%s: %d device(s) found in host\n", __func__, k);
5929         return SUCCESS;
5930 }
5931
5932 static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt)
5933 {
5934         struct sdebug_host_info *sdbg_host;
5935         struct sdebug_dev_info *devip;
5936         int k = 0;
5937
5938         ++num_host_resets;
5939         if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
5940                 sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
5941         mutex_lock(&sdebug_host_list_mutex);
5942         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
5943                 list_for_each_entry(devip, &sdbg_host->dev_info_list,
5944                                     dev_list) {
5945                         set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
5946                         ++k;
5947                 }
5948         }
5949         mutex_unlock(&sdebug_host_list_mutex);
5950         stop_all_queued();
5951         if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
5952                 sdev_printk(KERN_INFO, SCpnt->device,
5953                             "%s: %d device(s) found\n", __func__, k);
5954         return SUCCESS;
5955 }
5956
5957 static void sdebug_build_parts(unsigned char *ramp, unsigned long store_size)
5958 {
5959         struct msdos_partition *pp;
5960         int starts[SDEBUG_MAX_PARTS + 2], max_part_secs;
5961         int sectors_per_part, num_sectors, k;
5962         int heads_by_sects, start_sec, end_sec;
5963
5964         /* assume partition table already zeroed */
5965         if ((sdebug_num_parts < 1) || (store_size < 1048576))
5966                 return;
5967         if (sdebug_num_parts > SDEBUG_MAX_PARTS) {
5968                 sdebug_num_parts = SDEBUG_MAX_PARTS;
5969                 pr_warn("reducing partitions to %d\n", SDEBUG_MAX_PARTS);
5970         }
5971         num_sectors = (int)get_sdebug_capacity();
5972         sectors_per_part = (num_sectors - sdebug_sectors_per)
5973                            / sdebug_num_parts;
5974         heads_by_sects = sdebug_heads * sdebug_sectors_per;
5975         starts[0] = sdebug_sectors_per;
5976         max_part_secs = sectors_per_part;
5977         for (k = 1; k < sdebug_num_parts; ++k) {
5978                 starts[k] = ((k * sectors_per_part) / heads_by_sects)
5979                             * heads_by_sects;
5980                 if (starts[k] - starts[k - 1] < max_part_secs)
5981                         max_part_secs = starts[k] - starts[k - 1];
5982         }
5983         starts[sdebug_num_parts] = num_sectors;
5984         starts[sdebug_num_parts + 1] = 0;
5985
5986         ramp[510] = 0x55;       /* magic partition markings */
5987         ramp[511] = 0xAA;
5988         pp = (struct msdos_partition *)(ramp + 0x1be);
5989         for (k = 0; starts[k + 1]; ++k, ++pp) {
5990                 start_sec = starts[k];
5991                 end_sec = starts[k] + max_part_secs - 1;
5992                 pp->boot_ind = 0;
5993
5994                 pp->cyl = start_sec / heads_by_sects;
5995                 pp->head = (start_sec - (pp->cyl * heads_by_sects))
5996                            / sdebug_sectors_per;
5997                 pp->sector = (start_sec % sdebug_sectors_per) + 1;
5998
5999                 pp->end_cyl = end_sec / heads_by_sects;
6000                 pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
6001                                / sdebug_sectors_per;
6002                 pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
6003
6004                 pp->start_sect = cpu_to_le32(start_sec);
6005                 pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
6006                 pp->sys_ind = 0x83;     /* plain Linux partition */
6007         }
6008 }
6009
6010 static void block_unblock_all_queues(bool block)
6011 {
6012         struct sdebug_host_info *sdhp;
6013
6014         lockdep_assert_held(&sdebug_host_list_mutex);
6015
6016         list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6017                 struct Scsi_Host *shost = sdhp->shost;
6018
6019                 if (block)
6020                         scsi_block_requests(shost);
6021                 else
6022                         scsi_unblock_requests(shost);
6023         }
6024 }
6025
6026 /* Adjust (by rounding down) the sdebug_cmnd_count so abs(every_nth)-1
6027  * commands will be processed normally before triggers occur.
6028  */
6029 static void tweak_cmnd_count(void)
6030 {
6031         int count, modulo;
6032
6033         modulo = abs(sdebug_every_nth);
6034         if (modulo < 2)
6035                 return;
6036
6037         mutex_lock(&sdebug_host_list_mutex);
6038         block_unblock_all_queues(true);
6039         count = atomic_read(&sdebug_cmnd_count);
6040         atomic_set(&sdebug_cmnd_count, (count / modulo) * modulo);
6041         block_unblock_all_queues(false);
6042         mutex_unlock(&sdebug_host_list_mutex);
6043 }
6044
6045 static void clear_queue_stats(void)
6046 {
6047         atomic_set(&sdebug_cmnd_count, 0);
6048         atomic_set(&sdebug_completions, 0);
6049         atomic_set(&sdebug_miss_cpus, 0);
6050         atomic_set(&sdebug_a_tsf, 0);
6051 }
6052
6053 static bool inject_on_this_cmd(void)
6054 {
6055         if (sdebug_every_nth == 0)
6056                 return false;
6057         return (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) == 0;
6058 }
6059
6060 #define INCLUSIVE_TIMING_MAX_NS 1000000         /* 1 millisecond */
6061
6062
6063 void sdebug_free_queued_cmd(struct sdebug_queued_cmd *sqcp)
6064 {
6065         if (sqcp)
6066                 kmem_cache_free(queued_cmd_cache, sqcp);
6067 }
6068
6069 static struct sdebug_queued_cmd *sdebug_alloc_queued_cmd(struct scsi_cmnd *scmd)
6070 {
6071         struct sdebug_queued_cmd *sqcp;
6072         struct sdebug_defer *sd_dp;
6073
6074         sqcp = kmem_cache_zalloc(queued_cmd_cache, GFP_ATOMIC);
6075         if (!sqcp)
6076                 return NULL;
6077
6078         sd_dp = &sqcp->sd_dp;
6079
6080         hrtimer_init(&sd_dp->hrt, CLOCK_MONOTONIC, HRTIMER_MODE_REL_PINNED);
6081         sd_dp->hrt.function = sdebug_q_cmd_hrt_complete;
6082         INIT_WORK(&sd_dp->ew.work, sdebug_q_cmd_wq_complete);
6083
6084         sqcp->scmd = scmd;
6085
6086         return sqcp;
6087 }
6088
6089 /* Complete the processing of the thread that queued a SCSI command to this
6090  * driver. It either completes the command by calling cmnd_done() or
6091  * schedules a hr timer or work queue then returns 0. Returns
6092  * SCSI_MLQUEUE_HOST_BUSY if temporarily out of resources.
6093  */
6094 static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
6095                          int scsi_result,
6096                          int (*pfp)(struct scsi_cmnd *,
6097                                     struct sdebug_dev_info *),
6098                          int delta_jiff, int ndelay)
6099 {
6100         struct request *rq = scsi_cmd_to_rq(cmnd);
6101         bool polled = rq->cmd_flags & REQ_POLLED;
6102         struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmnd);
6103         unsigned long flags;
6104         u64 ns_from_boot = 0;
6105         struct sdebug_queued_cmd *sqcp;
6106         struct scsi_device *sdp;
6107         struct sdebug_defer *sd_dp;
6108
6109         if (unlikely(devip == NULL)) {
6110                 if (scsi_result == 0)
6111                         scsi_result = DID_NO_CONNECT << 16;
6112                 goto respond_in_thread;
6113         }
6114         sdp = cmnd->device;
6115
6116         if (delta_jiff == 0)
6117                 goto respond_in_thread;
6118
6119
6120         if (unlikely(sdebug_every_nth && (SDEBUG_OPT_RARE_TSF & sdebug_opts) &&
6121                      (scsi_result == 0))) {
6122                 int num_in_q = scsi_device_busy(sdp);
6123                 int qdepth = cmnd->device->queue_depth;
6124
6125                 if ((num_in_q == qdepth) &&
6126                     (atomic_inc_return(&sdebug_a_tsf) >=
6127                      abs(sdebug_every_nth))) {
6128                         atomic_set(&sdebug_a_tsf, 0);
6129                         scsi_result = device_qfull_result;
6130
6131                         if (unlikely(SDEBUG_OPT_Q_NOISE & sdebug_opts))
6132                                 sdev_printk(KERN_INFO, sdp, "%s: num_in_q=%d +1, <inject> status: TASK SET FULL\n",
6133                                             __func__, num_in_q);
6134                 }
6135         }
6136
6137         sqcp = sdebug_alloc_queued_cmd(cmnd);
6138         if (!sqcp) {
6139                 pr_err("%s no alloc\n", __func__);
6140                 return SCSI_MLQUEUE_HOST_BUSY;
6141         }
6142         sd_dp = &sqcp->sd_dp;
6143
6144         if (polled)
6145                 ns_from_boot = ktime_get_boottime_ns();
6146
6147         /* one of the resp_*() response functions is called here */
6148         cmnd->result = pfp ? pfp(cmnd, devip) : 0;
6149         if (cmnd->result & SDEG_RES_IMMED_MASK) {
6150                 cmnd->result &= ~SDEG_RES_IMMED_MASK;
6151                 delta_jiff = ndelay = 0;
6152         }
6153         if (cmnd->result == 0 && scsi_result != 0)
6154                 cmnd->result = scsi_result;
6155         if (cmnd->result == 0 && unlikely(sdebug_opts & SDEBUG_OPT_TRANSPORT_ERR)) {
6156                 if (atomic_read(&sdeb_inject_pending)) {
6157                         mk_sense_buffer(cmnd, ABORTED_COMMAND, TRANSPORT_PROBLEM, ACK_NAK_TO);
6158                         atomic_set(&sdeb_inject_pending, 0);
6159                         cmnd->result = check_condition_result;
6160                 }
6161         }
6162
6163         if (unlikely(sdebug_verbose && cmnd->result))
6164                 sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
6165                             __func__, cmnd->result);
6166
6167         if (delta_jiff > 0 || ndelay > 0) {
6168                 ktime_t kt;
6169
6170                 if (delta_jiff > 0) {
6171                         u64 ns = jiffies_to_nsecs(delta_jiff);
6172
6173                         if (sdebug_random && ns < U32_MAX) {
6174                                 ns = get_random_u32_below((u32)ns);
6175                         } else if (sdebug_random) {
6176                                 ns >>= 12;      /* scale to 4 usec precision */
6177                                 if (ns < U32_MAX)       /* over 4 hours max */
6178                                         ns = get_random_u32_below((u32)ns);
6179                                 ns <<= 12;
6180                         }
6181                         kt = ns_to_ktime(ns);
6182                 } else {        /* ndelay has a 4.2 second max */
6183                         kt = sdebug_random ? get_random_u32_below((u32)ndelay) :
6184                                              (u32)ndelay;
6185                         if (ndelay < INCLUSIVE_TIMING_MAX_NS) {
6186                                 u64 d = ktime_get_boottime_ns() - ns_from_boot;
6187
6188                                 if (kt <= d) {  /* elapsed duration >= kt */
6189                                         /* call scsi_done() from this thread */
6190                                         sdebug_free_queued_cmd(sqcp);
6191                                         scsi_done(cmnd);
6192                                         return 0;
6193                                 }
6194                                 /* otherwise reduce kt by elapsed time */
6195                                 kt -= d;
6196                         }
6197                 }
6198                 if (sdebug_statistics)
6199                         sd_dp->issuing_cpu = raw_smp_processor_id();
6200                 if (polled) {
6201                         spin_lock_irqsave(&sdsc->lock, flags);
6202                         sd_dp->cmpl_ts = ktime_add(ns_to_ktime(ns_from_boot), kt);
6203                         ASSIGN_QUEUED_CMD(cmnd, sqcp);
6204                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_POLL);
6205                         spin_unlock_irqrestore(&sdsc->lock, flags);
6206                 } else {
6207                         /* schedule the invocation of scsi_done() for a later time */
6208                         spin_lock_irqsave(&sdsc->lock, flags);
6209                         ASSIGN_QUEUED_CMD(cmnd, sqcp);
6210                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_HRT);
6211                         hrtimer_start(&sd_dp->hrt, kt, HRTIMER_MODE_REL_PINNED);
6212                         /*
6213                          * The completion handler will try to grab sqcp->lock,
6214                          * so there is no chance that the completion handler
6215                          * will call scsi_done() until we release the lock
6216                          * here (so ok to keep referencing sdsc).
6217                          */
6218                         spin_unlock_irqrestore(&sdsc->lock, flags);
6219                 }
6220         } else {        /* jdelay < 0, use work queue */
6221                 if (unlikely((sdebug_opts & SDEBUG_OPT_CMD_ABORT) &&
6222                              atomic_read(&sdeb_inject_pending))) {
6223                         sd_dp->aborted = true;
6224                         atomic_set(&sdeb_inject_pending, 0);
6225                         sdev_printk(KERN_INFO, sdp, "abort request tag=%#x\n",
6226                                     blk_mq_unique_tag_to_tag(get_tag(cmnd)));
6227                 }
6228
6229                 if (sdebug_statistics)
6230                         sd_dp->issuing_cpu = raw_smp_processor_id();
6231                 if (polled) {
6232                         spin_lock_irqsave(&sdsc->lock, flags);
6233                         ASSIGN_QUEUED_CMD(cmnd, sqcp);
6234                         sd_dp->cmpl_ts = ns_to_ktime(ns_from_boot);
6235                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_POLL);
6236                         spin_unlock_irqrestore(&sdsc->lock, flags);
6237                 } else {
6238                         spin_lock_irqsave(&sdsc->lock, flags);
6239                         ASSIGN_QUEUED_CMD(cmnd, sqcp);
6240                         WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_WQ);
6241                         schedule_work(&sd_dp->ew.work);
6242                         spin_unlock_irqrestore(&sdsc->lock, flags);
6243                 }
6244         }
6245
6246         return 0;
6247
6248 respond_in_thread:      /* call back to mid-layer using invocation thread */
6249         cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
6250         cmnd->result &= ~SDEG_RES_IMMED_MASK;
6251         if (cmnd->result == 0 && scsi_result != 0)
6252                 cmnd->result = scsi_result;
6253         scsi_done(cmnd);
6254         return 0;
6255 }
6256
6257 /* Note: The following macros create attribute files in the
6258    /sys/module/scsi_debug/parameters directory. Unfortunately this
6259    driver is unaware of a change and cannot trigger auxiliary actions
6260    as it can when the corresponding attribute in the
6261    /sys/bus/pseudo/drivers/scsi_debug directory is changed.
6262  */
6263 module_param_named(add_host, sdebug_add_host, int, S_IRUGO | S_IWUSR);
6264 module_param_named(ato, sdebug_ato, int, S_IRUGO);
6265 module_param_named(cdb_len, sdebug_cdb_len, int, 0644);
6266 module_param_named(clustering, sdebug_clustering, bool, S_IRUGO | S_IWUSR);
6267 module_param_named(delay, sdebug_jdelay, int, S_IRUGO | S_IWUSR);
6268 module_param_named(dev_size_mb, sdebug_dev_size_mb, int, S_IRUGO);
6269 module_param_named(dif, sdebug_dif, int, S_IRUGO);
6270 module_param_named(dix, sdebug_dix, int, S_IRUGO);
6271 module_param_named(dsense, sdebug_dsense, int, S_IRUGO | S_IWUSR);
6272 module_param_named(every_nth, sdebug_every_nth, int, S_IRUGO | S_IWUSR);
6273 module_param_named(fake_rw, sdebug_fake_rw, int, S_IRUGO | S_IWUSR);
6274 module_param_named(guard, sdebug_guard, uint, S_IRUGO);
6275 module_param_named(host_lock, sdebug_host_lock, bool, S_IRUGO | S_IWUSR);
6276 module_param_named(host_max_queue, sdebug_host_max_queue, int, S_IRUGO);
6277 module_param_string(inq_product, sdebug_inq_product_id,
6278                     sizeof(sdebug_inq_product_id), S_IRUGO | S_IWUSR);
6279 module_param_string(inq_rev, sdebug_inq_product_rev,
6280                     sizeof(sdebug_inq_product_rev), S_IRUGO | S_IWUSR);
6281 module_param_string(inq_vendor, sdebug_inq_vendor_id,
6282                     sizeof(sdebug_inq_vendor_id), S_IRUGO | S_IWUSR);
6283 module_param_named(lbprz, sdebug_lbprz, int, S_IRUGO);
6284 module_param_named(lbpu, sdebug_lbpu, int, S_IRUGO);
6285 module_param_named(lbpws, sdebug_lbpws, int, S_IRUGO);
6286 module_param_named(lbpws10, sdebug_lbpws10, int, S_IRUGO);
6287 module_param_named(lowest_aligned, sdebug_lowest_aligned, int, S_IRUGO);
6288 module_param_named(lun_format, sdebug_lun_am_i, int, S_IRUGO | S_IWUSR);
6289 module_param_named(max_luns, sdebug_max_luns, int, S_IRUGO | S_IWUSR);
6290 module_param_named(max_queue, sdebug_max_queue, int, S_IRUGO | S_IWUSR);
6291 module_param_named(medium_error_count, sdebug_medium_error_count, int,
6292                    S_IRUGO | S_IWUSR);
6293 module_param_named(medium_error_start, sdebug_medium_error_start, int,
6294                    S_IRUGO | S_IWUSR);
6295 module_param_named(ndelay, sdebug_ndelay, int, S_IRUGO | S_IWUSR);
6296 module_param_named(no_lun_0, sdebug_no_lun_0, int, S_IRUGO | S_IWUSR);
6297 module_param_named(no_rwlock, sdebug_no_rwlock, bool, S_IRUGO | S_IWUSR);
6298 module_param_named(no_uld, sdebug_no_uld, int, S_IRUGO);
6299 module_param_named(num_parts, sdebug_num_parts, int, S_IRUGO);
6300 module_param_named(num_tgts, sdebug_num_tgts, int, S_IRUGO | S_IWUSR);
6301 module_param_named(opt_blks, sdebug_opt_blks, int, S_IRUGO);
6302 module_param_named(opt_xferlen_exp, sdebug_opt_xferlen_exp, int, S_IRUGO);
6303 module_param_named(opts, sdebug_opts, int, S_IRUGO | S_IWUSR);
6304 module_param_named(per_host_store, sdebug_per_host_store, bool,
6305                    S_IRUGO | S_IWUSR);
6306 module_param_named(physblk_exp, sdebug_physblk_exp, int, S_IRUGO);
6307 module_param_named(ptype, sdebug_ptype, int, S_IRUGO | S_IWUSR);
6308 module_param_named(random, sdebug_random, bool, S_IRUGO | S_IWUSR);
6309 module_param_named(removable, sdebug_removable, bool, S_IRUGO | S_IWUSR);
6310 module_param_named(scsi_level, sdebug_scsi_level, int, S_IRUGO);
6311 module_param_named(sector_size, sdebug_sector_size, int, S_IRUGO);
6312 module_param_named(statistics, sdebug_statistics, bool, S_IRUGO | S_IWUSR);
6313 module_param_named(strict, sdebug_strict, bool, S_IRUGO | S_IWUSR);
6314 module_param_named(submit_queues, submit_queues, int, S_IRUGO);
6315 module_param_named(poll_queues, poll_queues, int, S_IRUGO);
6316 module_param_named(tur_ms_to_ready, sdeb_tur_ms_to_ready, int, S_IRUGO);
6317 module_param_named(unmap_alignment, sdebug_unmap_alignment, int, S_IRUGO);
6318 module_param_named(unmap_granularity, sdebug_unmap_granularity, int, S_IRUGO);
6319 module_param_named(unmap_max_blocks, sdebug_unmap_max_blocks, int, S_IRUGO);
6320 module_param_named(unmap_max_desc, sdebug_unmap_max_desc, int, S_IRUGO);
6321 module_param_named(uuid_ctl, sdebug_uuid_ctl, int, S_IRUGO);
6322 module_param_named(virtual_gb, sdebug_virtual_gb, int, S_IRUGO | S_IWUSR);
6323 module_param_named(vpd_use_hostno, sdebug_vpd_use_hostno, int,
6324                    S_IRUGO | S_IWUSR);
6325 module_param_named(wp, sdebug_wp, bool, S_IRUGO | S_IWUSR);
6326 module_param_named(write_same_length, sdebug_write_same_length, int,
6327                    S_IRUGO | S_IWUSR);
6328 module_param_named(zbc, sdeb_zbc_model_s, charp, S_IRUGO);
6329 module_param_named(zone_cap_mb, sdeb_zbc_zone_cap_mb, int, S_IRUGO);
6330 module_param_named(zone_max_open, sdeb_zbc_max_open, int, S_IRUGO);
6331 module_param_named(zone_nr_conv, sdeb_zbc_nr_conv, int, S_IRUGO);
6332 module_param_named(zone_size_mb, sdeb_zbc_zone_size_mb, int, S_IRUGO);
6333 module_param_named(allow_restart, sdebug_allow_restart, bool, S_IRUGO | S_IWUSR);
6334
6335 MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
6336 MODULE_DESCRIPTION("SCSI debug adapter driver");
6337 MODULE_LICENSE("GPL");
6338 MODULE_VERSION(SDEBUG_VERSION);
6339
6340 MODULE_PARM_DESC(add_host, "add n hosts, in sysfs if negative remove host(s) (def=1)");
6341 MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
6342 MODULE_PARM_DESC(cdb_len, "suggest CDB lengths to drivers (def=10)");
6343 MODULE_PARM_DESC(clustering, "when set enables larger transfers (def=0)");
6344 MODULE_PARM_DESC(delay, "response delay (def=1 jiffy); 0:imm, -1,-2:tiny");
6345 MODULE_PARM_DESC(dev_size_mb, "size in MiB of ram shared by devs(def=8)");
6346 MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
6347 MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
6348 MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
6349 MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
6350 MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
6351 MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
6352 MODULE_PARM_DESC(host_lock, "host_lock is ignored (def=0)");
6353 MODULE_PARM_DESC(host_max_queue,
6354                  "host max # of queued cmds (0 to max(def) [max_queue fixed equal for !0])");
6355 MODULE_PARM_DESC(inq_product, "SCSI INQUIRY product string (def=\"scsi_debug\")");
6356 MODULE_PARM_DESC(inq_rev, "SCSI INQUIRY revision string (def=\""
6357                  SDEBUG_VERSION "\")");
6358 MODULE_PARM_DESC(inq_vendor, "SCSI INQUIRY vendor string (def=\"Linux\")");
6359 MODULE_PARM_DESC(lbprz,
6360                  "on read unmapped LBs return 0 when 1 (def), return 0xff when 2");
6361 MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
6362 MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
6363 MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
6364 MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
6365 MODULE_PARM_DESC(lun_format, "LUN format: 0->peripheral (def); 1 --> flat address method");
6366 MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
6367 MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
6368 MODULE_PARM_DESC(medium_error_count, "count of sectors to return follow on MEDIUM error");
6369 MODULE_PARM_DESC(medium_error_start, "starting sector number to return MEDIUM error");
6370 MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
6371 MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
6372 MODULE_PARM_DESC(no_rwlock, "don't protect user data reads+writes (def=0)");
6373 MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
6374 MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
6375 MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
6376 MODULE_PARM_DESC(opt_blks, "optimal transfer length in blocks (def=1024)");
6377 MODULE_PARM_DESC(opt_xferlen_exp, "optimal transfer length granularity exponent (def=physblk_exp)");
6378 MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
6379 MODULE_PARM_DESC(per_host_store, "If set, next positive add_host will get new store (def=0)");
6380 MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
6381 MODULE_PARM_DESC(poll_queues, "support for iouring iopoll queues (1 to max(submit_queues - 1))");
6382 MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
6383 MODULE_PARM_DESC(random, "If set, uniformly randomize command duration between 0 and delay_in_ns");
6384 MODULE_PARM_DESC(removable, "claim to have removable media (def=0)");
6385 MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=7[SPC-5])");
6386 MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
6387 MODULE_PARM_DESC(statistics, "collect statistics on commands, queues (def=0)");
6388 MODULE_PARM_DESC(strict, "stricter checks: reserved field in cdb (def=0)");
6389 MODULE_PARM_DESC(submit_queues, "support for block multi-queue (def=1)");
6390 MODULE_PARM_DESC(tur_ms_to_ready, "TEST UNIT READY millisecs before initial good status (def=0)");
6391 MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
6392 MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
6393 MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
6394 MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
6395 MODULE_PARM_DESC(uuid_ctl,
6396                  "1->use uuid for lu name, 0->don't, 2->all use same (def=0)");
6397 MODULE_PARM_DESC(virtual_gb, "virtual gigabyte (GiB) size (def=0 -> use dev_size_mb)");
6398 MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
6399 MODULE_PARM_DESC(wp, "Write Protect (def=0)");
6400 MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
6401 MODULE_PARM_DESC(zbc, "'none' [0]; 'aware' [1]; 'managed' [2] (def=0). Can have 'host-' prefix");
6402 MODULE_PARM_DESC(zone_cap_mb, "Zone capacity in MiB (def=zone size)");
6403 MODULE_PARM_DESC(zone_max_open, "Maximum number of open zones; [0] for no limit (def=auto)");
6404 MODULE_PARM_DESC(zone_nr_conv, "Number of conventional zones (def=1)");
6405 MODULE_PARM_DESC(zone_size_mb, "Zone size in MiB (def=auto)");
6406 MODULE_PARM_DESC(allow_restart, "Set scsi_device's allow_restart flag(def=0)");
6407
6408 #define SDEBUG_INFO_LEN 256
6409 static char sdebug_info[SDEBUG_INFO_LEN];
6410
6411 static const char *scsi_debug_info(struct Scsi_Host *shp)
6412 {
6413         int k;
6414
6415         k = scnprintf(sdebug_info, SDEBUG_INFO_LEN, "%s: version %s [%s]\n",
6416                       my_name, SDEBUG_VERSION, sdebug_version_date);
6417         if (k >= (SDEBUG_INFO_LEN - 1))
6418                 return sdebug_info;
6419         scnprintf(sdebug_info + k, SDEBUG_INFO_LEN - k,
6420                   "  dev_size_mb=%d, opts=0x%x, submit_queues=%d, %s=%d",
6421                   sdebug_dev_size_mb, sdebug_opts, submit_queues,
6422                   "statistics", (int)sdebug_statistics);
6423         return sdebug_info;
6424 }
6425
6426 /* 'echo <val> > /proc/scsi/scsi_debug/<host_id>' writes to opts */
6427 static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer,
6428                                  int length)
6429 {
6430         char arr[16];
6431         int opts;
6432         int minLen = length > 15 ? 15 : length;
6433
6434         if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
6435                 return -EACCES;
6436         memcpy(arr, buffer, minLen);
6437         arr[minLen] = '\0';
6438         if (1 != sscanf(arr, "%d", &opts))
6439                 return -EINVAL;
6440         sdebug_opts = opts;
6441         sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
6442         sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
6443         if (sdebug_every_nth != 0)
6444                 tweak_cmnd_count();
6445         return length;
6446 }
6447
6448 struct sdebug_submit_queue_data {
6449         int *first;
6450         int *last;
6451         int queue_num;
6452 };
6453
6454 static bool sdebug_submit_queue_iter(struct request *rq, void *opaque)
6455 {
6456         struct sdebug_submit_queue_data *data = opaque;
6457         u32 unique_tag = blk_mq_unique_tag(rq);
6458         u16 hwq = blk_mq_unique_tag_to_hwq(unique_tag);
6459         u16 tag = blk_mq_unique_tag_to_tag(unique_tag);
6460         int queue_num = data->queue_num;
6461
6462         if (hwq != queue_num)
6463                 return true;
6464
6465         /* Rely on iter'ing in ascending tag order */
6466         if (*data->first == -1)
6467                 *data->first = *data->last = tag;
6468         else
6469                 *data->last = tag;
6470
6471         return true;
6472 }
6473
6474 /* Output seen with 'cat /proc/scsi/scsi_debug/<host_id>'. It will be the
6475  * same for each scsi_debug host (if more than one). Some of the counters
6476  * output are not atomics so might be inaccurate in a busy system. */
6477 static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
6478 {
6479         struct sdebug_host_info *sdhp;
6480         int j;
6481
6482         seq_printf(m, "scsi_debug adapter driver, version %s [%s]\n",
6483                    SDEBUG_VERSION, sdebug_version_date);
6484         seq_printf(m, "num_tgts=%d, %ssize=%d MB, opts=0x%x, every_nth=%d\n",
6485                    sdebug_num_tgts, "shared (ram) ", sdebug_dev_size_mb,
6486                    sdebug_opts, sdebug_every_nth);
6487         seq_printf(m, "delay=%d, ndelay=%d, max_luns=%d, sector_size=%d %s\n",
6488                    sdebug_jdelay, sdebug_ndelay, sdebug_max_luns,
6489                    sdebug_sector_size, "bytes");
6490         seq_printf(m, "cylinders=%d, heads=%d, sectors=%d, command aborts=%d\n",
6491                    sdebug_cylinders_per, sdebug_heads, sdebug_sectors_per,
6492                    num_aborts);
6493         seq_printf(m, "RESETs: device=%d, target=%d, bus=%d, host=%d\n",
6494                    num_dev_resets, num_target_resets, num_bus_resets,
6495                    num_host_resets);
6496         seq_printf(m, "dix_reads=%d, dix_writes=%d, dif_errors=%d\n",
6497                    dix_reads, dix_writes, dif_errors);
6498         seq_printf(m, "usec_in_jiffy=%lu, statistics=%d\n", TICK_NSEC / 1000,
6499                    sdebug_statistics);
6500         seq_printf(m, "cmnd_count=%d, completions=%d, %s=%d, a_tsf=%d, mq_polls=%d\n",
6501                    atomic_read(&sdebug_cmnd_count),
6502                    atomic_read(&sdebug_completions),
6503                    "miss_cpus", atomic_read(&sdebug_miss_cpus),
6504                    atomic_read(&sdebug_a_tsf),
6505                    atomic_read(&sdeb_mq_poll_count));
6506
6507         seq_printf(m, "submit_queues=%d\n", submit_queues);
6508         for (j = 0; j < submit_queues; ++j) {
6509                 int f = -1, l = -1;
6510                 struct sdebug_submit_queue_data data = {
6511                         .queue_num = j,
6512                         .first = &f,
6513                         .last = &l,
6514                 };
6515                 seq_printf(m, "  queue %d:\n", j);
6516                 blk_mq_tagset_busy_iter(&host->tag_set, sdebug_submit_queue_iter,
6517                                         &data);
6518                 if (f >= 0) {
6519                         seq_printf(m, "    in_use_bm BUSY: %s: %d,%d\n",
6520                                    "first,last bits", f, l);
6521                 }
6522         }
6523
6524         seq_printf(m, "this host_no=%d\n", host->host_no);
6525         if (!xa_empty(per_store_ap)) {
6526                 bool niu;
6527                 int idx;
6528                 unsigned long l_idx;
6529                 struct sdeb_store_info *sip;
6530
6531                 seq_puts(m, "\nhost list:\n");
6532                 j = 0;
6533                 list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6534                         idx = sdhp->si_idx;
6535                         seq_printf(m, "  %d: host_no=%d, si_idx=%d\n", j,
6536                                    sdhp->shost->host_no, idx);
6537                         ++j;
6538                 }
6539                 seq_printf(m, "\nper_store array [most_recent_idx=%d]:\n",
6540                            sdeb_most_recent_idx);
6541                 j = 0;
6542                 xa_for_each(per_store_ap, l_idx, sip) {
6543                         niu = xa_get_mark(per_store_ap, l_idx,
6544                                           SDEB_XA_NOT_IN_USE);
6545                         idx = (int)l_idx;
6546                         seq_printf(m, "  %d: idx=%d%s\n", j, idx,
6547                                    (niu ? "  not_in_use" : ""));
6548                         ++j;
6549                 }
6550         }
6551         return 0;
6552 }
6553
6554 static ssize_t delay_show(struct device_driver *ddp, char *buf)
6555 {
6556         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_jdelay);
6557 }
6558 /* Returns -EBUSY if jdelay is being changed and commands are queued. The unit
6559  * of delay is jiffies.
6560  */
6561 static ssize_t delay_store(struct device_driver *ddp, const char *buf,
6562                            size_t count)
6563 {
6564         int jdelay, res;
6565
6566         if (count > 0 && sscanf(buf, "%d", &jdelay) == 1) {
6567                 res = count;
6568                 if (sdebug_jdelay != jdelay) {
6569                         struct sdebug_host_info *sdhp;
6570
6571                         mutex_lock(&sdebug_host_list_mutex);
6572                         block_unblock_all_queues(true);
6573
6574                         list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6575                                 struct Scsi_Host *shost = sdhp->shost;
6576
6577                                 if (scsi_host_busy(shost)) {
6578                                         res = -EBUSY;   /* queued commands */
6579                                         break;
6580                                 }
6581                         }
6582                         if (res > 0) {
6583                                 sdebug_jdelay = jdelay;
6584                                 sdebug_ndelay = 0;
6585                         }
6586                         block_unblock_all_queues(false);
6587                         mutex_unlock(&sdebug_host_list_mutex);
6588                 }
6589                 return res;
6590         }
6591         return -EINVAL;
6592 }
6593 static DRIVER_ATTR_RW(delay);
6594
6595 static ssize_t ndelay_show(struct device_driver *ddp, char *buf)
6596 {
6597         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ndelay);
6598 }
6599 /* Returns -EBUSY if ndelay is being changed and commands are queued */
6600 /* If > 0 and accepted then sdebug_jdelay is set to JDELAY_OVERRIDDEN */
6601 static ssize_t ndelay_store(struct device_driver *ddp, const char *buf,
6602                             size_t count)
6603 {
6604         int ndelay, res;
6605
6606         if ((count > 0) && (1 == sscanf(buf, "%d", &ndelay)) &&
6607             (ndelay >= 0) && (ndelay < (1000 * 1000 * 1000))) {
6608                 res = count;
6609                 if (sdebug_ndelay != ndelay) {
6610                         struct sdebug_host_info *sdhp;
6611
6612                         mutex_lock(&sdebug_host_list_mutex);
6613                         block_unblock_all_queues(true);
6614
6615                         list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6616                                 struct Scsi_Host *shost = sdhp->shost;
6617
6618                                 if (scsi_host_busy(shost)) {
6619                                         res = -EBUSY;   /* queued commands */
6620                                         break;
6621                                 }
6622                         }
6623
6624                         if (res > 0) {
6625                                 sdebug_ndelay = ndelay;
6626                                 sdebug_jdelay = ndelay  ? JDELAY_OVERRIDDEN
6627                                                         : DEF_JDELAY;
6628                         }
6629                         block_unblock_all_queues(false);
6630                         mutex_unlock(&sdebug_host_list_mutex);
6631                 }
6632                 return res;
6633         }
6634         return -EINVAL;
6635 }
6636 static DRIVER_ATTR_RW(ndelay);
6637
6638 static ssize_t opts_show(struct device_driver *ddp, char *buf)
6639 {
6640         return scnprintf(buf, PAGE_SIZE, "0x%x\n", sdebug_opts);
6641 }
6642
6643 static ssize_t opts_store(struct device_driver *ddp, const char *buf,
6644                           size_t count)
6645 {
6646         int opts;
6647         char work[20];
6648
6649         if (sscanf(buf, "%10s", work) == 1) {
6650                 if (strncasecmp(work, "0x", 2) == 0) {
6651                         if (kstrtoint(work + 2, 16, &opts) == 0)
6652                                 goto opts_done;
6653                 } else {
6654                         if (kstrtoint(work, 10, &opts) == 0)
6655                                 goto opts_done;
6656                 }
6657         }
6658         return -EINVAL;
6659 opts_done:
6660         sdebug_opts = opts;
6661         sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
6662         sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
6663         tweak_cmnd_count();
6664         return count;
6665 }
6666 static DRIVER_ATTR_RW(opts);
6667
6668 static ssize_t ptype_show(struct device_driver *ddp, char *buf)
6669 {
6670         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ptype);
6671 }
6672 static ssize_t ptype_store(struct device_driver *ddp, const char *buf,
6673                            size_t count)
6674 {
6675         int n;
6676
6677         /* Cannot change from or to TYPE_ZBC with sysfs */
6678         if (sdebug_ptype == TYPE_ZBC)
6679                 return -EINVAL;
6680
6681         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6682                 if (n == TYPE_ZBC)
6683                         return -EINVAL;
6684                 sdebug_ptype = n;
6685                 return count;
6686         }
6687         return -EINVAL;
6688 }
6689 static DRIVER_ATTR_RW(ptype);
6690
6691 static ssize_t dsense_show(struct device_driver *ddp, char *buf)
6692 {
6693         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dsense);
6694 }
6695 static ssize_t dsense_store(struct device_driver *ddp, const char *buf,
6696                             size_t count)
6697 {
6698         int n;
6699
6700         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6701                 sdebug_dsense = n;
6702                 return count;
6703         }
6704         return -EINVAL;
6705 }
6706 static DRIVER_ATTR_RW(dsense);
6707
6708 static ssize_t fake_rw_show(struct device_driver *ddp, char *buf)
6709 {
6710         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_fake_rw);
6711 }
6712 static ssize_t fake_rw_store(struct device_driver *ddp, const char *buf,
6713                              size_t count)
6714 {
6715         int n, idx;
6716
6717         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6718                 bool want_store = (n == 0);
6719                 struct sdebug_host_info *sdhp;
6720
6721                 n = (n > 0);
6722                 sdebug_fake_rw = (sdebug_fake_rw > 0);
6723                 if (sdebug_fake_rw == n)
6724                         return count;   /* not transitioning so do nothing */
6725
6726                 if (want_store) {       /* 1 --> 0 transition, set up store */
6727                         if (sdeb_first_idx < 0) {
6728                                 idx = sdebug_add_store();
6729                                 if (idx < 0)
6730                                         return idx;
6731                         } else {
6732                                 idx = sdeb_first_idx;
6733                                 xa_clear_mark(per_store_ap, idx,
6734                                               SDEB_XA_NOT_IN_USE);
6735                         }
6736                         /* make all hosts use same store */
6737                         list_for_each_entry(sdhp, &sdebug_host_list,
6738                                             host_list) {
6739                                 if (sdhp->si_idx != idx) {
6740                                         xa_set_mark(per_store_ap, sdhp->si_idx,
6741                                                     SDEB_XA_NOT_IN_USE);
6742                                         sdhp->si_idx = idx;
6743                                 }
6744                         }
6745                         sdeb_most_recent_idx = idx;
6746                 } else {        /* 0 --> 1 transition is trigger for shrink */
6747                         sdebug_erase_all_stores(true /* apart from first */);
6748                 }
6749                 sdebug_fake_rw = n;
6750                 return count;
6751         }
6752         return -EINVAL;
6753 }
6754 static DRIVER_ATTR_RW(fake_rw);
6755
6756 static ssize_t no_lun_0_show(struct device_driver *ddp, char *buf)
6757 {
6758         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_lun_0);
6759 }
6760 static ssize_t no_lun_0_store(struct device_driver *ddp, const char *buf,
6761                               size_t count)
6762 {
6763         int n;
6764
6765         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6766                 sdebug_no_lun_0 = n;
6767                 return count;
6768         }
6769         return -EINVAL;
6770 }
6771 static DRIVER_ATTR_RW(no_lun_0);
6772
6773 static ssize_t num_tgts_show(struct device_driver *ddp, char *buf)
6774 {
6775         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_tgts);
6776 }
6777 static ssize_t num_tgts_store(struct device_driver *ddp, const char *buf,
6778                               size_t count)
6779 {
6780         int n;
6781
6782         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6783                 sdebug_num_tgts = n;
6784                 sdebug_max_tgts_luns();
6785                 return count;
6786         }
6787         return -EINVAL;
6788 }
6789 static DRIVER_ATTR_RW(num_tgts);
6790
6791 static ssize_t dev_size_mb_show(struct device_driver *ddp, char *buf)
6792 {
6793         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dev_size_mb);
6794 }
6795 static DRIVER_ATTR_RO(dev_size_mb);
6796
6797 static ssize_t per_host_store_show(struct device_driver *ddp, char *buf)
6798 {
6799         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_per_host_store);
6800 }
6801
6802 static ssize_t per_host_store_store(struct device_driver *ddp, const char *buf,
6803                                     size_t count)
6804 {
6805         bool v;
6806
6807         if (kstrtobool(buf, &v))
6808                 return -EINVAL;
6809
6810         sdebug_per_host_store = v;
6811         return count;
6812 }
6813 static DRIVER_ATTR_RW(per_host_store);
6814
6815 static ssize_t num_parts_show(struct device_driver *ddp, char *buf)
6816 {
6817         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_parts);
6818 }
6819 static DRIVER_ATTR_RO(num_parts);
6820
6821 static ssize_t every_nth_show(struct device_driver *ddp, char *buf)
6822 {
6823         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_every_nth);
6824 }
6825 static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
6826                                size_t count)
6827 {
6828         int nth;
6829         char work[20];
6830
6831         if (sscanf(buf, "%10s", work) == 1) {
6832                 if (strncasecmp(work, "0x", 2) == 0) {
6833                         if (kstrtoint(work + 2, 16, &nth) == 0)
6834                                 goto every_nth_done;
6835                 } else {
6836                         if (kstrtoint(work, 10, &nth) == 0)
6837                                 goto every_nth_done;
6838                 }
6839         }
6840         return -EINVAL;
6841
6842 every_nth_done:
6843         sdebug_every_nth = nth;
6844         if (nth && !sdebug_statistics) {
6845                 pr_info("every_nth needs statistics=1, set it\n");
6846                 sdebug_statistics = true;
6847         }
6848         tweak_cmnd_count();
6849         return count;
6850 }
6851 static DRIVER_ATTR_RW(every_nth);
6852
6853 static ssize_t lun_format_show(struct device_driver *ddp, char *buf)
6854 {
6855         return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_lun_am);
6856 }
6857 static ssize_t lun_format_store(struct device_driver *ddp, const char *buf,
6858                                 size_t count)
6859 {
6860         int n;
6861         bool changed;
6862
6863         if (kstrtoint(buf, 0, &n))
6864                 return -EINVAL;
6865         if (n >= 0) {
6866                 if (n > (int)SAM_LUN_AM_FLAT) {
6867                         pr_warn("only LUN address methods 0 and 1 are supported\n");
6868                         return -EINVAL;
6869                 }
6870                 changed = ((int)sdebug_lun_am != n);
6871                 sdebug_lun_am = n;
6872                 if (changed && sdebug_scsi_level >= 5) {        /* >= SPC-3 */
6873                         struct sdebug_host_info *sdhp;
6874                         struct sdebug_dev_info *dp;
6875
6876                         mutex_lock(&sdebug_host_list_mutex);
6877                         list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6878                                 list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
6879                                         set_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
6880                                 }
6881                         }
6882                         mutex_unlock(&sdebug_host_list_mutex);
6883                 }
6884                 return count;
6885         }
6886         return -EINVAL;
6887 }
6888 static DRIVER_ATTR_RW(lun_format);
6889
6890 static ssize_t max_luns_show(struct device_driver *ddp, char *buf)
6891 {
6892         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_luns);
6893 }
6894 static ssize_t max_luns_store(struct device_driver *ddp, const char *buf,
6895                               size_t count)
6896 {
6897         int n;
6898         bool changed;
6899
6900         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
6901                 if (n > 256) {
6902                         pr_warn("max_luns can be no more than 256\n");
6903                         return -EINVAL;
6904                 }
6905                 changed = (sdebug_max_luns != n);
6906                 sdebug_max_luns = n;
6907                 sdebug_max_tgts_luns();
6908                 if (changed && (sdebug_scsi_level >= 5)) {      /* >= SPC-3 */
6909                         struct sdebug_host_info *sdhp;
6910                         struct sdebug_dev_info *dp;
6911
6912                         mutex_lock(&sdebug_host_list_mutex);
6913                         list_for_each_entry(sdhp, &sdebug_host_list,
6914                                             host_list) {
6915                                 list_for_each_entry(dp, &sdhp->dev_info_list,
6916                                                     dev_list) {
6917                                         set_bit(SDEBUG_UA_LUNS_CHANGED,
6918                                                 dp->uas_bm);
6919                                 }
6920                         }
6921                         mutex_unlock(&sdebug_host_list_mutex);
6922                 }
6923                 return count;
6924         }
6925         return -EINVAL;
6926 }
6927 static DRIVER_ATTR_RW(max_luns);
6928
6929 static ssize_t max_queue_show(struct device_driver *ddp, char *buf)
6930 {
6931         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_queue);
6932 }
6933 /* N.B. max_queue can be changed while there are queued commands. In flight
6934  * commands beyond the new max_queue will be completed. */
6935 static ssize_t max_queue_store(struct device_driver *ddp, const char *buf,
6936                                size_t count)
6937 {
6938         int n;
6939
6940         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
6941             (n <= SDEBUG_CANQUEUE) &&
6942             (sdebug_host_max_queue == 0)) {
6943                 mutex_lock(&sdebug_host_list_mutex);
6944
6945                 /* We may only change sdebug_max_queue when we have no shosts */
6946                 if (list_empty(&sdebug_host_list))
6947                         sdebug_max_queue = n;
6948                 else
6949                         count = -EBUSY;
6950                 mutex_unlock(&sdebug_host_list_mutex);
6951                 return count;
6952         }
6953         return -EINVAL;
6954 }
6955 static DRIVER_ATTR_RW(max_queue);
6956
6957 static ssize_t host_max_queue_show(struct device_driver *ddp, char *buf)
6958 {
6959         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_host_max_queue);
6960 }
6961
6962 static ssize_t no_rwlock_show(struct device_driver *ddp, char *buf)
6963 {
6964         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_rwlock);
6965 }
6966
6967 static ssize_t no_rwlock_store(struct device_driver *ddp, const char *buf, size_t count)
6968 {
6969         bool v;
6970
6971         if (kstrtobool(buf, &v))
6972                 return -EINVAL;
6973
6974         sdebug_no_rwlock = v;
6975         return count;
6976 }
6977 static DRIVER_ATTR_RW(no_rwlock);
6978
6979 /*
6980  * Since this is used for .can_queue, and we get the hc_idx tag from the bitmap
6981  * in range [0, sdebug_host_max_queue), we can't change it.
6982  */
6983 static DRIVER_ATTR_RO(host_max_queue);
6984
6985 static ssize_t no_uld_show(struct device_driver *ddp, char *buf)
6986 {
6987         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_uld);
6988 }
6989 static DRIVER_ATTR_RO(no_uld);
6990
6991 static ssize_t scsi_level_show(struct device_driver *ddp, char *buf)
6992 {
6993         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_scsi_level);
6994 }
6995 static DRIVER_ATTR_RO(scsi_level);
6996
6997 static ssize_t virtual_gb_show(struct device_driver *ddp, char *buf)
6998 {
6999         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_virtual_gb);
7000 }
7001 static ssize_t virtual_gb_store(struct device_driver *ddp, const char *buf,
7002                                 size_t count)
7003 {
7004         int n;
7005         bool changed;
7006
7007         /* Ignore capacity change for ZBC drives for now */
7008         if (sdeb_zbc_in_use)
7009                 return -ENOTSUPP;
7010
7011         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7012                 changed = (sdebug_virtual_gb != n);
7013                 sdebug_virtual_gb = n;
7014                 sdebug_capacity = get_sdebug_capacity();
7015                 if (changed) {
7016                         struct sdebug_host_info *sdhp;
7017                         struct sdebug_dev_info *dp;
7018
7019                         mutex_lock(&sdebug_host_list_mutex);
7020                         list_for_each_entry(sdhp, &sdebug_host_list,
7021                                             host_list) {
7022                                 list_for_each_entry(dp, &sdhp->dev_info_list,
7023                                                     dev_list) {
7024                                         set_bit(SDEBUG_UA_CAPACITY_CHANGED,
7025                                                 dp->uas_bm);
7026                                 }
7027                         }
7028                         mutex_unlock(&sdebug_host_list_mutex);
7029                 }
7030                 return count;
7031         }
7032         return -EINVAL;
7033 }
7034 static DRIVER_ATTR_RW(virtual_gb);
7035
7036 static ssize_t add_host_show(struct device_driver *ddp, char *buf)
7037 {
7038         /* absolute number of hosts currently active is what is shown */
7039         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_hosts);
7040 }
7041
7042 static ssize_t add_host_store(struct device_driver *ddp, const char *buf,
7043                               size_t count)
7044 {
7045         bool found;
7046         unsigned long idx;
7047         struct sdeb_store_info *sip;
7048         bool want_phs = (sdebug_fake_rw == 0) && sdebug_per_host_store;
7049         int delta_hosts;
7050
7051         if (sscanf(buf, "%d", &delta_hosts) != 1)
7052                 return -EINVAL;
7053         if (delta_hosts > 0) {
7054                 do {
7055                         found = false;
7056                         if (want_phs) {
7057                                 xa_for_each_marked(per_store_ap, idx, sip,
7058                                                    SDEB_XA_NOT_IN_USE) {
7059                                         sdeb_most_recent_idx = (int)idx;
7060                                         found = true;
7061                                         break;
7062                                 }
7063                                 if (found)      /* re-use case */
7064                                         sdebug_add_host_helper((int)idx);
7065                                 else
7066                                         sdebug_do_add_host(true);
7067                         } else {
7068                                 sdebug_do_add_host(false);
7069                         }
7070                 } while (--delta_hosts);
7071         } else if (delta_hosts < 0) {
7072                 do {
7073                         sdebug_do_remove_host(false);
7074                 } while (++delta_hosts);
7075         }
7076         return count;
7077 }
7078 static DRIVER_ATTR_RW(add_host);
7079
7080 static ssize_t vpd_use_hostno_show(struct device_driver *ddp, char *buf)
7081 {
7082         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_vpd_use_hostno);
7083 }
7084 static ssize_t vpd_use_hostno_store(struct device_driver *ddp, const char *buf,
7085                                     size_t count)
7086 {
7087         int n;
7088
7089         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7090                 sdebug_vpd_use_hostno = n;
7091                 return count;
7092         }
7093         return -EINVAL;
7094 }
7095 static DRIVER_ATTR_RW(vpd_use_hostno);
7096
7097 static ssize_t statistics_show(struct device_driver *ddp, char *buf)
7098 {
7099         return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_statistics);
7100 }
7101 static ssize_t statistics_store(struct device_driver *ddp, const char *buf,
7102                                 size_t count)
7103 {
7104         int n;
7105
7106         if ((count > 0) && (sscanf(buf, "%d", &n) == 1) && (n >= 0)) {
7107                 if (n > 0)
7108                         sdebug_statistics = true;
7109                 else {
7110                         clear_queue_stats();
7111                         sdebug_statistics = false;
7112                 }
7113                 return count;
7114         }
7115         return -EINVAL;
7116 }
7117 static DRIVER_ATTR_RW(statistics);
7118
7119 static ssize_t sector_size_show(struct device_driver *ddp, char *buf)
7120 {
7121         return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_sector_size);
7122 }
7123 static DRIVER_ATTR_RO(sector_size);
7124
7125 static ssize_t submit_queues_show(struct device_driver *ddp, char *buf)
7126 {
7127         return scnprintf(buf, PAGE_SIZE, "%d\n", submit_queues);
7128 }
7129 static DRIVER_ATTR_RO(submit_queues);
7130
7131 static ssize_t dix_show(struct device_driver *ddp, char *buf)
7132 {
7133         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dix);
7134 }
7135 static DRIVER_ATTR_RO(dix);
7136
7137 static ssize_t dif_show(struct device_driver *ddp, char *buf)
7138 {
7139         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dif);
7140 }
7141 static DRIVER_ATTR_RO(dif);
7142
7143 static ssize_t guard_show(struct device_driver *ddp, char *buf)
7144 {
7145         return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_guard);
7146 }
7147 static DRIVER_ATTR_RO(guard);
7148
7149 static ssize_t ato_show(struct device_driver *ddp, char *buf)
7150 {
7151         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ato);
7152 }
7153 static DRIVER_ATTR_RO(ato);
7154
7155 static ssize_t map_show(struct device_driver *ddp, char *buf)
7156 {
7157         ssize_t count = 0;
7158
7159         if (!scsi_debug_lbp())
7160                 return scnprintf(buf, PAGE_SIZE, "0-%u\n",
7161                                  sdebug_store_sectors);
7162
7163         if (sdebug_fake_rw == 0 && !xa_empty(per_store_ap)) {
7164                 struct sdeb_store_info *sip = xa_load(per_store_ap, 0);
7165
7166                 if (sip)
7167                         count = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
7168                                           (int)map_size, sip->map_storep);
7169         }
7170         buf[count++] = '\n';
7171         buf[count] = '\0';
7172
7173         return count;
7174 }
7175 static DRIVER_ATTR_RO(map);
7176
7177 static ssize_t random_show(struct device_driver *ddp, char *buf)
7178 {
7179         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_random);
7180 }
7181
7182 static ssize_t random_store(struct device_driver *ddp, const char *buf,
7183                             size_t count)
7184 {
7185         bool v;
7186
7187         if (kstrtobool(buf, &v))
7188                 return -EINVAL;
7189
7190         sdebug_random = v;
7191         return count;
7192 }
7193 static DRIVER_ATTR_RW(random);
7194
7195 static ssize_t removable_show(struct device_driver *ddp, char *buf)
7196 {
7197         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_removable ? 1 : 0);
7198 }
7199 static ssize_t removable_store(struct device_driver *ddp, const char *buf,
7200                                size_t count)
7201 {
7202         int n;
7203
7204         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7205                 sdebug_removable = (n > 0);
7206                 return count;
7207         }
7208         return -EINVAL;
7209 }
7210 static DRIVER_ATTR_RW(removable);
7211
7212 static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
7213 {
7214         return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_host_lock);
7215 }
7216 /* N.B. sdebug_host_lock does nothing, kept for backward compatibility */
7217 static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
7218                                size_t count)
7219 {
7220         int n;
7221
7222         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7223                 sdebug_host_lock = (n > 0);
7224                 return count;
7225         }
7226         return -EINVAL;
7227 }
7228 static DRIVER_ATTR_RW(host_lock);
7229
7230 static ssize_t strict_show(struct device_driver *ddp, char *buf)
7231 {
7232         return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_strict);
7233 }
7234 static ssize_t strict_store(struct device_driver *ddp, const char *buf,
7235                             size_t count)
7236 {
7237         int n;
7238
7239         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7240                 sdebug_strict = (n > 0);
7241                 return count;
7242         }
7243         return -EINVAL;
7244 }
7245 static DRIVER_ATTR_RW(strict);
7246
7247 static ssize_t uuid_ctl_show(struct device_driver *ddp, char *buf)
7248 {
7249         return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_uuid_ctl);
7250 }
7251 static DRIVER_ATTR_RO(uuid_ctl);
7252
7253 static ssize_t cdb_len_show(struct device_driver *ddp, char *buf)
7254 {
7255         return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_cdb_len);
7256 }
7257 static ssize_t cdb_len_store(struct device_driver *ddp, const char *buf,
7258                              size_t count)
7259 {
7260         int ret, n;
7261
7262         ret = kstrtoint(buf, 0, &n);
7263         if (ret)
7264                 return ret;
7265         sdebug_cdb_len = n;
7266         all_config_cdb_len();
7267         return count;
7268 }
7269 static DRIVER_ATTR_RW(cdb_len);
7270
7271 static const char * const zbc_model_strs_a[] = {
7272         [BLK_ZONED_NONE] = "none",
7273         [BLK_ZONED_HA]   = "host-aware",
7274         [BLK_ZONED_HM]   = "host-managed",
7275 };
7276
7277 static const char * const zbc_model_strs_b[] = {
7278         [BLK_ZONED_NONE] = "no",
7279         [BLK_ZONED_HA]   = "aware",
7280         [BLK_ZONED_HM]   = "managed",
7281 };
7282
7283 static const char * const zbc_model_strs_c[] = {
7284         [BLK_ZONED_NONE] = "0",
7285         [BLK_ZONED_HA]   = "1",
7286         [BLK_ZONED_HM]   = "2",
7287 };
7288
7289 static int sdeb_zbc_model_str(const char *cp)
7290 {
7291         int res = sysfs_match_string(zbc_model_strs_a, cp);
7292
7293         if (res < 0) {
7294                 res = sysfs_match_string(zbc_model_strs_b, cp);
7295                 if (res < 0) {
7296                         res = sysfs_match_string(zbc_model_strs_c, cp);
7297                         if (res < 0)
7298                                 return -EINVAL;
7299                 }
7300         }
7301         return res;
7302 }
7303
7304 static ssize_t zbc_show(struct device_driver *ddp, char *buf)
7305 {
7306         return scnprintf(buf, PAGE_SIZE, "%s\n",
7307                          zbc_model_strs_a[sdeb_zbc_model]);
7308 }
7309 static DRIVER_ATTR_RO(zbc);
7310
7311 static ssize_t tur_ms_to_ready_show(struct device_driver *ddp, char *buf)
7312 {
7313         return scnprintf(buf, PAGE_SIZE, "%d\n", sdeb_tur_ms_to_ready);
7314 }
7315 static DRIVER_ATTR_RO(tur_ms_to_ready);
7316
7317 static ssize_t group_number_stats_show(struct device_driver *ddp, char *buf)
7318 {
7319         char *p = buf, *end = buf + PAGE_SIZE;
7320         int i;
7321
7322         for (i = 0; i < ARRAY_SIZE(writes_by_group_number); i++)
7323                 p += scnprintf(p, end - p, "%d %ld\n", i,
7324                                atomic_long_read(&writes_by_group_number[i]));
7325
7326         return p - buf;
7327 }
7328
7329 static ssize_t group_number_stats_store(struct device_driver *ddp,
7330                                         const char *buf, size_t count)
7331 {
7332         int i;
7333
7334         for (i = 0; i < ARRAY_SIZE(writes_by_group_number); i++)
7335                 atomic_long_set(&writes_by_group_number[i], 0);
7336
7337         return count;
7338 }
7339 static DRIVER_ATTR_RW(group_number_stats);
7340
7341 /* Note: The following array creates attribute files in the
7342    /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
7343    files (over those found in the /sys/module/scsi_debug/parameters
7344    directory) is that auxiliary actions can be triggered when an attribute
7345    is changed. For example see: add_host_store() above.
7346  */
7347
7348 static struct attribute *sdebug_drv_attrs[] = {
7349         &driver_attr_delay.attr,
7350         &driver_attr_opts.attr,
7351         &driver_attr_ptype.attr,
7352         &driver_attr_dsense.attr,
7353         &driver_attr_fake_rw.attr,
7354         &driver_attr_host_max_queue.attr,
7355         &driver_attr_no_lun_0.attr,
7356         &driver_attr_num_tgts.attr,
7357         &driver_attr_dev_size_mb.attr,
7358         &driver_attr_num_parts.attr,
7359         &driver_attr_every_nth.attr,
7360         &driver_attr_lun_format.attr,
7361         &driver_attr_max_luns.attr,
7362         &driver_attr_max_queue.attr,
7363         &driver_attr_no_rwlock.attr,
7364         &driver_attr_no_uld.attr,
7365         &driver_attr_scsi_level.attr,
7366         &driver_attr_virtual_gb.attr,
7367         &driver_attr_add_host.attr,
7368         &driver_attr_per_host_store.attr,
7369         &driver_attr_vpd_use_hostno.attr,
7370         &driver_attr_sector_size.attr,
7371         &driver_attr_statistics.attr,
7372         &driver_attr_submit_queues.attr,
7373         &driver_attr_dix.attr,
7374         &driver_attr_dif.attr,
7375         &driver_attr_guard.attr,
7376         &driver_attr_ato.attr,
7377         &driver_attr_map.attr,
7378         &driver_attr_random.attr,
7379         &driver_attr_removable.attr,
7380         &driver_attr_host_lock.attr,
7381         &driver_attr_ndelay.attr,
7382         &driver_attr_strict.attr,
7383         &driver_attr_uuid_ctl.attr,
7384         &driver_attr_cdb_len.attr,
7385         &driver_attr_tur_ms_to_ready.attr,
7386         &driver_attr_zbc.attr,
7387         &driver_attr_group_number_stats.attr,
7388         NULL,
7389 };
7390 ATTRIBUTE_GROUPS(sdebug_drv);
7391
7392 static struct device *pseudo_primary;
7393
7394 static int __init scsi_debug_init(void)
7395 {
7396         bool want_store = (sdebug_fake_rw == 0);
7397         unsigned long sz;
7398         int k, ret, hosts_to_add;
7399         int idx = -1;
7400
7401         if (sdebug_ndelay >= 1000 * 1000 * 1000) {
7402                 pr_warn("ndelay must be less than 1 second, ignored\n");
7403                 sdebug_ndelay = 0;
7404         } else if (sdebug_ndelay > 0)
7405                 sdebug_jdelay = JDELAY_OVERRIDDEN;
7406
7407         switch (sdebug_sector_size) {
7408         case  512:
7409         case 1024:
7410         case 2048:
7411         case 4096:
7412                 break;
7413         default:
7414                 pr_err("invalid sector_size %d\n", sdebug_sector_size);
7415                 return -EINVAL;
7416         }
7417
7418         switch (sdebug_dif) {
7419         case T10_PI_TYPE0_PROTECTION:
7420                 break;
7421         case T10_PI_TYPE1_PROTECTION:
7422         case T10_PI_TYPE2_PROTECTION:
7423         case T10_PI_TYPE3_PROTECTION:
7424                 have_dif_prot = true;
7425                 break;
7426
7427         default:
7428                 pr_err("dif must be 0, 1, 2 or 3\n");
7429                 return -EINVAL;
7430         }
7431
7432         if (sdebug_num_tgts < 0) {
7433                 pr_err("num_tgts must be >= 0\n");
7434                 return -EINVAL;
7435         }
7436
7437         if (sdebug_guard > 1) {
7438                 pr_err("guard must be 0 or 1\n");
7439                 return -EINVAL;
7440         }
7441
7442         if (sdebug_ato > 1) {
7443                 pr_err("ato must be 0 or 1\n");
7444                 return -EINVAL;
7445         }
7446
7447         if (sdebug_physblk_exp > 15) {
7448                 pr_err("invalid physblk_exp %u\n", sdebug_physblk_exp);
7449                 return -EINVAL;
7450         }
7451
7452         sdebug_lun_am = sdebug_lun_am_i;
7453         if (sdebug_lun_am > SAM_LUN_AM_FLAT) {
7454                 pr_warn("Invalid LUN format %u, using default\n", (int)sdebug_lun_am);
7455                 sdebug_lun_am = SAM_LUN_AM_PERIPHERAL;
7456         }
7457
7458         if (sdebug_max_luns > 256) {
7459                 if (sdebug_max_luns > 16384) {
7460                         pr_warn("max_luns can be no more than 16384, use default\n");
7461                         sdebug_max_luns = DEF_MAX_LUNS;
7462                 }
7463                 sdebug_lun_am = SAM_LUN_AM_FLAT;
7464         }
7465
7466         if (sdebug_lowest_aligned > 0x3fff) {
7467                 pr_err("lowest_aligned too big: %u\n", sdebug_lowest_aligned);
7468                 return -EINVAL;
7469         }
7470
7471         if (submit_queues < 1) {
7472                 pr_err("submit_queues must be 1 or more\n");
7473                 return -EINVAL;
7474         }
7475
7476         if ((sdebug_max_queue > SDEBUG_CANQUEUE) || (sdebug_max_queue < 1)) {
7477                 pr_err("max_queue must be in range [1, %d]\n", SDEBUG_CANQUEUE);
7478                 return -EINVAL;
7479         }
7480
7481         if ((sdebug_host_max_queue > SDEBUG_CANQUEUE) ||
7482             (sdebug_host_max_queue < 0)) {
7483                 pr_err("host_max_queue must be in range [0 %d]\n",
7484                        SDEBUG_CANQUEUE);
7485                 return -EINVAL;
7486         }
7487
7488         if (sdebug_host_max_queue &&
7489             (sdebug_max_queue != sdebug_host_max_queue)) {
7490                 sdebug_max_queue = sdebug_host_max_queue;
7491                 pr_warn("fixing max submit queue depth to host max queue depth, %d\n",
7492                         sdebug_max_queue);
7493         }
7494
7495         /*
7496          * check for host managed zoned block device specified with
7497          * ptype=0x14 or zbc=XXX.
7498          */
7499         if (sdebug_ptype == TYPE_ZBC) {
7500                 sdeb_zbc_model = BLK_ZONED_HM;
7501         } else if (sdeb_zbc_model_s && *sdeb_zbc_model_s) {
7502                 k = sdeb_zbc_model_str(sdeb_zbc_model_s);
7503                 if (k < 0)
7504                         return k;
7505                 sdeb_zbc_model = k;
7506                 switch (sdeb_zbc_model) {
7507                 case BLK_ZONED_NONE:
7508                 case BLK_ZONED_HA:
7509                         sdebug_ptype = TYPE_DISK;
7510                         break;
7511                 case BLK_ZONED_HM:
7512                         sdebug_ptype = TYPE_ZBC;
7513                         break;
7514                 default:
7515                         pr_err("Invalid ZBC model\n");
7516                         return -EINVAL;
7517                 }
7518         }
7519         if (sdeb_zbc_model != BLK_ZONED_NONE) {
7520                 sdeb_zbc_in_use = true;
7521                 if (sdebug_dev_size_mb == DEF_DEV_SIZE_PRE_INIT)
7522                         sdebug_dev_size_mb = DEF_ZBC_DEV_SIZE_MB;
7523         }
7524
7525         if (sdebug_dev_size_mb == DEF_DEV_SIZE_PRE_INIT)
7526                 sdebug_dev_size_mb = DEF_DEV_SIZE_MB;
7527         if (sdebug_dev_size_mb < 1)
7528                 sdebug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
7529         sz = (unsigned long)sdebug_dev_size_mb * 1048576;
7530         sdebug_store_sectors = sz / sdebug_sector_size;
7531         sdebug_capacity = get_sdebug_capacity();
7532
7533         /* play around with geometry, don't waste too much on track 0 */
7534         sdebug_heads = 8;
7535         sdebug_sectors_per = 32;
7536         if (sdebug_dev_size_mb >= 256)
7537                 sdebug_heads = 64;
7538         else if (sdebug_dev_size_mb >= 16)
7539                 sdebug_heads = 32;
7540         sdebug_cylinders_per = (unsigned long)sdebug_capacity /
7541                                (sdebug_sectors_per * sdebug_heads);
7542         if (sdebug_cylinders_per >= 1024) {
7543                 /* other LLDs do this; implies >= 1GB ram disk ... */
7544                 sdebug_heads = 255;
7545                 sdebug_sectors_per = 63;
7546                 sdebug_cylinders_per = (unsigned long)sdebug_capacity /
7547                                (sdebug_sectors_per * sdebug_heads);
7548         }
7549         if (scsi_debug_lbp()) {
7550                 sdebug_unmap_max_blocks =
7551                         clamp(sdebug_unmap_max_blocks, 0U, 0xffffffffU);
7552
7553                 sdebug_unmap_max_desc =
7554                         clamp(sdebug_unmap_max_desc, 0U, 256U);
7555
7556                 sdebug_unmap_granularity =
7557                         clamp(sdebug_unmap_granularity, 1U, 0xffffffffU);
7558
7559                 if (sdebug_unmap_alignment &&
7560                     sdebug_unmap_granularity <=
7561                     sdebug_unmap_alignment) {
7562                         pr_err("ERR: unmap_granularity <= unmap_alignment\n");
7563                         return -EINVAL;
7564                 }
7565         }
7566         xa_init_flags(per_store_ap, XA_FLAGS_ALLOC | XA_FLAGS_LOCK_IRQ);
7567         if (want_store) {
7568                 idx = sdebug_add_store();
7569                 if (idx < 0)
7570                         return idx;
7571         }
7572
7573         pseudo_primary = root_device_register("pseudo_0");
7574         if (IS_ERR(pseudo_primary)) {
7575                 pr_warn("root_device_register() error\n");
7576                 ret = PTR_ERR(pseudo_primary);
7577                 goto free_vm;
7578         }
7579         ret = bus_register(&pseudo_lld_bus);
7580         if (ret < 0) {
7581                 pr_warn("bus_register error: %d\n", ret);
7582                 goto dev_unreg;
7583         }
7584         ret = driver_register(&sdebug_driverfs_driver);
7585         if (ret < 0) {
7586                 pr_warn("driver_register error: %d\n", ret);
7587                 goto bus_unreg;
7588         }
7589
7590         hosts_to_add = sdebug_add_host;
7591         sdebug_add_host = 0;
7592
7593         queued_cmd_cache = KMEM_CACHE(sdebug_queued_cmd, SLAB_HWCACHE_ALIGN);
7594         if (!queued_cmd_cache) {
7595                 ret = -ENOMEM;
7596                 goto driver_unreg;
7597         }
7598
7599         sdebug_debugfs_root = debugfs_create_dir("scsi_debug", NULL);
7600         if (IS_ERR_OR_NULL(sdebug_debugfs_root))
7601                 pr_info("%s: failed to create initial debugfs directory\n", __func__);
7602
7603         for (k = 0; k < hosts_to_add; k++) {
7604                 if (want_store && k == 0) {
7605                         ret = sdebug_add_host_helper(idx);
7606                         if (ret < 0) {
7607                                 pr_err("add_host_helper k=%d, error=%d\n",
7608                                        k, -ret);
7609                                 break;
7610                         }
7611                 } else {
7612                         ret = sdebug_do_add_host(want_store &&
7613                                                  sdebug_per_host_store);
7614                         if (ret < 0) {
7615                                 pr_err("add_host k=%d error=%d\n", k, -ret);
7616                                 break;
7617                         }
7618                 }
7619         }
7620         if (sdebug_verbose)
7621                 pr_info("built %d host(s)\n", sdebug_num_hosts);
7622
7623         return 0;
7624
7625 driver_unreg:
7626         driver_unregister(&sdebug_driverfs_driver);
7627 bus_unreg:
7628         bus_unregister(&pseudo_lld_bus);
7629 dev_unreg:
7630         root_device_unregister(pseudo_primary);
7631 free_vm:
7632         sdebug_erase_store(idx, NULL);
7633         return ret;
7634 }
7635
7636 static void __exit scsi_debug_exit(void)
7637 {
7638         int k = sdebug_num_hosts;
7639
7640         for (; k; k--)
7641                 sdebug_do_remove_host(true);
7642         kmem_cache_destroy(queued_cmd_cache);
7643         driver_unregister(&sdebug_driverfs_driver);
7644         bus_unregister(&pseudo_lld_bus);
7645         root_device_unregister(pseudo_primary);
7646
7647         sdebug_erase_all_stores(false);
7648         xa_destroy(per_store_ap);
7649         debugfs_remove(sdebug_debugfs_root);
7650 }
7651
7652 device_initcall(scsi_debug_init);
7653 module_exit(scsi_debug_exit);
7654
7655 static void sdebug_release_adapter(struct device *dev)
7656 {
7657         struct sdebug_host_info *sdbg_host;
7658
7659         sdbg_host = dev_to_sdebug_host(dev);
7660         kfree(sdbg_host);
7661 }
7662
7663 /* idx must be valid, if sip is NULL then it will be obtained using idx */
7664 static void sdebug_erase_store(int idx, struct sdeb_store_info *sip)
7665 {
7666         if (idx < 0)
7667                 return;
7668         if (!sip) {
7669                 if (xa_empty(per_store_ap))
7670                         return;
7671                 sip = xa_load(per_store_ap, idx);
7672                 if (!sip)
7673                         return;
7674         }
7675         vfree(sip->map_storep);
7676         vfree(sip->dif_storep);
7677         vfree(sip->storep);
7678         xa_erase(per_store_ap, idx);
7679         kfree(sip);
7680 }
7681
7682 /* Assume apart_from_first==false only in shutdown case. */
7683 static void sdebug_erase_all_stores(bool apart_from_first)
7684 {
7685         unsigned long idx;
7686         struct sdeb_store_info *sip = NULL;
7687
7688         xa_for_each(per_store_ap, idx, sip) {
7689                 if (apart_from_first)
7690                         apart_from_first = false;
7691                 else
7692                         sdebug_erase_store(idx, sip);
7693         }
7694         if (apart_from_first)
7695                 sdeb_most_recent_idx = sdeb_first_idx;
7696 }
7697
7698 /*
7699  * Returns store xarray new element index (idx) if >=0 else negated errno.
7700  * Limit the number of stores to 65536.
7701  */
7702 static int sdebug_add_store(void)
7703 {
7704         int res;
7705         u32 n_idx;
7706         unsigned long iflags;
7707         unsigned long sz = (unsigned long)sdebug_dev_size_mb * 1048576;
7708         struct sdeb_store_info *sip = NULL;
7709         struct xa_limit xal = { .max = 1 << 16, .min = 0 };
7710
7711         sip = kzalloc(sizeof(*sip), GFP_KERNEL);
7712         if (!sip)
7713                 return -ENOMEM;
7714
7715         xa_lock_irqsave(per_store_ap, iflags);
7716         res = __xa_alloc(per_store_ap, &n_idx, sip, xal, GFP_ATOMIC);
7717         if (unlikely(res < 0)) {
7718                 xa_unlock_irqrestore(per_store_ap, iflags);
7719                 kfree(sip);
7720                 pr_warn("%s: xa_alloc() errno=%d\n", __func__, -res);
7721                 return res;
7722         }
7723         sdeb_most_recent_idx = n_idx;
7724         if (sdeb_first_idx < 0)
7725                 sdeb_first_idx = n_idx;
7726         xa_unlock_irqrestore(per_store_ap, iflags);
7727
7728         res = -ENOMEM;
7729         sip->storep = vzalloc(sz);
7730         if (!sip->storep) {
7731                 pr_err("user data oom\n");
7732                 goto err;
7733         }
7734         if (sdebug_num_parts > 0)
7735                 sdebug_build_parts(sip->storep, sz);
7736
7737         /* DIF/DIX: what T10 calls Protection Information (PI) */
7738         if (sdebug_dix) {
7739                 int dif_size;
7740
7741                 dif_size = sdebug_store_sectors * sizeof(struct t10_pi_tuple);
7742                 sip->dif_storep = vmalloc(dif_size);
7743
7744                 pr_info("dif_storep %u bytes @ %pK\n", dif_size,
7745                         sip->dif_storep);
7746
7747                 if (!sip->dif_storep) {
7748                         pr_err("DIX oom\n");
7749                         goto err;
7750                 }
7751                 memset(sip->dif_storep, 0xff, dif_size);
7752         }
7753         /* Logical Block Provisioning */
7754         if (scsi_debug_lbp()) {
7755                 map_size = lba_to_map_index(sdebug_store_sectors - 1) + 1;
7756                 sip->map_storep = vmalloc(array_size(sizeof(long),
7757                                                      BITS_TO_LONGS(map_size)));
7758
7759                 pr_info("%lu provisioning blocks\n", map_size);
7760
7761                 if (!sip->map_storep) {
7762                         pr_err("LBP map oom\n");
7763                         goto err;
7764                 }
7765
7766                 bitmap_zero(sip->map_storep, map_size);
7767
7768                 /* Map first 1KB for partition table */
7769                 if (sdebug_num_parts)
7770                         map_region(sip, 0, 2);
7771         }
7772
7773         rwlock_init(&sip->macc_lck);
7774         return (int)n_idx;
7775 err:
7776         sdebug_erase_store((int)n_idx, sip);
7777         pr_warn("%s: failed, errno=%d\n", __func__, -res);
7778         return res;
7779 }
7780
7781 static int sdebug_add_host_helper(int per_host_idx)
7782 {
7783         int k, devs_per_host, idx;
7784         int error = -ENOMEM;
7785         struct sdebug_host_info *sdbg_host;
7786         struct sdebug_dev_info *sdbg_devinfo, *tmp;
7787
7788         sdbg_host = kzalloc(sizeof(*sdbg_host), GFP_KERNEL);
7789         if (!sdbg_host)
7790                 return -ENOMEM;
7791         idx = (per_host_idx < 0) ? sdeb_first_idx : per_host_idx;
7792         if (xa_get_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE))
7793                 xa_clear_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE);
7794         sdbg_host->si_idx = idx;
7795
7796         INIT_LIST_HEAD(&sdbg_host->dev_info_list);
7797
7798         devs_per_host = sdebug_num_tgts * sdebug_max_luns;
7799         for (k = 0; k < devs_per_host; k++) {
7800                 sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
7801                 if (!sdbg_devinfo)
7802                         goto clean;
7803         }
7804
7805         mutex_lock(&sdebug_host_list_mutex);
7806         list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
7807         mutex_unlock(&sdebug_host_list_mutex);
7808
7809         sdbg_host->dev.bus = &pseudo_lld_bus;
7810         sdbg_host->dev.parent = pseudo_primary;
7811         sdbg_host->dev.release = &sdebug_release_adapter;
7812         dev_set_name(&sdbg_host->dev, "adapter%d", sdebug_num_hosts);
7813
7814         error = device_register(&sdbg_host->dev);
7815         if (error) {
7816                 mutex_lock(&sdebug_host_list_mutex);
7817                 list_del(&sdbg_host->host_list);
7818                 mutex_unlock(&sdebug_host_list_mutex);
7819                 goto clean;
7820         }
7821
7822         ++sdebug_num_hosts;
7823         return 0;
7824
7825 clean:
7826         list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
7827                                  dev_list) {
7828                 list_del(&sdbg_devinfo->dev_list);
7829                 kfree(sdbg_devinfo->zstate);
7830                 kfree(sdbg_devinfo);
7831         }
7832         if (sdbg_host->dev.release)
7833                 put_device(&sdbg_host->dev);
7834         else
7835                 kfree(sdbg_host);
7836         pr_warn("%s: failed, errno=%d\n", __func__, -error);
7837         return error;
7838 }
7839
7840 static int sdebug_do_add_host(bool mk_new_store)
7841 {
7842         int ph_idx = sdeb_most_recent_idx;
7843
7844         if (mk_new_store) {
7845                 ph_idx = sdebug_add_store();
7846                 if (ph_idx < 0)
7847                         return ph_idx;
7848         }
7849         return sdebug_add_host_helper(ph_idx);
7850 }
7851
7852 static void sdebug_do_remove_host(bool the_end)
7853 {
7854         int idx = -1;
7855         struct sdebug_host_info *sdbg_host = NULL;
7856         struct sdebug_host_info *sdbg_host2;
7857
7858         mutex_lock(&sdebug_host_list_mutex);
7859         if (!list_empty(&sdebug_host_list)) {
7860                 sdbg_host = list_entry(sdebug_host_list.prev,
7861                                        struct sdebug_host_info, host_list);
7862                 idx = sdbg_host->si_idx;
7863         }
7864         if (!the_end && idx >= 0) {
7865                 bool unique = true;
7866
7867                 list_for_each_entry(sdbg_host2, &sdebug_host_list, host_list) {
7868                         if (sdbg_host2 == sdbg_host)
7869                                 continue;
7870                         if (idx == sdbg_host2->si_idx) {
7871                                 unique = false;
7872                                 break;
7873                         }
7874                 }
7875                 if (unique) {
7876                         xa_set_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE);
7877                         if (idx == sdeb_most_recent_idx)
7878                                 --sdeb_most_recent_idx;
7879                 }
7880         }
7881         if (sdbg_host)
7882                 list_del(&sdbg_host->host_list);
7883         mutex_unlock(&sdebug_host_list_mutex);
7884
7885         if (!sdbg_host)
7886                 return;
7887
7888         device_unregister(&sdbg_host->dev);
7889         --sdebug_num_hosts;
7890 }
7891
7892 static int sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
7893 {
7894         struct sdebug_dev_info *devip = sdev->hostdata;
7895
7896         if (!devip)
7897                 return  -ENODEV;
7898
7899         mutex_lock(&sdebug_host_list_mutex);
7900         block_unblock_all_queues(true);
7901
7902         if (qdepth > SDEBUG_CANQUEUE) {
7903                 qdepth = SDEBUG_CANQUEUE;
7904                 pr_warn("%s: requested qdepth [%d] exceeds canqueue [%d], trim\n", __func__,
7905                         qdepth, SDEBUG_CANQUEUE);
7906         }
7907         if (qdepth < 1)
7908                 qdepth = 1;
7909         if (qdepth != sdev->queue_depth)
7910                 scsi_change_queue_depth(sdev, qdepth);
7911
7912         block_unblock_all_queues(false);
7913         mutex_unlock(&sdebug_host_list_mutex);
7914
7915         if (SDEBUG_OPT_Q_NOISE & sdebug_opts)
7916                 sdev_printk(KERN_INFO, sdev, "%s: qdepth=%d\n", __func__, qdepth);
7917
7918         return sdev->queue_depth;
7919 }
7920
7921 static bool fake_timeout(struct scsi_cmnd *scp)
7922 {
7923         if (0 == (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth))) {
7924                 if (sdebug_every_nth < -1)
7925                         sdebug_every_nth = -1;
7926                 if (SDEBUG_OPT_TIMEOUT & sdebug_opts)
7927                         return true; /* ignore command causing timeout */
7928                 else if (SDEBUG_OPT_MAC_TIMEOUT & sdebug_opts &&
7929                          scsi_medium_access_command(scp))
7930                         return true; /* time out reads and writes */
7931         }
7932         return false;
7933 }
7934
7935 /* Response to TUR or media access command when device stopped */
7936 static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
7937 {
7938         int stopped_state;
7939         u64 diff_ns = 0;
7940         ktime_t now_ts = ktime_get_boottime();
7941         struct scsi_device *sdp = scp->device;
7942
7943         stopped_state = atomic_read(&devip->stopped);
7944         if (stopped_state == 2) {
7945                 if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
7946                         diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
7947                         if (diff_ns >= ((u64)sdeb_tur_ms_to_ready * 1000000)) {
7948                                 /* tur_ms_to_ready timer extinguished */
7949                                 atomic_set(&devip->stopped, 0);
7950                                 return 0;
7951                         }
7952                 }
7953                 mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x1);
7954                 if (sdebug_verbose)
7955                         sdev_printk(KERN_INFO, sdp,
7956                                     "%s: Not ready: in process of becoming ready\n", my_name);
7957                 if (scp->cmnd[0] == TEST_UNIT_READY) {
7958                         u64 tur_nanosecs_to_ready = (u64)sdeb_tur_ms_to_ready * 1000000;
7959
7960                         if (diff_ns <= tur_nanosecs_to_ready)
7961                                 diff_ns = tur_nanosecs_to_ready - diff_ns;
7962                         else
7963                                 diff_ns = tur_nanosecs_to_ready;
7964                         /* As per 20-061r2 approved for spc6 by T10 on 20200716 */
7965                         do_div(diff_ns, 1000000);       /* diff_ns becomes milliseconds */
7966                         scsi_set_sense_information(scp->sense_buffer, SCSI_SENSE_BUFFERSIZE,
7967                                                    diff_ns);
7968                         return check_condition_result;
7969                 }
7970         }
7971         mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
7972         if (sdebug_verbose)
7973                 sdev_printk(KERN_INFO, sdp, "%s: Not ready: initializing command required\n",
7974                             my_name);
7975         return check_condition_result;
7976 }
7977
7978 static void sdebug_map_queues(struct Scsi_Host *shost)
7979 {
7980         int i, qoff;
7981
7982         if (shost->nr_hw_queues == 1)
7983                 return;
7984
7985         for (i = 0, qoff = 0; i < HCTX_MAX_TYPES; i++) {
7986                 struct blk_mq_queue_map *map = &shost->tag_set.map[i];
7987
7988                 map->nr_queues  = 0;
7989
7990                 if (i == HCTX_TYPE_DEFAULT)
7991                         map->nr_queues = submit_queues - poll_queues;
7992                 else if (i == HCTX_TYPE_POLL)
7993                         map->nr_queues = poll_queues;
7994
7995                 if (!map->nr_queues) {
7996                         BUG_ON(i == HCTX_TYPE_DEFAULT);
7997                         continue;
7998                 }
7999
8000                 map->queue_offset = qoff;
8001                 blk_mq_map_queues(map);
8002
8003                 qoff += map->nr_queues;
8004         }
8005 }
8006
8007 struct sdebug_blk_mq_poll_data {
8008         unsigned int queue_num;
8009         int *num_entries;
8010 };
8011
8012 /*
8013  * We don't handle aborted commands here, but it does not seem possible to have
8014  * aborted polled commands from schedule_resp()
8015  */
8016 static bool sdebug_blk_mq_poll_iter(struct request *rq, void *opaque)
8017 {
8018         struct sdebug_blk_mq_poll_data *data = opaque;
8019         struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
8020         struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmd);
8021         struct sdebug_defer *sd_dp;
8022         u32 unique_tag = blk_mq_unique_tag(rq);
8023         u16 hwq = blk_mq_unique_tag_to_hwq(unique_tag);
8024         struct sdebug_queued_cmd *sqcp;
8025         unsigned long flags;
8026         int queue_num = data->queue_num;
8027         ktime_t time;
8028
8029         /* We're only interested in one queue for this iteration */
8030         if (hwq != queue_num)
8031                 return true;
8032
8033         /* Subsequent checks would fail if this failed, but check anyway */
8034         if (!test_bit(SCMD_STATE_INFLIGHT, &cmd->state))
8035                 return true;
8036
8037         time = ktime_get_boottime();
8038
8039         spin_lock_irqsave(&sdsc->lock, flags);
8040         sqcp = TO_QUEUED_CMD(cmd);
8041         if (!sqcp) {
8042                 spin_unlock_irqrestore(&sdsc->lock, flags);
8043                 return true;
8044         }
8045
8046         sd_dp = &sqcp->sd_dp;
8047         if (READ_ONCE(sd_dp->defer_t) != SDEB_DEFER_POLL) {
8048                 spin_unlock_irqrestore(&sdsc->lock, flags);
8049                 return true;
8050         }
8051
8052         if (time < sd_dp->cmpl_ts) {
8053                 spin_unlock_irqrestore(&sdsc->lock, flags);
8054                 return true;
8055         }
8056
8057         ASSIGN_QUEUED_CMD(cmd, NULL);
8058         spin_unlock_irqrestore(&sdsc->lock, flags);
8059
8060         if (sdebug_statistics) {
8061                 atomic_inc(&sdebug_completions);
8062                 if (raw_smp_processor_id() != sd_dp->issuing_cpu)
8063                         atomic_inc(&sdebug_miss_cpus);
8064         }
8065
8066         sdebug_free_queued_cmd(sqcp);
8067
8068         scsi_done(cmd); /* callback to mid level */
8069         (*data->num_entries)++;
8070         return true;
8071 }
8072
8073 static int sdebug_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num)
8074 {
8075         int num_entries = 0;
8076         struct sdebug_blk_mq_poll_data data = {
8077                 .queue_num = queue_num,
8078                 .num_entries = &num_entries,
8079         };
8080
8081         blk_mq_tagset_busy_iter(&shost->tag_set, sdebug_blk_mq_poll_iter,
8082                                 &data);
8083
8084         if (num_entries > 0)
8085                 atomic_add(num_entries, &sdeb_mq_poll_count);
8086         return num_entries;
8087 }
8088
8089 static int sdebug_timeout_cmd(struct scsi_cmnd *cmnd)
8090 {
8091         struct scsi_device *sdp = cmnd->device;
8092         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
8093         struct sdebug_err_inject *err;
8094         unsigned char *cmd = cmnd->cmnd;
8095         int ret = 0;
8096
8097         if (devip == NULL)
8098                 return 0;
8099
8100         rcu_read_lock();
8101         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
8102                 if (err->type == ERR_TMOUT_CMD &&
8103                     (err->cmd == cmd[0] || err->cmd == 0xff)) {
8104                         ret = !!err->cnt;
8105                         if (err->cnt < 0)
8106                                 err->cnt++;
8107
8108                         rcu_read_unlock();
8109                         return ret;
8110                 }
8111         }
8112         rcu_read_unlock();
8113
8114         return 0;
8115 }
8116
8117 static int sdebug_fail_queue_cmd(struct scsi_cmnd *cmnd)
8118 {
8119         struct scsi_device *sdp = cmnd->device;
8120         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
8121         struct sdebug_err_inject *err;
8122         unsigned char *cmd = cmnd->cmnd;
8123         int ret = 0;
8124
8125         if (devip == NULL)
8126                 return 0;
8127
8128         rcu_read_lock();
8129         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
8130                 if (err->type == ERR_FAIL_QUEUE_CMD &&
8131                     (err->cmd == cmd[0] || err->cmd == 0xff)) {
8132                         ret = err->cnt ? err->queuecmd_ret : 0;
8133                         if (err->cnt < 0)
8134                                 err->cnt++;
8135
8136                         rcu_read_unlock();
8137                         return ret;
8138                 }
8139         }
8140         rcu_read_unlock();
8141
8142         return 0;
8143 }
8144
8145 static int sdebug_fail_cmd(struct scsi_cmnd *cmnd, int *retval,
8146                            struct sdebug_err_inject *info)
8147 {
8148         struct scsi_device *sdp = cmnd->device;
8149         struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
8150         struct sdebug_err_inject *err;
8151         unsigned char *cmd = cmnd->cmnd;
8152         int ret = 0;
8153         int result;
8154
8155         if (devip == NULL)
8156                 return 0;
8157
8158         rcu_read_lock();
8159         list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
8160                 if (err->type == ERR_FAIL_CMD &&
8161                     (err->cmd == cmd[0] || err->cmd == 0xff)) {
8162                         if (!err->cnt) {
8163                                 rcu_read_unlock();
8164                                 return 0;
8165                         }
8166
8167                         ret = !!err->cnt;
8168                         rcu_read_unlock();
8169                         goto out_handle;
8170                 }
8171         }
8172         rcu_read_unlock();
8173
8174         return 0;
8175
8176 out_handle:
8177         if (err->cnt < 0)
8178                 err->cnt++;
8179         mk_sense_buffer(cmnd, err->sense_key, err->asc, err->asq);
8180         result = err->status_byte | err->host_byte << 16 | err->driver_byte << 24;
8181         *info = *err;
8182         *retval = schedule_resp(cmnd, devip, result, NULL, 0, 0);
8183
8184         return ret;
8185 }
8186
8187 static int scsi_debug_queuecommand(struct Scsi_Host *shost,
8188                                    struct scsi_cmnd *scp)
8189 {
8190         u8 sdeb_i;
8191         struct scsi_device *sdp = scp->device;
8192         const struct opcode_info_t *oip;
8193         const struct opcode_info_t *r_oip;
8194         struct sdebug_dev_info *devip;
8195         u8 *cmd = scp->cmnd;
8196         int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
8197         int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *) = NULL;
8198         int k, na;
8199         int errsts = 0;
8200         u64 lun_index = sdp->lun & 0x3FFF;
8201         u32 flags;
8202         u16 sa;
8203         u8 opcode = cmd[0];
8204         bool has_wlun_rl;
8205         bool inject_now;
8206         int ret = 0;
8207         struct sdebug_err_inject err;
8208
8209         scsi_set_resid(scp, 0);
8210         if (sdebug_statistics) {
8211                 atomic_inc(&sdebug_cmnd_count);
8212                 inject_now = inject_on_this_cmd();
8213         } else {
8214                 inject_now = false;
8215         }
8216         if (unlikely(sdebug_verbose &&
8217                      !(SDEBUG_OPT_NO_CDB_NOISE & sdebug_opts))) {
8218                 char b[120];
8219                 int n, len, sb;
8220
8221                 len = scp->cmd_len;
8222                 sb = (int)sizeof(b);
8223                 if (len > 32)
8224                         strcpy(b, "too long, over 32 bytes");
8225                 else {
8226                         for (k = 0, n = 0; k < len && n < sb; ++k)
8227                                 n += scnprintf(b + n, sb - n, "%02x ",
8228                                                (u32)cmd[k]);
8229                 }
8230                 sdev_printk(KERN_INFO, sdp, "%s: tag=%#x, cmd %s\n", my_name,
8231                             blk_mq_unique_tag(scsi_cmd_to_rq(scp)), b);
8232         }
8233         if (unlikely(inject_now && (sdebug_opts & SDEBUG_OPT_HOST_BUSY)))
8234                 return SCSI_MLQUEUE_HOST_BUSY;
8235         has_wlun_rl = (sdp->lun == SCSI_W_LUN_REPORT_LUNS);
8236         if (unlikely(lun_index >= sdebug_max_luns && !has_wlun_rl))
8237                 goto err_out;
8238
8239         sdeb_i = opcode_ind_arr[opcode];        /* fully mapped */
8240         oip = &opcode_info_arr[sdeb_i];         /* safe if table consistent */
8241         devip = (struct sdebug_dev_info *)sdp->hostdata;
8242         if (unlikely(!devip)) {
8243                 devip = find_build_dev_info(sdp);
8244                 if (NULL == devip)
8245                         goto err_out;
8246         }
8247
8248         if (sdebug_timeout_cmd(scp)) {
8249                 scmd_printk(KERN_INFO, scp, "timeout command 0x%x\n", opcode);
8250                 return 0;
8251         }
8252
8253         ret = sdebug_fail_queue_cmd(scp);
8254         if (ret) {
8255                 scmd_printk(KERN_INFO, scp, "fail queue command 0x%x with 0x%x\n",
8256                                 opcode, ret);
8257                 return ret;
8258         }
8259
8260         if (sdebug_fail_cmd(scp, &ret, &err)) {
8261                 scmd_printk(KERN_INFO, scp,
8262                         "fail command 0x%x with hostbyte=0x%x, "
8263                         "driverbyte=0x%x, statusbyte=0x%x, "
8264                         "sense_key=0x%x, asc=0x%x, asq=0x%x\n",
8265                         opcode, err.host_byte, err.driver_byte,
8266                         err.status_byte, err.sense_key, err.asc, err.asq);
8267                 return ret;
8268         }
8269
8270         if (unlikely(inject_now && !atomic_read(&sdeb_inject_pending)))
8271                 atomic_set(&sdeb_inject_pending, 1);
8272
8273         na = oip->num_attached;
8274         r_pfp = oip->pfp;
8275         if (na) {       /* multiple commands with this opcode */
8276                 r_oip = oip;
8277                 if (FF_SA & r_oip->flags) {
8278                         if (F_SA_LOW & oip->flags)
8279                                 sa = 0x1f & cmd[1];
8280                         else
8281                                 sa = get_unaligned_be16(cmd + 8);
8282                         for (k = 0; k <= na; oip = r_oip->arrp + k++) {
8283                                 if (opcode == oip->opcode && sa == oip->sa)
8284                                         break;
8285                         }
8286                 } else {   /* since no service action only check opcode */
8287                         for (k = 0; k <= na; oip = r_oip->arrp + k++) {
8288                                 if (opcode == oip->opcode)
8289                                         break;
8290                         }
8291                 }
8292                 if (k > na) {
8293                         if (F_SA_LOW & r_oip->flags)
8294                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 4);
8295                         else if (F_SA_HIGH & r_oip->flags)
8296                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, 8, 7);
8297                         else
8298                                 mk_sense_invalid_opcode(scp);
8299                         goto check_cond;
8300                 }
8301         }       /* else (when na==0) we assume the oip is a match */
8302         flags = oip->flags;
8303         if (unlikely(F_INV_OP & flags)) {
8304                 mk_sense_invalid_opcode(scp);
8305                 goto check_cond;
8306         }
8307         if (unlikely(has_wlun_rl && !(F_RL_WLUN_OK & flags))) {
8308                 if (sdebug_verbose)
8309                         sdev_printk(KERN_INFO, sdp, "%s: Opcode 0x%x not%s\n",
8310                                     my_name, opcode, " supported for wlun");
8311                 mk_sense_invalid_opcode(scp);
8312                 goto check_cond;
8313         }
8314         if (unlikely(sdebug_strict)) {  /* check cdb against mask */
8315                 u8 rem;
8316                 int j;
8317
8318                 for (k = 1; k < oip->len_mask[0] && k < 16; ++k) {
8319                         rem = ~oip->len_mask[k] & cmd[k];
8320                         if (rem) {
8321                                 for (j = 7; j >= 0; --j, rem <<= 1) {
8322                                         if (0x80 & rem)
8323                                                 break;
8324                                 }
8325                                 mk_sense_invalid_fld(scp, SDEB_IN_CDB, k, j);
8326                                 goto check_cond;
8327                         }
8328                 }
8329         }
8330         if (unlikely(!(F_SKIP_UA & flags) &&
8331                      find_first_bit(devip->uas_bm,
8332                                     SDEBUG_NUM_UAS) != SDEBUG_NUM_UAS)) {
8333                 errsts = make_ua(scp, devip);
8334                 if (errsts)
8335                         goto check_cond;
8336         }
8337         if (unlikely(((F_M_ACCESS & flags) || scp->cmnd[0] == TEST_UNIT_READY) &&
8338                      atomic_read(&devip->stopped))) {
8339                 errsts = resp_not_ready(scp, devip);
8340                 if (errsts)
8341                         goto fini;
8342         }
8343         if (sdebug_fake_rw && (F_FAKE_RW & flags))
8344                 goto fini;
8345         if (unlikely(sdebug_every_nth)) {
8346                 if (fake_timeout(scp))
8347                         return 0;       /* ignore command: make trouble */
8348         }
8349         if (likely(oip->pfp))
8350                 pfp = oip->pfp; /* calls a resp_* function */
8351         else
8352                 pfp = r_pfp;    /* if leaf function ptr NULL, try the root's */
8353
8354 fini:
8355         if (F_DELAY_OVERR & flags)      /* cmds like INQUIRY respond asap */
8356                 return schedule_resp(scp, devip, errsts, pfp, 0, 0);
8357         else if ((flags & F_LONG_DELAY) && (sdebug_jdelay > 0 ||
8358                                             sdebug_ndelay > 10000)) {
8359                 /*
8360                  * Skip long delays if ndelay <= 10 microseconds. Otherwise
8361                  * for Start Stop Unit (SSU) want at least 1 second delay and
8362                  * if sdebug_jdelay>1 want a long delay of that many seconds.
8363                  * For Synchronize Cache want 1/20 of SSU's delay.
8364                  */
8365                 int jdelay = (sdebug_jdelay < 2) ? 1 : sdebug_jdelay;
8366                 int denom = (flags & F_SYNC_DELAY) ? 20 : 1;
8367
8368                 jdelay = mult_frac(USER_HZ * jdelay, HZ, denom * USER_HZ);
8369                 return schedule_resp(scp, devip, errsts, pfp, jdelay, 0);
8370         } else
8371                 return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay,
8372                                      sdebug_ndelay);
8373 check_cond:
8374         return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0);
8375 err_out:
8376         return schedule_resp(scp, NULL, DID_NO_CONNECT << 16, NULL, 0, 0);
8377 }
8378
8379 static int sdebug_init_cmd_priv(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
8380 {
8381         struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmd);
8382
8383         spin_lock_init(&sdsc->lock);
8384
8385         return 0;
8386 }
8387
8388 static struct scsi_host_template sdebug_driver_template = {
8389         .show_info =            scsi_debug_show_info,
8390         .write_info =           scsi_debug_write_info,
8391         .proc_name =            sdebug_proc_name,
8392         .name =                 "SCSI DEBUG",
8393         .info =                 scsi_debug_info,
8394         .slave_alloc =          scsi_debug_slave_alloc,
8395         .slave_configure =      scsi_debug_slave_configure,
8396         .slave_destroy =        scsi_debug_slave_destroy,
8397         .ioctl =                scsi_debug_ioctl,
8398         .queuecommand =         scsi_debug_queuecommand,
8399         .change_queue_depth =   sdebug_change_qdepth,
8400         .map_queues =           sdebug_map_queues,
8401         .mq_poll =              sdebug_blk_mq_poll,
8402         .eh_abort_handler =     scsi_debug_abort,
8403         .eh_device_reset_handler = scsi_debug_device_reset,
8404         .eh_target_reset_handler = scsi_debug_target_reset,
8405         .eh_bus_reset_handler = scsi_debug_bus_reset,
8406         .eh_host_reset_handler = scsi_debug_host_reset,
8407         .can_queue =            SDEBUG_CANQUEUE,
8408         .this_id =              7,
8409         .sg_tablesize =         SG_MAX_SEGMENTS,
8410         .cmd_per_lun =          DEF_CMD_PER_LUN,
8411         .max_sectors =          -1U,
8412         .max_segment_size =     -1U,
8413         .module =               THIS_MODULE,
8414         .track_queue_depth =    1,
8415         .cmd_size = sizeof(struct sdebug_scsi_cmd),
8416         .init_cmd_priv = sdebug_init_cmd_priv,
8417         .target_alloc =         sdebug_target_alloc,
8418         .target_destroy =       sdebug_target_destroy,
8419 };
8420
8421 static int sdebug_driver_probe(struct device *dev)
8422 {
8423         int error = 0;
8424         struct sdebug_host_info *sdbg_host;
8425         struct Scsi_Host *hpnt;
8426         int hprot;
8427
8428         sdbg_host = dev_to_sdebug_host(dev);
8429
8430         sdebug_driver_template.can_queue = sdebug_max_queue;
8431         sdebug_driver_template.cmd_per_lun = sdebug_max_queue;
8432         if (!sdebug_clustering)
8433                 sdebug_driver_template.dma_boundary = PAGE_SIZE - 1;
8434
8435         hpnt = scsi_host_alloc(&sdebug_driver_template, 0);
8436         if (NULL == hpnt) {
8437                 pr_err("scsi_host_alloc failed\n");
8438                 error = -ENODEV;
8439                 return error;
8440         }
8441         if (submit_queues > nr_cpu_ids) {
8442                 pr_warn("%s: trim submit_queues (was %d) to nr_cpu_ids=%u\n",
8443                         my_name, submit_queues, nr_cpu_ids);
8444                 submit_queues = nr_cpu_ids;
8445         }
8446         /*
8447          * Decide whether to tell scsi subsystem that we want mq. The
8448          * following should give the same answer for each host.
8449          */
8450         hpnt->nr_hw_queues = submit_queues;
8451         if (sdebug_host_max_queue)
8452                 hpnt->host_tagset = 1;
8453
8454         /* poll queues are possible for nr_hw_queues > 1 */
8455         if (hpnt->nr_hw_queues == 1 || (poll_queues < 1)) {
8456                 pr_warn("%s: trim poll_queues to 0. poll_q/nr_hw = (%d/%d)\n",
8457                          my_name, poll_queues, hpnt->nr_hw_queues);
8458                 poll_queues = 0;
8459         }
8460
8461         /*
8462          * Poll queues don't need interrupts, but we need at least one I/O queue
8463          * left over for non-polled I/O.
8464          * If condition not met, trim poll_queues to 1 (just for simplicity).
8465          */
8466         if (poll_queues >= submit_queues) {
8467                 if (submit_queues < 3)
8468                         pr_warn("%s: trim poll_queues to 1\n", my_name);
8469                 else
8470                         pr_warn("%s: trim poll_queues to 1. Perhaps try poll_queues=%d\n",
8471                                 my_name, submit_queues - 1);
8472                 poll_queues = 1;
8473         }
8474         if (poll_queues)
8475                 hpnt->nr_maps = 3;
8476
8477         sdbg_host->shost = hpnt;
8478         if ((hpnt->this_id >= 0) && (sdebug_num_tgts > hpnt->this_id))
8479                 hpnt->max_id = sdebug_num_tgts + 1;
8480         else
8481                 hpnt->max_id = sdebug_num_tgts;
8482         /* = sdebug_max_luns; */
8483         hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
8484
8485         hprot = 0;
8486
8487         switch (sdebug_dif) {
8488
8489         case T10_PI_TYPE1_PROTECTION:
8490                 hprot = SHOST_DIF_TYPE1_PROTECTION;
8491                 if (sdebug_dix)
8492                         hprot |= SHOST_DIX_TYPE1_PROTECTION;
8493                 break;
8494
8495         case T10_PI_TYPE2_PROTECTION:
8496                 hprot = SHOST_DIF_TYPE2_PROTECTION;
8497                 if (sdebug_dix)
8498                         hprot |= SHOST_DIX_TYPE2_PROTECTION;
8499                 break;
8500
8501         case T10_PI_TYPE3_PROTECTION:
8502                 hprot = SHOST_DIF_TYPE3_PROTECTION;
8503                 if (sdebug_dix)
8504                         hprot |= SHOST_DIX_TYPE3_PROTECTION;
8505                 break;
8506
8507         default:
8508                 if (sdebug_dix)
8509                         hprot |= SHOST_DIX_TYPE0_PROTECTION;
8510                 break;
8511         }
8512
8513         scsi_host_set_prot(hpnt, hprot);
8514
8515         if (have_dif_prot || sdebug_dix)
8516                 pr_info("host protection%s%s%s%s%s%s%s\n",
8517                         (hprot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
8518                         (hprot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
8519                         (hprot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
8520                         (hprot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
8521                         (hprot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
8522                         (hprot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
8523                         (hprot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
8524
8525         if (sdebug_guard == 1)
8526                 scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
8527         else
8528                 scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
8529
8530         sdebug_verbose = !!(SDEBUG_OPT_NOISE & sdebug_opts);
8531         sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & sdebug_opts);
8532         if (sdebug_every_nth)   /* need stats counters for every_nth */
8533                 sdebug_statistics = true;
8534         error = scsi_add_host(hpnt, &sdbg_host->dev);
8535         if (error) {
8536                 pr_err("scsi_add_host failed\n");
8537                 error = -ENODEV;
8538                 scsi_host_put(hpnt);
8539         } else {
8540                 scsi_scan_host(hpnt);
8541         }
8542
8543         return error;
8544 }
8545
8546 static void sdebug_driver_remove(struct device *dev)
8547 {
8548         struct sdebug_host_info *sdbg_host;
8549         struct sdebug_dev_info *sdbg_devinfo, *tmp;
8550
8551         sdbg_host = dev_to_sdebug_host(dev);
8552
8553         scsi_remove_host(sdbg_host->shost);
8554
8555         list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
8556                                  dev_list) {
8557                 list_del(&sdbg_devinfo->dev_list);
8558                 kfree(sdbg_devinfo->zstate);
8559                 kfree(sdbg_devinfo);
8560         }
8561
8562         scsi_host_put(sdbg_host->shost);
8563 }
8564
8565 static const struct bus_type pseudo_lld_bus = {
8566         .name = "pseudo",
8567         .probe = sdebug_driver_probe,
8568         .remove = sdebug_driver_remove,
8569         .drv_groups = sdebug_drv_groups,
8570 };