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