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