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