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