cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scsi_debug.c (234587B)


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