Linux Audio

Check our new training course

Loading...
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
   4 *  Copyright (C) 1992  Eric Youngdale
   5 *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
   6 *  to make sure that we are not getting blocks mixed up, and PANIC if
   7 *  anything out of the ordinary is seen.
   8 * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   9 *
  10 * Copyright (C) 2001 - 2021 Douglas Gilbert
 
 
 
 
 
 
 
  11 *
  12 *  For documentation see http://sg.danny.cz/sg/scsi_debug.html
  13 */
  14
  15
  16#define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
  17
  18#include <linux/module.h>
  19#include <linux/align.h>
  20#include <linux/kernel.h>
  21#include <linux/errno.h>
  22#include <linux/jiffies.h>
  23#include <linux/slab.h>
  24#include <linux/types.h>
  25#include <linux/string.h>
 
  26#include <linux/fs.h>
  27#include <linux/init.h>
  28#include <linux/proc_fs.h>
  29#include <linux/vmalloc.h>
  30#include <linux/moduleparam.h>
  31#include <linux/scatterlist.h>
  32#include <linux/blkdev.h>
  33#include <linux/crc-t10dif.h>
  34#include <linux/spinlock.h>
  35#include <linux/interrupt.h>
  36#include <linux/atomic.h>
  37#include <linux/hrtimer.h>
  38#include <linux/uuid.h>
  39#include <linux/t10-pi.h>
  40#include <linux/msdos_partition.h>
  41#include <linux/random.h>
  42#include <linux/xarray.h>
  43#include <linux/prefetch.h>
  44#include <linux/debugfs.h>
  45#include <linux/async.h>
  46#include <linux/cleanup.h>
  47
  48#include <net/checksum.h>
  49
  50#include <linux/unaligned.h>
  51
  52#include <scsi/scsi.h>
  53#include <scsi/scsi_cmnd.h>
  54#include <scsi/scsi_device.h>
  55#include <scsi/scsi_host.h>
  56#include <scsi/scsicam.h>
  57#include <scsi/scsi_eh.h>
  58#include <scsi/scsi_tcq.h>
  59#include <scsi/scsi_dbg.h>
  60
  61#include "sd.h"
  62#include "scsi_logging.h"
  63
  64/* make sure inq_product_rev string corresponds to this version */
  65#define SDEBUG_VERSION "0191"	/* format to fit INQUIRY revision field */
  66static const char *sdebug_version_date = "20210520";
  67
  68#define MY_NAME "scsi_debug"
  69
  70/* Additional Sense Code (ASC) */
  71#define NO_ADDITIONAL_SENSE 0x0
  72#define OVERLAP_ATOMIC_COMMAND_ASC 0x0
  73#define OVERLAP_ATOMIC_COMMAND_ASCQ 0x23
  74#define LOGICAL_UNIT_NOT_READY 0x4
  75#define LOGICAL_UNIT_COMMUNICATION_FAILURE 0x8
  76#define UNRECOVERED_READ_ERR 0x11
  77#define PARAMETER_LIST_LENGTH_ERR 0x1a
  78#define INVALID_OPCODE 0x20
  79#define LBA_OUT_OF_RANGE 0x21
  80#define INVALID_FIELD_IN_CDB 0x24
  81#define INVALID_FIELD_IN_PARAM_LIST 0x26
  82#define WRITE_PROTECTED 0x27
  83#define UA_RESET_ASC 0x29
  84#define UA_CHANGED_ASC 0x2a
  85#define TARGET_CHANGED_ASC 0x3f
  86#define LUNS_CHANGED_ASCQ 0x0e
  87#define INSUFF_RES_ASC 0x55
  88#define INSUFF_RES_ASCQ 0x3
  89#define POWER_ON_RESET_ASCQ 0x0
  90#define POWER_ON_OCCURRED_ASCQ 0x1
  91#define BUS_RESET_ASCQ 0x2	/* scsi bus reset occurred */
  92#define MODE_CHANGED_ASCQ 0x1	/* mode parameters changed */
  93#define CAPACITY_CHANGED_ASCQ 0x9
  94#define SAVING_PARAMS_UNSUP 0x39
  95#define TRANSPORT_PROBLEM 0x4b
  96#define THRESHOLD_EXCEEDED 0x5d
  97#define LOW_POWER_COND_ON 0x5e
  98#define MISCOMPARE_VERIFY_ASC 0x1d
  99#define MICROCODE_CHANGED_ASCQ 0x1	/* with TARGET_CHANGED_ASC */
 100#define MICROCODE_CHANGED_WO_RESET_ASCQ 0x16
 101#define WRITE_ERROR_ASC 0xc
 102#define UNALIGNED_WRITE_ASCQ 0x4
 103#define WRITE_BOUNDARY_ASCQ 0x5
 104#define READ_INVDATA_ASCQ 0x6
 105#define READ_BOUNDARY_ASCQ 0x7
 106#define ATTEMPT_ACCESS_GAP 0x9
 107#define INSUFF_ZONE_ASCQ 0xe
 108/* see drivers/scsi/sense_codes.h */
 109
 110/* Additional Sense Code Qualifier (ASCQ) */
 111#define ACK_NAK_TO 0x3
 112
 113/* Default values for driver parameters */
 114#define DEF_NUM_HOST   1
 115#define DEF_NUM_TGTS   1
 116#define DEF_MAX_LUNS   1
 117/* With these defaults, this driver will make 1 host with 1 target
 118 * (id 0) containing 1 logical unit (lun 0). That is 1 device.
 119 */
 120#define DEF_ATO 1
 121#define DEF_CDB_LEN 10
 122#define DEF_JDELAY   1		/* if > 0 unit is a jiffy */
 123#define DEF_DEV_SIZE_PRE_INIT   0
 124#define DEF_DEV_SIZE_MB   8
 125#define DEF_ZBC_DEV_SIZE_MB   128
 126#define DEF_DIF 0
 127#define DEF_DIX 0
 128#define DEF_PER_HOST_STORE false
 129#define DEF_D_SENSE   0
 130#define DEF_EVERY_NTH   0
 131#define DEF_FAKE_RW	0
 132#define DEF_GUARD 0
 133#define DEF_HOST_LOCK 0
 134#define DEF_LBPU 0
 135#define DEF_LBPWS 0
 136#define DEF_LBPWS10 0
 137#define DEF_LBPRZ 1
 138#define DEF_LOWEST_ALIGNED 0
 139#define DEF_NDELAY   0		/* if > 0 unit is a nanosecond */
 140#define DEF_NO_LUN_0   0
 141#define DEF_NUM_PARTS   0
 142#define DEF_OPTS   0
 143#define DEF_OPT_BLKS 1024
 144#define DEF_PHYSBLK_EXP 0
 145#define DEF_OPT_XFERLEN_EXP 0
 146#define DEF_PTYPE   TYPE_DISK
 147#define DEF_RANDOM false
 148#define DEF_REMOVABLE false
 149#define DEF_SCSI_LEVEL   7    /* INQUIRY, byte2 [6->SPC-4; 7->SPC-5] */
 150#define DEF_SECTOR_SIZE 512
 151#define DEF_UNMAP_ALIGNMENT 0
 152#define DEF_UNMAP_GRANULARITY 1
 153#define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
 154#define DEF_UNMAP_MAX_DESC 256
 155#define DEF_VIRTUAL_GB   0
 156#define DEF_VPD_USE_HOSTNO 1
 157#define DEF_WRITESAME_LENGTH 0xFFFF
 158#define DEF_ATOMIC_WR 0
 159#define DEF_ATOMIC_WR_MAX_LENGTH 8192
 160#define DEF_ATOMIC_WR_ALIGN 2
 161#define DEF_ATOMIC_WR_GRAN 2
 162#define DEF_ATOMIC_WR_MAX_LENGTH_BNDRY (DEF_ATOMIC_WR_MAX_LENGTH)
 163#define DEF_ATOMIC_WR_MAX_BNDRY 128
 164#define DEF_STRICT 0
 165#define DEF_STATISTICS false
 166#define DEF_SUBMIT_QUEUES 1
 167#define DEF_TUR_MS_TO_READY 0
 168#define DEF_UUID_CTL 0
 169#define JDELAY_OVERRIDDEN -9999
 170
 171/* Default parameters for ZBC drives */
 172#define DEF_ZBC_ZONE_SIZE_MB	128
 173#define DEF_ZBC_MAX_OPEN_ZONES	8
 174#define DEF_ZBC_NR_CONV_ZONES	1
 175
 176#define SDEBUG_LUN_0_VAL 0
 177
 178/* bit mask values for sdebug_opts */
 179#define SDEBUG_OPT_NOISE		1
 180#define SDEBUG_OPT_MEDIUM_ERR		2
 181#define SDEBUG_OPT_TIMEOUT		4
 182#define SDEBUG_OPT_RECOVERED_ERR	8
 183#define SDEBUG_OPT_TRANSPORT_ERR	16
 184#define SDEBUG_OPT_DIF_ERR		32
 185#define SDEBUG_OPT_DIX_ERR		64
 186#define SDEBUG_OPT_MAC_TIMEOUT		128
 187#define SDEBUG_OPT_SHORT_TRANSFER	0x100
 188#define SDEBUG_OPT_Q_NOISE		0x200
 189#define SDEBUG_OPT_ALL_TSF		0x400	/* ignore */
 190#define SDEBUG_OPT_RARE_TSF		0x800
 191#define SDEBUG_OPT_N_WCE		0x1000
 192#define SDEBUG_OPT_RESET_NOISE		0x2000
 193#define SDEBUG_OPT_NO_CDB_NOISE		0x4000
 194#define SDEBUG_OPT_HOST_BUSY		0x8000
 195#define SDEBUG_OPT_CMD_ABORT		0x10000
 196#define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \
 197			      SDEBUG_OPT_RESET_NOISE)
 198#define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \
 199				  SDEBUG_OPT_TRANSPORT_ERR | \
 200				  SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \
 201				  SDEBUG_OPT_SHORT_TRANSFER | \
 202				  SDEBUG_OPT_HOST_BUSY | \
 203				  SDEBUG_OPT_CMD_ABORT)
 204#define SDEBUG_OPT_RECOV_DIF_DIX (SDEBUG_OPT_RECOVERED_ERR | \
 205				  SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR)
 
 
 
 
 
 
 
 
 
 
 
 
 
 206
 207/* As indicated in SAM-5 and SPC-4 Unit Attentions (UAs) are returned in
 208 * priority order. In the subset implemented here lower numbers have higher
 209 * priority. The UA numbers should be a sequence starting from 0 with
 210 * SDEBUG_NUM_UAS being 1 higher than the highest numbered UA. */
 211#define SDEBUG_UA_POR 0		/* Power on, reset, or bus device reset */
 212#define SDEBUG_UA_POOCCUR 1	/* Power on occurred */
 213#define SDEBUG_UA_BUS_RESET 2
 214#define SDEBUG_UA_MODE_CHANGED 3
 215#define SDEBUG_UA_CAPACITY_CHANGED 4
 216#define SDEBUG_UA_LUNS_CHANGED 5
 217#define SDEBUG_UA_MICROCODE_CHANGED 6	/* simulate firmware change */
 218#define SDEBUG_UA_MICROCODE_CHANGED_WO_RESET 7
 219#define SDEBUG_NUM_UAS 8
 220
 221/* when 1==SDEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
 222 * sector on read commands: */
 223#define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
 224#define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
 225
 
 
 
 
 226/* SDEBUG_CANQUEUE is the maximum number of commands that can be queued
 227 * (for response) per submit queue at one time. Can be reduced by max_queue
 228 * option. Command responses are not queued when jdelay=0 and ndelay=0. The
 229 * per-device DEF_CMD_PER_LUN can be changed via sysfs:
 230 * /sys/class/scsi_device/<h:c:t:l>/device/queue_depth
 231 * but cannot exceed SDEBUG_CANQUEUE .
 232 */
 233#define SDEBUG_CANQUEUE_WORDS  3	/* a WORD is bits in a long */
 234#define SDEBUG_CANQUEUE  (SDEBUG_CANQUEUE_WORDS * BITS_PER_LONG)
 235#define DEF_CMD_PER_LUN  SDEBUG_CANQUEUE
 236
 237/* UA - Unit Attention; SA - Service Action; SSU - Start Stop Unit */
 238#define F_D_IN			1	/* Data-in command (e.g. READ) */
 239#define F_D_OUT			2	/* Data-out command (e.g. WRITE) */
 240#define F_D_OUT_MAYBE		4	/* WRITE SAME, NDOB bit */
 241#define F_D_UNKN		8
 242#define F_RL_WLUN_OK		0x10	/* allowed with REPORT LUNS W-LUN */
 243#define F_SKIP_UA		0x20	/* bypass UAs (e.g. INQUIRY command) */
 244#define F_DELAY_OVERR		0x40	/* for commands like INQUIRY */
 245#define F_SA_LOW		0x80	/* SA is in cdb byte 1, bits 4 to 0 */
 246#define F_SA_HIGH		0x100	/* SA is in cdb bytes 8 and 9 */
 247#define F_INV_OP		0x200	/* invalid opcode (not supported) */
 248#define F_FAKE_RW		0x400	/* bypass resp_*() when fake_rw set */
 249#define F_M_ACCESS		0x800	/* media access, reacts to SSU state */
 250#define F_SSU_DELAY		0x1000	/* SSU command delay (long-ish) */
 251#define F_SYNC_DELAY		0x2000	/* SYNCHRONIZE CACHE delay */
 252
 253/* Useful combinations of the above flags */
 254#define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
 255#define FF_MEDIA_IO (F_M_ACCESS | F_FAKE_RW)
 256#define FF_SA (F_SA_HIGH | F_SA_LOW)
 257#define F_LONG_DELAY		(F_SSU_DELAY | F_SYNC_DELAY)
 258
 259#define SDEBUG_MAX_PARTS 4
 260
 261#define SDEBUG_MAX_CMD_LEN 32
 262
 263#define SDEB_XA_NOT_IN_USE XA_MARK_1
 264
 265static struct kmem_cache *queued_cmd_cache;
 266
 267#define TO_QUEUED_CMD(scmd)  ((void *)(scmd)->host_scribble)
 268#define ASSIGN_QUEUED_CMD(scmnd, qc) { (scmnd)->host_scribble = (void *) qc; }
 269
 270/* Zone types (zbcr05 table 25) */
 271enum sdebug_z_type {
 272	ZBC_ZTYPE_CNV	= 0x1,
 273	ZBC_ZTYPE_SWR	= 0x2,
 274	ZBC_ZTYPE_SWP	= 0x3,
 275	/* ZBC_ZTYPE_SOBR = 0x4, */
 276	ZBC_ZTYPE_GAP	= 0x5,
 277};
 278
 279/* enumeration names taken from table 26, zbcr05 */
 280enum sdebug_z_cond {
 281	ZBC_NOT_WRITE_POINTER	= 0x0,
 282	ZC1_EMPTY		= 0x1,
 283	ZC2_IMPLICIT_OPEN	= 0x2,
 284	ZC3_EXPLICIT_OPEN	= 0x3,
 285	ZC4_CLOSED		= 0x4,
 286	ZC6_READ_ONLY		= 0xd,
 287	ZC5_FULL		= 0xe,
 288	ZC7_OFFLINE		= 0xf,
 289};
 290
 291struct sdeb_zone_state {	/* ZBC: per zone state */
 292	enum sdebug_z_type z_type;
 293	enum sdebug_z_cond z_cond;
 294	bool z_non_seq_resource;
 295	unsigned int z_size;
 296	sector_t z_start;
 297	sector_t z_wp;
 298};
 299
 300enum sdebug_err_type {
 301	ERR_TMOUT_CMD		= 0,	/* make specific scsi command timeout */
 302	ERR_FAIL_QUEUE_CMD	= 1,	/* make specific scsi command's */
 303					/* queuecmd return failed */
 304	ERR_FAIL_CMD		= 2,	/* make specific scsi command's */
 305					/* queuecmd return succeed but */
 306					/* with errors set in scsi_cmnd */
 307	ERR_ABORT_CMD_FAILED	= 3,	/* control return FAILED from */
 308					/* scsi_debug_abort() */
 309	ERR_LUN_RESET_FAILED	= 4,	/* control return FAILED from */
 310					/* scsi_debug_device_reseLUN_RESET_FAILEDt() */
 311};
 312
 313struct sdebug_err_inject {
 314	int type;
 315	struct list_head list;
 316	int cnt;
 317	unsigned char cmd;
 318	struct rcu_head rcu;
 319
 320	union {
 321		/*
 322		 * For ERR_FAIL_QUEUE_CMD
 323		 */
 324		int queuecmd_ret;
 325
 326		/*
 327		 * For ERR_FAIL_CMD
 328		 */
 329		struct {
 330			unsigned char host_byte;
 331			unsigned char driver_byte;
 332			unsigned char status_byte;
 333			unsigned char sense_key;
 334			unsigned char asc;
 335			unsigned char asq;
 336		};
 337	};
 338};
 339
 340struct sdebug_dev_info {
 341	struct list_head dev_list;
 342	unsigned int channel;
 343	unsigned int target;
 344	u64 lun;
 345	uuid_t lu_name;
 346	struct sdebug_host_info *sdbg_host;
 347	unsigned long uas_bm[1];
 348	atomic_t stopped;	/* 1: by SSU, 2: device start */
 
 349	bool used;
 350
 351	/* For ZBC devices */
 352	bool zoned;
 353	unsigned int zcap;
 354	unsigned int zsize;
 355	unsigned int zsize_shift;
 356	unsigned int nr_zones;
 357	unsigned int nr_conv_zones;
 358	unsigned int nr_seq_zones;
 359	unsigned int nr_imp_open;
 360	unsigned int nr_exp_open;
 361	unsigned int nr_closed;
 362	unsigned int max_open;
 363	ktime_t create_ts;	/* time since bootup that this device was created */
 364	struct sdeb_zone_state *zstate;
 365
 366	struct dentry *debugfs_entry;
 367	struct spinlock list_lock;
 368	struct list_head inject_err_list;
 369};
 370
 371struct sdebug_target_info {
 372	bool reset_fail;
 373	struct dentry *debugfs_entry;
 374};
 375
 376struct sdebug_host_info {
 377	struct list_head host_list;
 378	int si_idx;	/* sdeb_store_info (per host) xarray index */
 379	struct Scsi_Host *shost;
 380	struct device dev;
 381	struct list_head dev_info_list;
 382};
 383
 384/* There is an xarray of pointers to this struct's objects, one per host */
 385struct sdeb_store_info {
 386	rwlock_t macc_data_lck;	/* for media data access on this store */
 387	rwlock_t macc_meta_lck;	/* for atomic media meta access on this store */
 388	rwlock_t macc_sector_lck;	/* per-sector media data access on this store */
 389	u8 *storep;		/* user data storage (ram) */
 390	struct t10_pi_tuple *dif_storep; /* protection info */
 391	void *map_storep;	/* provisioning map */
 392};
 393
 394#define dev_to_sdebug_host(d)	\
 395	container_of(d, struct sdebug_host_info, dev)
 396
 397#define shost_to_sdebug_host(shost)	\
 398	dev_to_sdebug_host(shost->dma_dev)
 399
 400enum sdeb_defer_type {SDEB_DEFER_NONE = 0, SDEB_DEFER_HRT = 1,
 401		      SDEB_DEFER_WQ = 2, SDEB_DEFER_POLL = 3};
 402
 403struct sdebug_defer {
 404	struct hrtimer hrt;
 405	struct execute_work ew;
 406	ktime_t cmpl_ts;/* time since boot to complete this cmd */
 
 407	int issuing_cpu;
 408	bool aborted;	/* true when blk_abort_request() already called */
 409	enum sdeb_defer_type defer_t;
 410};
 411
 412struct sdebug_device_access_info {
 413	bool atomic_write;
 414	u64 lba;
 415	u32 num;
 416	struct scsi_cmnd *self;
 417};
 418
 419struct sdebug_queued_cmd {
 420	/* corresponding bit set in in_use_bm[] in owning struct sdebug_queue
 421	 * instance indicates this slot is in use.
 422	 */
 423	struct sdebug_defer sd_dp;
 424	struct scsi_cmnd *scmd;
 425	struct sdebug_device_access_info *i;
 
 
 
 
 426};
 427
 428struct sdebug_scsi_cmd {
 429	spinlock_t   lock;
 
 
 
 430};
 431
 432static atomic_t sdebug_cmnd_count;   /* number of incoming commands */
 433static atomic_t sdebug_completions;  /* count of deferred completions */
 434static atomic_t sdebug_miss_cpus;    /* submission + completion cpus differ */
 435static atomic_t sdebug_a_tsf;	     /* 'almost task set full' counter */
 436static atomic_t sdeb_inject_pending;
 437static atomic_t sdeb_mq_poll_count;  /* bumped when mq_poll returns > 0 */
 438
 439struct opcode_info_t {
 440	u8 num_attached;	/* 0 if this is it (i.e. a leaf); use 0xff */
 441				/* for terminating element */
 442	u8 opcode;		/* if num_attached > 0, preferred */
 443	u16 sa;			/* service action */
 444	u32 flags;		/* OR-ed set of SDEB_F_* */
 445	int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
 446	const struct opcode_info_t *arrp;  /* num_attached elements or NULL */
 447	u8 len_mask[16];	/* len_mask[0]-->cdb_len, then mask for cdb */
 448				/* 1 to min(cdb_len, 15); ignore cdb[15...] */
 449};
 450
 451/* SCSI opcodes (first byte of cdb) of interest mapped onto these indexes */
 452enum sdeb_opcode_index {
 453	SDEB_I_INVALID_OPCODE =	0,
 454	SDEB_I_INQUIRY = 1,
 455	SDEB_I_REPORT_LUNS = 2,
 456	SDEB_I_REQUEST_SENSE = 3,
 457	SDEB_I_TEST_UNIT_READY = 4,
 458	SDEB_I_MODE_SENSE = 5,		/* 6, 10 */
 459	SDEB_I_MODE_SELECT = 6,		/* 6, 10 */
 460	SDEB_I_LOG_SENSE = 7,
 461	SDEB_I_READ_CAPACITY = 8,	/* 10; 16 is in SA_IN(16) */
 462	SDEB_I_READ = 9,		/* 6, 10, 12, 16 */
 463	SDEB_I_WRITE = 10,		/* 6, 10, 12, 16 */
 464	SDEB_I_START_STOP = 11,
 465	SDEB_I_SERV_ACT_IN_16 = 12,	/* add ...SERV_ACT_IN_12 if needed */
 466	SDEB_I_SERV_ACT_OUT_16 = 13,	/* add ...SERV_ACT_OUT_12 if needed */
 467	SDEB_I_MAINT_IN = 14,
 468	SDEB_I_MAINT_OUT = 15,
 469	SDEB_I_VERIFY = 16,		/* VERIFY(10), VERIFY(16) */
 470	SDEB_I_VARIABLE_LEN = 17,	/* READ(32), WRITE(32), WR_SCAT(32) */
 471	SDEB_I_RESERVE = 18,		/* 6, 10 */
 472	SDEB_I_RELEASE = 19,		/* 6, 10 */
 473	SDEB_I_ALLOW_REMOVAL = 20,	/* PREVENT ALLOW MEDIUM REMOVAL */
 474	SDEB_I_REZERO_UNIT = 21,	/* REWIND in SSC */
 475	SDEB_I_ATA_PT = 22,		/* 12, 16 */
 476	SDEB_I_SEND_DIAG = 23,
 477	SDEB_I_UNMAP = 24,
 478	SDEB_I_WRITE_BUFFER = 25,
 479	SDEB_I_WRITE_SAME = 26,		/* 10, 16 */
 480	SDEB_I_SYNC_CACHE = 27,		/* 10, 16 */
 481	SDEB_I_COMP_WRITE = 28,
 482	SDEB_I_PRE_FETCH = 29,		/* 10, 16 */
 483	SDEB_I_ZONE_OUT = 30,		/* 0x94+SA; includes no data xfer */
 484	SDEB_I_ZONE_IN = 31,		/* 0x95+SA; all have data-in */
 485	SDEB_I_ATOMIC_WRITE_16 = 32,
 486	SDEB_I_LAST_ELEM_P1 = 33,	/* keep this last (previous + 1) */
 487};
 488
 489
 490static const unsigned char opcode_ind_arr[256] = {
 491/* 0x0; 0x0->0x1f: 6 byte cdbs */
 492	SDEB_I_TEST_UNIT_READY, SDEB_I_REZERO_UNIT, 0, SDEB_I_REQUEST_SENSE,
 493	    0, 0, 0, 0,
 494	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, 0,
 495	0, 0, SDEB_I_INQUIRY, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
 496	    SDEB_I_RELEASE,
 497	0, 0, SDEB_I_MODE_SENSE, SDEB_I_START_STOP, 0, SDEB_I_SEND_DIAG,
 498	    SDEB_I_ALLOW_REMOVAL, 0,
 499/* 0x20; 0x20->0x3f: 10 byte cdbs */
 500	0, 0, 0, 0, 0, SDEB_I_READ_CAPACITY, 0, 0,
 501	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, SDEB_I_VERIFY,
 502	0, 0, 0, 0, SDEB_I_PRE_FETCH, SDEB_I_SYNC_CACHE, 0, 0,
 503	0, 0, 0, SDEB_I_WRITE_BUFFER, 0, 0, 0, 0,
 504/* 0x40; 0x40->0x5f: 10 byte cdbs */
 505	0, SDEB_I_WRITE_SAME, SDEB_I_UNMAP, 0, 0, 0, 0, 0,
 506	0, 0, 0, 0, 0, SDEB_I_LOG_SENSE, 0, 0,
 507	0, 0, 0, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
 508	    SDEB_I_RELEASE,
 509	0, 0, SDEB_I_MODE_SENSE, 0, 0, 0, 0, 0,
 510/* 0x60; 0x60->0x7d are reserved, 0x7e is "extended cdb" */
 511	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 512	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 513	0, SDEB_I_VARIABLE_LEN,
 514/* 0x80; 0x80->0x9f: 16 byte cdbs */
 515	0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
 516	SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0,
 517	0, 0, 0, SDEB_I_VERIFY,
 518	SDEB_I_PRE_FETCH, SDEB_I_SYNC_CACHE, 0, SDEB_I_WRITE_SAME,
 519	SDEB_I_ZONE_OUT, SDEB_I_ZONE_IN, 0, 0,
 520	0, 0, 0, 0,
 521	SDEB_I_ATOMIC_WRITE_16, 0, SDEB_I_SERV_ACT_IN_16, SDEB_I_SERV_ACT_OUT_16,
 522/* 0xa0; 0xa0->0xbf: 12 byte cdbs */
 523	SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
 524	     SDEB_I_MAINT_OUT, 0, 0, 0,
 525	SDEB_I_READ, 0 /* SDEB_I_SERV_ACT_OUT_12 */, SDEB_I_WRITE,
 526	     0 /* SDEB_I_SERV_ACT_IN_12 */, 0, 0, 0, 0,
 527	0, 0, 0, 0, 0, 0, 0, 0,
 528	0, 0, 0, 0, 0, 0, 0, 0,
 529/* 0xc0; 0xc0->0xff: vendor specific */
 530	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 531	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 532	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 533	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 534};
 535
 536/*
 537 * The following "response" functions return the SCSI mid-level's 4 byte
 538 * tuple-in-an-int. To handle commands with an IMMED bit, for a faster
 539 * command completion, they can mask their return value with
 540 * SDEG_RES_IMMED_MASK .
 541 */
 542#define SDEG_RES_IMMED_MASK 0x40000000
 543
 544static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
 545static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
 546static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
 547static int resp_mode_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
 548static int resp_mode_select(struct scsi_cmnd *, struct sdebug_dev_info *);
 549static int resp_log_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
 550static int resp_readcap(struct scsi_cmnd *, struct sdebug_dev_info *);
 551static int resp_read_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
 552static int resp_write_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
 553static int resp_write_scat(struct scsi_cmnd *, struct sdebug_dev_info *);
 554static int resp_start_stop(struct scsi_cmnd *, struct sdebug_dev_info *);
 555static int resp_readcap16(struct scsi_cmnd *, struct sdebug_dev_info *);
 556static int resp_get_lba_status(struct scsi_cmnd *, struct sdebug_dev_info *);
 557static int resp_get_stream_status(struct scsi_cmnd *scp,
 558				  struct sdebug_dev_info *devip);
 559static int resp_report_tgtpgs(struct scsi_cmnd *, struct sdebug_dev_info *);
 560static int resp_unmap(struct scsi_cmnd *, struct sdebug_dev_info *);
 561static int resp_rsup_opcodes(struct scsi_cmnd *, struct sdebug_dev_info *);
 562static int resp_rsup_tmfs(struct scsi_cmnd *, struct sdebug_dev_info *);
 563static int resp_verify(struct scsi_cmnd *, struct sdebug_dev_info *);
 564static int resp_write_same_10(struct scsi_cmnd *, struct sdebug_dev_info *);
 565static int resp_write_same_16(struct scsi_cmnd *, struct sdebug_dev_info *);
 
 566static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
 567static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
 568static int resp_sync_cache(struct scsi_cmnd *, struct sdebug_dev_info *);
 569static int resp_pre_fetch(struct scsi_cmnd *, struct sdebug_dev_info *);
 570static int resp_report_zones(struct scsi_cmnd *, struct sdebug_dev_info *);
 571static int resp_atomic_write(struct scsi_cmnd *, struct sdebug_dev_info *);
 572static int resp_open_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
 573static int resp_close_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
 574static int resp_finish_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
 575static int resp_rwp_zone(struct scsi_cmnd *, struct sdebug_dev_info *);
 576
 577static int sdebug_do_add_host(bool mk_new_store);
 578static int sdebug_add_host_helper(int per_host_idx);
 579static void sdebug_do_remove_host(bool the_end);
 580static int sdebug_add_store(void);
 581static void sdebug_erase_store(int idx, struct sdeb_store_info *sip);
 582static void sdebug_erase_all_stores(bool apart_from_first);
 583
 584static void sdebug_free_queued_cmd(struct sdebug_queued_cmd *sqcp);
 585
 586/*
 587 * The following are overflow arrays for cdbs that "hit" the same index in
 588 * the opcode_info_arr array. The most time sensitive (or commonly used) cdb
 589 * should be placed in opcode_info_arr[], the others should be placed here.
 590 */
 591static const struct opcode_info_t msense_iarr[] = {
 592	{0, 0x1a, 0, F_D_IN, NULL, NULL,
 593	    {6,  0xe8, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 594};
 595
 596static const struct opcode_info_t mselect_iarr[] = {
 597	{0, 0x15, 0, F_D_OUT, NULL, NULL,
 598	    {6,  0xf1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 599};
 600
 601static const struct opcode_info_t read_iarr[] = {
 602	{0, 0x28, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(10) */
 603	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
 604	     0, 0, 0, 0} },
 605	{0, 0x8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL, /* READ(6) */
 606	    {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 607	{0, 0xa8, 0, F_D_IN | FF_MEDIA_IO, resp_read_dt0, NULL,/* READ(12) */
 608	    {12,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf,
 609	     0xc7, 0, 0, 0, 0} },
 610};
 611
 612static const struct opcode_info_t write_iarr[] = {
 613	{0, 0x2a, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(10) */
 614	    NULL, {10,  0xfb, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7,
 615		   0, 0, 0, 0, 0, 0} },
 616	{0, 0xa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,   /* WRITE(6) */
 617	    NULL, {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0,
 618		   0, 0, 0} },
 619	{0, 0xaa, 0, F_D_OUT | FF_MEDIA_IO, resp_write_dt0,  /* WRITE(12) */
 620	    NULL, {12,  0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 621		   0xbf, 0xc7, 0, 0, 0, 0} },
 622};
 623
 624static const struct opcode_info_t verify_iarr[] = {
 625	{0, 0x2f, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, resp_verify,/* VERIFY(10) */
 626	    NULL, {10,  0xf7, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xc7,
 627		   0, 0, 0, 0, 0, 0} },
 628};
 629
 630static const struct opcode_info_t sa_in_16_iarr[] = {
 631	{0, 0x9e, 0x12, F_SA_LOW | F_D_IN, resp_get_lba_status, NULL,
 632	    {16,  0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 633	     0xff, 0xff, 0xff, 0, 0xc7} },	/* GET LBA STATUS(16) */
 634	{0, 0x9e, 0x16, F_SA_LOW | F_D_IN, resp_get_stream_status, NULL,
 635	    {16, 0x16, 0, 0, 0xff, 0xff, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff,
 636	     0, 0} },	/* GET STREAM STATUS */
 637};
 638
 639static const struct opcode_info_t vl_iarr[] = {	/* VARIABLE LENGTH */
 640	{0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_dt0,
 641	    NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0xb, 0xfa,
 642		   0, 0xff, 0xff, 0xff, 0xff} },	/* WRITE(32) */
 643	{0, 0x7f, 0x11, F_SA_HIGH | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
 644	    NULL, {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x11, 0xf8,
 645		   0, 0xff, 0xff, 0x0, 0x0} },	/* WRITE SCATTERED(32) */
 646};
 647
 648static const struct opcode_info_t maint_in_iarr[] = {	/* MAINT IN */
 649	{0, 0xa3, 0xc, F_SA_LOW | F_D_IN, resp_rsup_opcodes, NULL,
 650	    {12,  0xc, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
 651	     0xc7, 0, 0, 0, 0} }, /* REPORT SUPPORTED OPERATION CODES */
 652	{0, 0xa3, 0xd, F_SA_LOW | F_D_IN, resp_rsup_tmfs, NULL,
 653	    {12,  0xd, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
 654	     0, 0} },	/* REPORTED SUPPORTED TASK MANAGEMENT FUNCTIONS */
 655};
 656
 657static const struct opcode_info_t write_same_iarr[] = {
 658	{0, 0x93, 0, F_D_OUT_MAYBE | FF_MEDIA_IO, resp_write_same_16, NULL,
 659	    {16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 660	     0xff, 0xff, 0xff, 0x3f, 0xc7} },		/* WRITE SAME(16) */
 661};
 662
 663static const struct opcode_info_t reserve_iarr[] = {
 664	{0, 0x16, 0, F_D_OUT, NULL, NULL,		/* RESERVE(6) */
 665	    {6,  0x1f, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 666};
 667
 668static const struct opcode_info_t release_iarr[] = {
 669	{0, 0x17, 0, F_D_OUT, NULL, NULL,		/* RELEASE(6) */
 670	    {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 671};
 672
 673static const struct opcode_info_t sync_cache_iarr[] = {
 674	{0, 0x91, 0, F_SYNC_DELAY | F_M_ACCESS, resp_sync_cache, NULL,
 675	    {16,  0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 676	     0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },	/* SYNC_CACHE (16) */
 677};
 678
 679static const struct opcode_info_t pre_fetch_iarr[] = {
 680	{0, 0x90, 0, F_SYNC_DELAY | FF_MEDIA_IO, resp_pre_fetch, NULL,
 681	    {16,  0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 682	     0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },	/* PRE-FETCH (16) */
 683};
 684
 685static const struct opcode_info_t zone_out_iarr[] = {	/* ZONE OUT(16) */
 686	{0, 0x94, 0x1, F_SA_LOW | F_M_ACCESS, resp_close_zone, NULL,
 687	    {16, 0x1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 688	     0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },	/* CLOSE ZONE */
 689	{0, 0x94, 0x2, F_SA_LOW | F_M_ACCESS, resp_finish_zone, NULL,
 690	    {16, 0x2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 691	     0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },	/* FINISH ZONE */
 692	{0, 0x94, 0x4, F_SA_LOW | F_M_ACCESS, resp_rwp_zone, NULL,
 693	    {16, 0x4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 694	     0xff, 0, 0, 0xff, 0xff, 0x1, 0xc7} },  /* RESET WRITE POINTER */
 695};
 696
 697static const struct opcode_info_t zone_in_iarr[] = {	/* ZONE IN(16) */
 698	{0, 0x95, 0x6, F_SA_LOW | F_D_IN | F_M_ACCESS, NULL, NULL,
 699	    {16, 0x6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 700	     0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} }, /* REPORT ZONES */
 701};
 702
 703
 704/* This array is accessed via SDEB_I_* values. Make sure all are mapped,
 705 * plus the terminating elements for logic that scans this table such as
 706 * REPORT SUPPORTED OPERATION CODES. */
 707static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEM_P1 + 1] = {
 708/* 0 */
 709	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL,	/* unknown opcodes */
 710	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 711	{0, 0x12, 0, FF_RESPOND | F_D_IN, resp_inquiry, NULL, /* INQUIRY */
 712	    {6,  0xe3, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 713	{0, 0xa0, 0, FF_RESPOND | F_D_IN, resp_report_luns, NULL,
 714	    {12,  0xe3, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
 715	     0, 0} },					/* REPORT LUNS */
 716	{0, 0x3, 0, FF_RESPOND | F_D_IN, resp_requests, NULL,
 717	    {6,  0xe1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 718	{0, 0x0, 0, F_M_ACCESS | F_RL_WLUN_OK, NULL, NULL,/* TEST UNIT READY */
 719	    {6,  0, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 720/* 5 */
 721	{ARRAY_SIZE(msense_iarr), 0x5a, 0, F_D_IN,	/* MODE SENSE(10) */
 722	    resp_mode_sense, msense_iarr, {10,  0xf8, 0xff, 0xff, 0, 0, 0,
 723		0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 724	{ARRAY_SIZE(mselect_iarr), 0x55, 0, F_D_OUT,	/* MODE SELECT(10) */
 725	    resp_mode_select, mselect_iarr, {10,  0xf1, 0, 0, 0, 0, 0, 0xff,
 726		0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 727	{0, 0x4d, 0, F_D_IN, resp_log_sense, NULL,	/* LOG SENSE */
 728	    {10,  0xe3, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0,
 729	     0, 0, 0} },
 730	{0, 0x25, 0, F_D_IN, resp_readcap, NULL,    /* READ CAPACITY(10) */
 731	    {10,  0xe1, 0xff, 0xff, 0xff, 0xff, 0, 0, 0x1, 0xc7, 0, 0, 0, 0,
 732	     0, 0} },
 733	{ARRAY_SIZE(read_iarr), 0x88, 0, F_D_IN | FF_MEDIA_IO, /* READ(16) */
 734	    resp_read_dt0, read_iarr, {16,  0xfe, 0xff, 0xff, 0xff, 0xff,
 735	    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
 736/* 10 */
 737	{ARRAY_SIZE(write_iarr), 0x8a, 0, F_D_OUT | FF_MEDIA_IO,
 738	    resp_write_dt0, write_iarr,			/* WRITE(16) */
 739		{16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 740		 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7} },
 741	{0, 0x1b, 0, F_SSU_DELAY, resp_start_stop, NULL,/* START STOP UNIT */
 742	    {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 743	{ARRAY_SIZE(sa_in_16_iarr), 0x9e, 0x10, F_SA_LOW | F_D_IN,
 744	    resp_readcap16, sa_in_16_iarr, /* SA_IN(16), READ CAPACITY(16) */
 745		{16,  0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 746		 0xff, 0xff, 0xff, 0xff, 0x1, 0xc7} },
 747	{0, 0x9f, 0x12, F_SA_LOW | F_D_OUT | FF_MEDIA_IO, resp_write_scat,
 748	    NULL, {16,  0x12, 0xf9, 0x0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff,
 749	    0xff, 0xff, 0xff, 0xff, 0xc7} },  /* SA_OUT(16), WRITE SCAT(16) */
 750	{ARRAY_SIZE(maint_in_iarr), 0xa3, 0xa, F_SA_LOW | F_D_IN,
 751	    resp_report_tgtpgs,	/* MAINT IN, REPORT TARGET PORT GROUPS */
 752		maint_in_iarr, {12,  0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff,
 753				0xff, 0, 0xc7, 0, 0, 0, 0} },
 754/* 15 */
 755	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* MAINT OUT */
 756	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 757	{ARRAY_SIZE(verify_iarr), 0x8f, 0,
 758	    F_D_OUT_MAYBE | FF_MEDIA_IO, resp_verify,	/* VERIFY(16) */
 759	    verify_iarr, {16,  0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 760			  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc7} },
 761	{ARRAY_SIZE(vl_iarr), 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_MEDIA_IO,
 762	    resp_read_dt0, vl_iarr,	/* VARIABLE LENGTH, READ(32) */
 763	    {32,  0xc7, 0, 0, 0, 0, 0x3f, 0x18, 0x0, 0x9, 0xfe, 0, 0xff, 0xff,
 764	     0xff, 0xff} },
 765	{ARRAY_SIZE(reserve_iarr), 0x56, 0, F_D_OUT,
 766	    NULL, reserve_iarr,	/* RESERVE(10) <no response function> */
 767	    {10,  0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 768	     0} },
 769	{ARRAY_SIZE(release_iarr), 0x57, 0, F_D_OUT,
 770	    NULL, release_iarr, /* RELEASE(10) <no response function> */
 771	    {10,  0x13, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 772	     0} },
 773/* 20 */
 774	{0, 0x1e, 0, 0, NULL, NULL, /* ALLOW REMOVAL */
 775	    {6,  0, 0, 0, 0x3, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 776	{0, 0x1, 0, 0, resp_start_stop, NULL, /* REWIND ?? */
 777	    {6,  0x1, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 778	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ATA_PT */
 779	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 780	{0, 0x1d, F_D_OUT, 0, NULL, NULL,	/* SEND DIAGNOSTIC */
 781	    {6,  0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 782	{0, 0x42, 0, F_D_OUT | FF_MEDIA_IO, resp_unmap, NULL, /* UNMAP */
 783	    {10,  0x1, 0, 0, 0, 0, 0x3f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 784/* 25 */
 
 
 785	{0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
 786	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
 787	     0, 0, 0, 0} },			/* WRITE_BUFFER */
 788	{ARRAY_SIZE(write_same_iarr), 0x41, 0, F_D_OUT_MAYBE | FF_MEDIA_IO,
 789	    resp_write_same_10, write_same_iarr,	/* WRITE SAME(10) */
 790		{10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0,
 791		 0, 0, 0, 0, 0} },
 792	{ARRAY_SIZE(sync_cache_iarr), 0x35, 0, F_SYNC_DELAY | F_M_ACCESS,
 793	    resp_sync_cache, sync_cache_iarr,
 794	    {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
 795	     0, 0, 0, 0} },			/* SYNC_CACHE (10) */
 796	{0, 0x89, 0, F_D_OUT | FF_MEDIA_IO, resp_comp_write, NULL,
 797	    {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
 798	     0, 0xff, 0x3f, 0xc7} },		/* COMPARE AND WRITE */
 799	{ARRAY_SIZE(pre_fetch_iarr), 0x34, 0, F_SYNC_DELAY | FF_MEDIA_IO,
 800	    resp_pre_fetch, pre_fetch_iarr,
 801	    {10,  0x2, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xc7, 0, 0,
 802	     0, 0, 0, 0} },			/* PRE-FETCH (10) */
 803
 804/* 30 */
 805	{ARRAY_SIZE(zone_out_iarr), 0x94, 0x3, F_SA_LOW | F_M_ACCESS,
 806	    resp_open_zone, zone_out_iarr, /* ZONE_OUT(16), OPEN ZONE) */
 807		{16,  0x3 /* SA */, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 808		 0xff, 0xff, 0x0, 0x0, 0xff, 0xff, 0x1, 0xc7} },
 809	{ARRAY_SIZE(zone_in_iarr), 0x95, 0x0, F_SA_LOW | F_M_ACCESS,
 810	    resp_report_zones, zone_in_iarr, /* ZONE_IN(16), REPORT ZONES) */
 811		{16,  0x0 /* SA */, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 812		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xc7} },
 813/* 31 */
 814	{0, 0x0, 0x0, F_D_OUT | FF_MEDIA_IO,
 815	    resp_atomic_write, NULL, /* ATOMIC WRITE 16 */
 816		{16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 817		 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} },
 818/* sentinel */
 819	{0xff, 0, 0, 0, NULL, NULL,		/* terminating element */
 820	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 821};
 822
 823static int sdebug_num_hosts;
 824static int sdebug_add_host = DEF_NUM_HOST;  /* in sysfs this is relative */
 825static int sdebug_ato = DEF_ATO;
 826static int sdebug_cdb_len = DEF_CDB_LEN;
 827static int sdebug_jdelay = DEF_JDELAY;	/* if > 0 then unit is jiffies */
 828static int sdebug_dev_size_mb = DEF_DEV_SIZE_PRE_INIT;
 829static int sdebug_dif = DEF_DIF;
 830static int sdebug_dix = DEF_DIX;
 831static int sdebug_dsense = DEF_D_SENSE;
 832static int sdebug_every_nth = DEF_EVERY_NTH;
 833static int sdebug_fake_rw = DEF_FAKE_RW;
 834static unsigned int sdebug_guard = DEF_GUARD;
 835static int sdebug_host_max_queue;	/* per host */
 836static int sdebug_lowest_aligned = DEF_LOWEST_ALIGNED;
 837static int sdebug_max_luns = DEF_MAX_LUNS;
 838static int sdebug_max_queue = SDEBUG_CANQUEUE;	/* per submit queue */
 839static unsigned int sdebug_medium_error_start = OPT_MEDIUM_ERR_ADDR;
 840static int sdebug_medium_error_count = OPT_MEDIUM_ERR_NUM;
 841static int sdebug_ndelay = DEF_NDELAY;	/* if > 0 then unit is nanoseconds */
 842static int sdebug_no_lun_0 = DEF_NO_LUN_0;
 843static int sdebug_no_uld;
 844static int sdebug_num_parts = DEF_NUM_PARTS;
 845static int sdebug_num_tgts = DEF_NUM_TGTS; /* targets per host */
 846static int sdebug_opt_blks = DEF_OPT_BLKS;
 847static int sdebug_opts = DEF_OPTS;
 848static int sdebug_physblk_exp = DEF_PHYSBLK_EXP;
 849static int sdebug_opt_xferlen_exp = DEF_OPT_XFERLEN_EXP;
 850static int sdebug_ptype = DEF_PTYPE; /* SCSI peripheral device type */
 851static int sdebug_scsi_level = DEF_SCSI_LEVEL;
 852static int sdebug_sector_size = DEF_SECTOR_SIZE;
 853static int sdeb_tur_ms_to_ready = DEF_TUR_MS_TO_READY;
 854static int sdebug_virtual_gb = DEF_VIRTUAL_GB;
 855static int sdebug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
 856static unsigned int sdebug_lbpu = DEF_LBPU;
 857static unsigned int sdebug_lbpws = DEF_LBPWS;
 858static unsigned int sdebug_lbpws10 = DEF_LBPWS10;
 859static unsigned int sdebug_lbprz = DEF_LBPRZ;
 860static unsigned int sdebug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
 861static unsigned int sdebug_unmap_granularity = DEF_UNMAP_GRANULARITY;
 862static unsigned int sdebug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
 863static unsigned int sdebug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
 864static unsigned int sdebug_write_same_length = DEF_WRITESAME_LENGTH;
 865static unsigned int sdebug_atomic_wr = DEF_ATOMIC_WR;
 866static unsigned int sdebug_atomic_wr_max_length = DEF_ATOMIC_WR_MAX_LENGTH;
 867static unsigned int sdebug_atomic_wr_align = DEF_ATOMIC_WR_ALIGN;
 868static unsigned int sdebug_atomic_wr_gran = DEF_ATOMIC_WR_GRAN;
 869static unsigned int sdebug_atomic_wr_max_length_bndry =
 870			DEF_ATOMIC_WR_MAX_LENGTH_BNDRY;
 871static unsigned int sdebug_atomic_wr_max_bndry = DEF_ATOMIC_WR_MAX_BNDRY;
 872static int sdebug_uuid_ctl = DEF_UUID_CTL;
 873static bool sdebug_random = DEF_RANDOM;
 874static bool sdebug_per_host_store = DEF_PER_HOST_STORE;
 875static bool sdebug_removable = DEF_REMOVABLE;
 876static bool sdebug_clustering;
 877static bool sdebug_host_lock = DEF_HOST_LOCK;
 878static bool sdebug_strict = DEF_STRICT;
 879static bool sdebug_any_injecting_opt;
 880static bool sdebug_no_rwlock;
 881static bool sdebug_verbose;
 882static bool have_dif_prot;
 883static bool write_since_sync;
 884static bool sdebug_statistics = DEF_STATISTICS;
 885static bool sdebug_wp;
 886static bool sdebug_allow_restart;
 887static enum {
 888	BLK_ZONED_NONE	= 0,
 889	BLK_ZONED_HA	= 1,
 890	BLK_ZONED_HM	= 2,
 891} sdeb_zbc_model = BLK_ZONED_NONE;
 892static char *sdeb_zbc_model_s;
 893
 894enum sam_lun_addr_method {SAM_LUN_AM_PERIPHERAL = 0x0,
 895			  SAM_LUN_AM_FLAT = 0x1,
 896			  SAM_LUN_AM_LOGICAL_UNIT = 0x2,
 897			  SAM_LUN_AM_EXTENDED = 0x3};
 898static enum sam_lun_addr_method sdebug_lun_am = SAM_LUN_AM_PERIPHERAL;
 899static int sdebug_lun_am_i = (int)SAM_LUN_AM_PERIPHERAL;
 900
 901static unsigned int sdebug_store_sectors;
 902static sector_t sdebug_capacity;	/* in sectors */
 903
 904/* old BIOS stuff, kernel may get rid of them but some mode sense pages
 905   may still need them */
 906static int sdebug_heads;		/* heads per disk */
 907static int sdebug_cylinders_per;	/* cylinders per surface */
 908static int sdebug_sectors_per;		/* sectors per cylinder */
 909
 910static LIST_HEAD(sdebug_host_list);
 911static DEFINE_MUTEX(sdebug_host_list_mutex);
 912
 913static struct xarray per_store_arr;
 914static struct xarray *per_store_ap = &per_store_arr;
 915static int sdeb_first_idx = -1;		/* invalid index ==> none created */
 916static int sdeb_most_recent_idx = -1;
 917static DEFINE_RWLOCK(sdeb_fake_rw_lck);	/* need a RW lock when fake_rw=1 */
 918
 919static unsigned long map_size;
 920static int num_aborts;
 921static int num_dev_resets;
 922static int num_target_resets;
 923static int num_bus_resets;
 924static int num_host_resets;
 925static int dix_writes;
 926static int dix_reads;
 927static int dif_errors;
 928
 929/* ZBC global data */
 930static bool sdeb_zbc_in_use;	/* true for host-aware and host-managed disks */
 931static int sdeb_zbc_zone_cap_mb;
 932static int sdeb_zbc_zone_size_mb;
 933static int sdeb_zbc_max_open = DEF_ZBC_MAX_OPEN_ZONES;
 934static int sdeb_zbc_nr_conv = DEF_ZBC_NR_CONV_ZONES;
 935
 936static int submit_queues = DEF_SUBMIT_QUEUES;  /* > 1 for multi-queue (mq) */
 937static int poll_queues; /* iouring iopoll interface.*/
 938
 939static atomic_long_t writes_by_group_number[64];
 940
 941static char sdebug_proc_name[] = MY_NAME;
 942static const char *my_name = MY_NAME;
 943
 944static const struct bus_type pseudo_lld_bus;
 945
 946static struct device_driver sdebug_driverfs_driver = {
 947	.name 		= sdebug_proc_name,
 948	.bus		= &pseudo_lld_bus,
 949};
 950
 951static const int check_condition_result =
 952	SAM_STAT_CHECK_CONDITION;
 953
 954static const int illegal_condition_result =
 955	(DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
 956
 957static const int device_qfull_result =
 958	(DID_ABORT << 16) | SAM_STAT_TASK_SET_FULL;
 959
 960static const int condition_met_result = SAM_STAT_CONDITION_MET;
 961
 962static struct dentry *sdebug_debugfs_root;
 963static ASYNC_DOMAIN_EXCLUSIVE(sdebug_async_domain);
 964
 965static void sdebug_err_free(struct rcu_head *head)
 966{
 967	struct sdebug_err_inject *inject =
 968		container_of(head, typeof(*inject), rcu);
 969
 970	kfree(inject);
 971}
 972
 973static void sdebug_err_add(struct scsi_device *sdev, struct sdebug_err_inject *new)
 974{
 975	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdev->hostdata;
 976	struct sdebug_err_inject *err;
 977
 978	spin_lock(&devip->list_lock);
 979	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
 980		if (err->type == new->type && err->cmd == new->cmd) {
 981			list_del_rcu(&err->list);
 982			call_rcu(&err->rcu, sdebug_err_free);
 983		}
 984	}
 985
 986	list_add_tail_rcu(&new->list, &devip->inject_err_list);
 987	spin_unlock(&devip->list_lock);
 988}
 989
 990static int sdebug_err_remove(struct scsi_device *sdev, const char *buf, size_t count)
 991{
 992	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdev->hostdata;
 993	struct sdebug_err_inject *err;
 994	int type;
 995	unsigned char cmd;
 996
 997	if (sscanf(buf, "- %d %hhx", &type, &cmd) != 2) {
 998		kfree(buf);
 999		return -EINVAL;
1000	}
1001
1002	spin_lock(&devip->list_lock);
1003	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
1004		if (err->type == type && err->cmd == cmd) {
1005			list_del_rcu(&err->list);
1006			call_rcu(&err->rcu, sdebug_err_free);
1007			spin_unlock(&devip->list_lock);
1008			kfree(buf);
1009			return count;
1010		}
1011	}
1012	spin_unlock(&devip->list_lock);
1013
1014	kfree(buf);
1015	return -EINVAL;
1016}
1017
1018static int sdebug_error_show(struct seq_file *m, void *p)
1019{
1020	struct scsi_device *sdev = (struct scsi_device *)m->private;
1021	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdev->hostdata;
1022	struct sdebug_err_inject *err;
1023
1024	seq_puts(m, "Type\tCount\tCommand\n");
1025
1026	rcu_read_lock();
1027	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
1028		switch (err->type) {
1029		case ERR_TMOUT_CMD:
1030		case ERR_ABORT_CMD_FAILED:
1031		case ERR_LUN_RESET_FAILED:
1032			seq_printf(m, "%d\t%d\t0x%x\n", err->type, err->cnt,
1033				err->cmd);
1034		break;
1035
1036		case ERR_FAIL_QUEUE_CMD:
1037			seq_printf(m, "%d\t%d\t0x%x\t0x%x\n", err->type,
1038				err->cnt, err->cmd, err->queuecmd_ret);
1039		break;
1040
1041		case ERR_FAIL_CMD:
1042			seq_printf(m, "%d\t%d\t0x%x\t0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
1043				err->type, err->cnt, err->cmd,
1044				err->host_byte, err->driver_byte,
1045				err->status_byte, err->sense_key,
1046				err->asc, err->asq);
1047		break;
1048		}
1049	}
1050	rcu_read_unlock();
1051
1052	return 0;
1053}
1054
1055static int sdebug_error_open(struct inode *inode, struct file *file)
1056{
1057	return single_open(file, sdebug_error_show, inode->i_private);
1058}
1059
1060static ssize_t sdebug_error_write(struct file *file, const char __user *ubuf,
1061		size_t count, loff_t *ppos)
1062{
1063	char *buf;
1064	unsigned int inject_type;
1065	struct sdebug_err_inject *inject;
1066	struct scsi_device *sdev = (struct scsi_device *)file->f_inode->i_private;
1067
1068	buf = kzalloc(count + 1, GFP_KERNEL);
1069	if (!buf)
1070		return -ENOMEM;
1071
1072	if (copy_from_user(buf, ubuf, count)) {
1073		kfree(buf);
1074		return -EFAULT;
1075	}
1076
1077	if (buf[0] == '-')
1078		return sdebug_err_remove(sdev, buf, count);
1079
1080	if (sscanf(buf, "%d", &inject_type) != 1) {
1081		kfree(buf);
1082		return -EINVAL;
1083	}
1084
1085	inject = kzalloc(sizeof(struct sdebug_err_inject), GFP_KERNEL);
1086	if (!inject) {
1087		kfree(buf);
1088		return -ENOMEM;
1089	}
1090
1091	switch (inject_type) {
1092	case ERR_TMOUT_CMD:
1093	case ERR_ABORT_CMD_FAILED:
1094	case ERR_LUN_RESET_FAILED:
1095		if (sscanf(buf, "%d %d %hhx", &inject->type, &inject->cnt,
1096			   &inject->cmd) != 3)
1097			goto out_error;
1098	break;
1099
1100	case ERR_FAIL_QUEUE_CMD:
1101		if (sscanf(buf, "%d %d %hhx %x", &inject->type, &inject->cnt,
1102			   &inject->cmd, &inject->queuecmd_ret) != 4)
1103			goto out_error;
1104	break;
1105
1106	case ERR_FAIL_CMD:
1107		if (sscanf(buf, "%d %d %hhx %hhx %hhx %hhx %hhx %hhx %hhx",
1108			   &inject->type, &inject->cnt, &inject->cmd,
1109			   &inject->host_byte, &inject->driver_byte,
1110			   &inject->status_byte, &inject->sense_key,
1111			   &inject->asc, &inject->asq) != 9)
1112			goto out_error;
1113	break;
1114
1115	default:
1116		goto out_error;
1117	break;
1118	}
1119
1120	kfree(buf);
1121	sdebug_err_add(sdev, inject);
1122
1123	return count;
1124
1125out_error:
1126	kfree(buf);
1127	kfree(inject);
1128	return -EINVAL;
1129}
1130
1131static const struct file_operations sdebug_error_fops = {
1132	.open	= sdebug_error_open,
1133	.read	= seq_read,
1134	.write	= sdebug_error_write,
1135	.release = single_release,
1136};
1137
1138static int sdebug_target_reset_fail_show(struct seq_file *m, void *p)
1139{
1140	struct scsi_target *starget = (struct scsi_target *)m->private;
1141	struct sdebug_target_info *targetip =
1142		(struct sdebug_target_info *)starget->hostdata;
1143
1144	if (targetip)
1145		seq_printf(m, "%c\n", targetip->reset_fail ? 'Y' : 'N');
1146
1147	return 0;
1148}
1149
1150static int sdebug_target_reset_fail_open(struct inode *inode, struct file *file)
1151{
1152	return single_open(file, sdebug_target_reset_fail_show, inode->i_private);
1153}
1154
1155static ssize_t sdebug_target_reset_fail_write(struct file *file,
1156		const char __user *ubuf, size_t count, loff_t *ppos)
1157{
1158	int ret;
1159	struct scsi_target *starget =
1160		(struct scsi_target *)file->f_inode->i_private;
1161	struct sdebug_target_info *targetip =
1162		(struct sdebug_target_info *)starget->hostdata;
1163
1164	if (targetip) {
1165		ret = kstrtobool_from_user(ubuf, count, &targetip->reset_fail);
1166		return ret < 0 ? ret : count;
1167	}
1168	return -ENODEV;
1169}
1170
1171static const struct file_operations sdebug_target_reset_fail_fops = {
1172	.open	= sdebug_target_reset_fail_open,
1173	.read	= seq_read,
1174	.write	= sdebug_target_reset_fail_write,
1175	.release = single_release,
1176};
1177
1178static int sdebug_target_alloc(struct scsi_target *starget)
1179{
1180	struct sdebug_target_info *targetip;
1181
1182	targetip = kzalloc(sizeof(struct sdebug_target_info), GFP_KERNEL);
1183	if (!targetip)
1184		return -ENOMEM;
1185
1186	async_synchronize_full_domain(&sdebug_async_domain);
1187
1188	targetip->debugfs_entry = debugfs_create_dir(dev_name(&starget->dev),
1189				sdebug_debugfs_root);
1190
1191	debugfs_create_file("fail_reset", 0600, targetip->debugfs_entry, starget,
1192				&sdebug_target_reset_fail_fops);
1193
1194	starget->hostdata = targetip;
1195
1196	return 0;
1197}
1198
1199static void sdebug_tartget_cleanup_async(void *data, async_cookie_t cookie)
1200{
1201	struct sdebug_target_info *targetip = data;
1202
1203	debugfs_remove(targetip->debugfs_entry);
1204	kfree(targetip);
1205}
1206
1207static void sdebug_target_destroy(struct scsi_target *starget)
1208{
1209	struct sdebug_target_info *targetip;
1210
1211	targetip = (struct sdebug_target_info *)starget->hostdata;
1212	if (targetip) {
1213		starget->hostdata = NULL;
1214		async_schedule_domain(sdebug_tartget_cleanup_async, targetip,
1215				&sdebug_async_domain);
1216	}
1217}
1218
1219/* Only do the extra work involved in logical block provisioning if one or
1220 * more of the lbpu, lbpws or lbpws10 parameters are given and we are doing
1221 * real reads and writes (i.e. not skipping them for speed).
1222 */
1223static inline bool scsi_debug_lbp(void)
1224{
1225	return 0 == sdebug_fake_rw &&
1226		(sdebug_lbpu || sdebug_lbpws || sdebug_lbpws10);
1227}
1228
1229static inline bool scsi_debug_atomic_write(void)
1230{
1231	return sdebug_fake_rw == 0 && sdebug_atomic_wr;
1232}
1233
1234static void *lba2fake_store(struct sdeb_store_info *sip,
1235			    unsigned long long lba)
1236{
1237	struct sdeb_store_info *lsip = sip;
1238
1239	lba = do_div(lba, sdebug_store_sectors);
1240	if (!sip || !sip->storep) {
1241		WARN_ON_ONCE(true);
1242		lsip = xa_load(per_store_ap, 0);  /* should never be NULL */
1243	}
1244	return lsip->storep + lba * sdebug_sector_size;
1245}
1246
1247static struct t10_pi_tuple *dif_store(struct sdeb_store_info *sip,
1248				      sector_t sector)
1249{
1250	sector = sector_div(sector, sdebug_store_sectors);
1251
1252	return sip->dif_storep + sector;
1253}
1254
1255static void sdebug_max_tgts_luns(void)
1256{
1257	struct sdebug_host_info *sdbg_host;
1258	struct Scsi_Host *hpnt;
1259
1260	mutex_lock(&sdebug_host_list_mutex);
1261	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
1262		hpnt = sdbg_host->shost;
1263		if ((hpnt->this_id >= 0) &&
1264		    (sdebug_num_tgts > hpnt->this_id))
1265			hpnt->max_id = sdebug_num_tgts + 1;
1266		else
1267			hpnt->max_id = sdebug_num_tgts;
1268		/* sdebug_max_luns; */
1269		hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
1270	}
1271	mutex_unlock(&sdebug_host_list_mutex);
1272}
1273
1274enum sdeb_cmd_data {SDEB_IN_DATA = 0, SDEB_IN_CDB = 1};
1275
1276/* Set in_bit to -1 to indicate no bit position of invalid field */
1277static void mk_sense_invalid_fld(struct scsi_cmnd *scp,
1278				 enum sdeb_cmd_data c_d,
1279				 int in_byte, int in_bit)
1280{
1281	unsigned char *sbuff;
1282	u8 sks[4];
1283	int sl, asc;
1284
1285	sbuff = scp->sense_buffer;
1286	if (!sbuff) {
1287		sdev_printk(KERN_ERR, scp->device,
1288			    "%s: sense_buffer is NULL\n", __func__);
1289		return;
1290	}
1291	asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
1292	memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
1293	scsi_build_sense(scp, sdebug_dsense, ILLEGAL_REQUEST, asc, 0);
1294	memset(sks, 0, sizeof(sks));
1295	sks[0] = 0x80;
1296	if (c_d)
1297		sks[0] |= 0x40;
1298	if (in_bit >= 0) {
1299		sks[0] |= 0x8;
1300		sks[0] |= 0x7 & in_bit;
1301	}
1302	put_unaligned_be16(in_byte, sks + 1);
1303	if (sdebug_dsense) {
1304		sl = sbuff[7] + 8;
1305		sbuff[7] = sl;
1306		sbuff[sl] = 0x2;
1307		sbuff[sl + 1] = 0x6;
1308		memcpy(sbuff + sl + 4, sks, 3);
1309	} else
1310		memcpy(sbuff + 15, sks, 3);
1311	if (sdebug_verbose)
1312		sdev_printk(KERN_INFO, scp->device, "%s:  [sense_key,asc,ascq"
1313			    "]: [0x5,0x%x,0x0] %c byte=%d, bit=%d\n",
1314			    my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
1315}
1316
1317static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
1318{
1319	if (!scp->sense_buffer) {
 
 
 
1320		sdev_printk(KERN_ERR, scp->device,
1321			    "%s: sense_buffer is NULL\n", __func__);
1322		return;
1323	}
1324	memset(scp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1325
1326	scsi_build_sense(scp, sdebug_dsense, key, asc, asq);
1327
1328	if (sdebug_verbose)
1329		sdev_printk(KERN_INFO, scp->device,
1330			    "%s:  [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
1331			    my_name, key, asc, asq);
1332}
1333
1334static void mk_sense_invalid_opcode(struct scsi_cmnd *scp)
1335{
1336	mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
1337}
1338
1339static int scsi_debug_ioctl(struct scsi_device *dev, unsigned int cmd,
1340			    void __user *arg)
1341{
1342	if (sdebug_verbose) {
1343		if (0x1261 == cmd)
1344			sdev_printk(KERN_INFO, dev,
1345				    "%s: BLKFLSBUF [0x1261]\n", __func__);
1346		else if (0x5331 == cmd)
1347			sdev_printk(KERN_INFO, dev,
1348				    "%s: CDROM_GET_CAPABILITY [0x5331]\n",
1349				    __func__);
1350		else
1351			sdev_printk(KERN_INFO, dev, "%s: cmd=0x%x\n",
1352				    __func__, cmd);
1353	}
1354	return -EINVAL;
1355	/* return -ENOTTY; // correct return but upsets fdisk */
1356}
1357
1358static void config_cdb_len(struct scsi_device *sdev)
1359{
1360	switch (sdebug_cdb_len) {
1361	case 6:	/* suggest 6 byte READ, WRITE and MODE SENSE/SELECT */
1362		sdev->use_10_for_rw = false;
1363		sdev->use_16_for_rw = false;
1364		sdev->use_10_for_ms = false;
1365		break;
1366	case 10: /* suggest 10 byte RWs and 6 byte MODE SENSE/SELECT */
1367		sdev->use_10_for_rw = true;
1368		sdev->use_16_for_rw = false;
1369		sdev->use_10_for_ms = false;
1370		break;
1371	case 12: /* suggest 10 byte RWs and 10 byte MODE SENSE/SELECT */
1372		sdev->use_10_for_rw = true;
1373		sdev->use_16_for_rw = false;
1374		sdev->use_10_for_ms = true;
1375		break;
1376	case 16:
1377		sdev->use_10_for_rw = false;
1378		sdev->use_16_for_rw = true;
1379		sdev->use_10_for_ms = true;
1380		break;
1381	case 32: /* No knobs to suggest this so same as 16 for now */
1382		sdev->use_10_for_rw = false;
1383		sdev->use_16_for_rw = true;
1384		sdev->use_10_for_ms = true;
1385		break;
1386	default:
1387		pr_warn("unexpected cdb_len=%d, force to 10\n",
1388			sdebug_cdb_len);
1389		sdev->use_10_for_rw = true;
1390		sdev->use_16_for_rw = false;
1391		sdev->use_10_for_ms = false;
1392		sdebug_cdb_len = 10;
1393		break;
1394	}
1395}
1396
1397static void all_config_cdb_len(void)
1398{
1399	struct sdebug_host_info *sdbg_host;
1400	struct Scsi_Host *shost;
1401	struct scsi_device *sdev;
1402
1403	mutex_lock(&sdebug_host_list_mutex);
1404	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
1405		shost = sdbg_host->shost;
1406		shost_for_each_device(sdev, shost) {
1407			config_cdb_len(sdev);
1408		}
1409	}
1410	mutex_unlock(&sdebug_host_list_mutex);
1411}
1412
1413static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
1414{
1415	struct sdebug_host_info *sdhp = devip->sdbg_host;
1416	struct sdebug_dev_info *dp;
1417
1418	list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
1419		if ((devip->sdbg_host == dp->sdbg_host) &&
1420		    (devip->target == dp->target)) {
1421			clear_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
 
 
1422		}
1423	}
 
1424}
1425
1426static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1427{
1428	int k;
1429
1430	k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
1431	if (k != SDEBUG_NUM_UAS) {
1432		const char *cp = NULL;
1433
1434		switch (k) {
1435		case SDEBUG_UA_POR:
1436			mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1437					POWER_ON_RESET_ASCQ);
1438			if (sdebug_verbose)
1439				cp = "power on reset";
1440			break;
1441		case SDEBUG_UA_POOCCUR:
1442			mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1443					POWER_ON_OCCURRED_ASCQ);
1444			if (sdebug_verbose)
1445				cp = "power on occurred";
1446			break;
1447		case SDEBUG_UA_BUS_RESET:
1448			mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
1449					BUS_RESET_ASCQ);
1450			if (sdebug_verbose)
1451				cp = "bus reset";
1452			break;
1453		case SDEBUG_UA_MODE_CHANGED:
1454			mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
1455					MODE_CHANGED_ASCQ);
1456			if (sdebug_verbose)
1457				cp = "mode parameters changed";
1458			break;
1459		case SDEBUG_UA_CAPACITY_CHANGED:
1460			mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
1461					CAPACITY_CHANGED_ASCQ);
1462			if (sdebug_verbose)
1463				cp = "capacity data changed";
1464			break;
1465		case SDEBUG_UA_MICROCODE_CHANGED:
1466			mk_sense_buffer(scp, UNIT_ATTENTION,
1467					TARGET_CHANGED_ASC,
1468					MICROCODE_CHANGED_ASCQ);
1469			if (sdebug_verbose)
1470				cp = "microcode has been changed";
1471			break;
1472		case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
1473			mk_sense_buffer(scp, UNIT_ATTENTION,
1474					TARGET_CHANGED_ASC,
1475					MICROCODE_CHANGED_WO_RESET_ASCQ);
1476			if (sdebug_verbose)
1477				cp = "microcode has been changed without reset";
1478			break;
1479		case SDEBUG_UA_LUNS_CHANGED:
1480			/*
1481			 * SPC-3 behavior is to report a UNIT ATTENTION with
1482			 * ASC/ASCQ REPORTED LUNS DATA HAS CHANGED on every LUN
1483			 * on the target, until a REPORT LUNS command is
1484			 * received.  SPC-4 behavior is to report it only once.
1485			 * NOTE:  sdebug_scsi_level does not use the same
1486			 * values as struct scsi_device->scsi_level.
1487			 */
1488			if (sdebug_scsi_level >= 6)	/* SPC-4 and above */
1489				clear_luns_changed_on_target(devip);
1490			mk_sense_buffer(scp, UNIT_ATTENTION,
1491					TARGET_CHANGED_ASC,
1492					LUNS_CHANGED_ASCQ);
1493			if (sdebug_verbose)
1494				cp = "reported luns data has changed";
1495			break;
1496		default:
1497			pr_warn("unexpected unit attention code=%d\n", k);
1498			if (sdebug_verbose)
1499				cp = "unknown";
1500			break;
1501		}
1502		clear_bit(k, devip->uas_bm);
1503		if (sdebug_verbose)
1504			sdev_printk(KERN_INFO, scp->device,
1505				   "%s reports: Unit attention: %s\n",
1506				   my_name, cp);
1507		return check_condition_result;
1508	}
1509	return 0;
1510}
1511
1512/* Build SCSI "data-in" buffer. Returns 0 if ok else (DID_ERROR << 16). */
1513static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1514				int arr_len)
1515{
1516	int act_len;
1517	struct scsi_data_buffer *sdb = &scp->sdb;
1518
1519	if (!sdb->length)
1520		return 0;
1521	if (scp->sc_data_direction != DMA_FROM_DEVICE)
1522		return DID_ERROR << 16;
1523
1524	act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
1525				      arr, arr_len);
1526	scsi_set_resid(scp, scsi_bufflen(scp) - act_len);
1527
1528	return 0;
1529}
1530
1531/* Partial build of SCSI "data-in" buffer. Returns 0 if ok else
1532 * (DID_ERROR << 16). Can write to offset in data-in buffer. If multiple
1533 * calls, not required to write in ascending offset order. Assumes resid
1534 * set to scsi_bufflen() prior to any calls.
1535 */
1536static int p_fill_from_dev_buffer(struct scsi_cmnd *scp, const void *arr,
1537				  int arr_len, unsigned int off_dst)
1538{
1539	unsigned int act_len, n;
1540	struct scsi_data_buffer *sdb = &scp->sdb;
1541	off_t skip = off_dst;
1542
1543	if (sdb->length <= off_dst)
1544		return 0;
1545	if (scp->sc_data_direction != DMA_FROM_DEVICE)
1546		return DID_ERROR << 16;
1547
1548	act_len = sg_pcopy_from_buffer(sdb->table.sgl, sdb->table.nents,
1549				       arr, arr_len, skip);
1550	pr_debug("%s: off_dst=%u, scsi_bufflen=%u, act_len=%u, resid=%d\n",
1551		 __func__, off_dst, scsi_bufflen(scp), act_len,
1552		 scsi_get_resid(scp));
1553	n = scsi_bufflen(scp) - (off_dst + act_len);
1554	scsi_set_resid(scp, min_t(u32, scsi_get_resid(scp), n));
1555	return 0;
1556}
1557
1558/* Fetches from SCSI "data-out" buffer. Returns number of bytes fetched into
1559 * 'arr' or -1 if error.
1560 */
1561static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
1562			       int arr_len)
1563{
1564	if (!scsi_bufflen(scp))
1565		return 0;
1566	if (scp->sc_data_direction != DMA_TO_DEVICE)
1567		return -1;
1568
1569	return scsi_sg_copy_to_buffer(scp, arr, arr_len);
1570}
1571
1572
1573static char sdebug_inq_vendor_id[9] = "Linux   ";
1574static char sdebug_inq_product_id[17] = "scsi_debug      ";
1575static char sdebug_inq_product_rev[5] = SDEBUG_VERSION;
1576/* Use some locally assigned NAAs for SAS addresses. */
1577static const u64 naa3_comp_a = 0x3222222000000000ULL;
1578static const u64 naa3_comp_b = 0x3333333000000000ULL;
1579static const u64 naa3_comp_c = 0x3111111000000000ULL;
1580
1581/* Device identification VPD page. Returns number of bytes placed in arr */
1582static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
1583			  int target_dev_id, int dev_id_num,
1584			  const char *dev_id_str, int dev_id_str_len,
1585			  const uuid_t *lu_name)
1586{
1587	int num, port_a;
1588	char b[32];
1589
1590	port_a = target_dev_id + 1;
1591	/* T10 vendor identifier field format (faked) */
1592	arr[0] = 0x2;	/* ASCII */
1593	arr[1] = 0x1;
1594	arr[2] = 0x0;
1595	memcpy(&arr[4], sdebug_inq_vendor_id, 8);
1596	memcpy(&arr[12], sdebug_inq_product_id, 16);
1597	memcpy(&arr[28], dev_id_str, dev_id_str_len);
1598	num = 8 + 16 + dev_id_str_len;
1599	arr[3] = num;
1600	num += 4;
1601	if (dev_id_num >= 0) {
1602		if (sdebug_uuid_ctl) {
1603			/* Locally assigned UUID */
1604			arr[num++] = 0x1;  /* binary (not necessarily sas) */
1605			arr[num++] = 0xa;  /* PIV=0, lu, naa */
1606			arr[num++] = 0x0;
1607			arr[num++] = 0x12;
1608			arr[num++] = 0x10; /* uuid type=1, locally assigned */
1609			arr[num++] = 0x0;
1610			memcpy(arr + num, lu_name, 16);
1611			num += 16;
1612		} else {
1613			/* NAA-3, Logical unit identifier (binary) */
1614			arr[num++] = 0x1;  /* binary (not necessarily sas) */
1615			arr[num++] = 0x3;  /* PIV=0, lu, naa */
1616			arr[num++] = 0x0;
1617			arr[num++] = 0x8;
1618			put_unaligned_be64(naa3_comp_b + dev_id_num, arr + num);
1619			num += 8;
1620		}
1621		/* Target relative port number */
1622		arr[num++] = 0x61;	/* proto=sas, binary */
1623		arr[num++] = 0x94;	/* PIV=1, target port, rel port */
1624		arr[num++] = 0x0;	/* reserved */
1625		arr[num++] = 0x4;	/* length */
1626		arr[num++] = 0x0;	/* reserved */
1627		arr[num++] = 0x0;	/* reserved */
1628		arr[num++] = 0x0;
1629		arr[num++] = 0x1;	/* relative port A */
1630	}
1631	/* NAA-3, Target port identifier */
1632	arr[num++] = 0x61;	/* proto=sas, binary */
1633	arr[num++] = 0x93;	/* piv=1, target port, naa */
1634	arr[num++] = 0x0;
1635	arr[num++] = 0x8;
1636	put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1637	num += 8;
1638	/* NAA-3, Target port group identifier */
1639	arr[num++] = 0x61;	/* proto=sas, binary */
1640	arr[num++] = 0x95;	/* piv=1, target port group id */
1641	arr[num++] = 0x0;
1642	arr[num++] = 0x4;
1643	arr[num++] = 0;
1644	arr[num++] = 0;
1645	put_unaligned_be16(port_group_id, arr + num);
1646	num += 2;
1647	/* NAA-3, Target device identifier */
1648	arr[num++] = 0x61;	/* proto=sas, binary */
1649	arr[num++] = 0xa3;	/* piv=1, target device, naa */
1650	arr[num++] = 0x0;
1651	arr[num++] = 0x8;
1652	put_unaligned_be64(naa3_comp_a + target_dev_id, arr + num);
1653	num += 8;
1654	/* SCSI name string: Target device identifier */
1655	arr[num++] = 0x63;	/* proto=sas, UTF-8 */
1656	arr[num++] = 0xa8;	/* piv=1, target device, SCSI name string */
1657	arr[num++] = 0x0;
1658	arr[num++] = 24;
1659	memcpy(arr + num, "naa.32222220", 12);
1660	num += 12;
1661	snprintf(b, sizeof(b), "%08X", target_dev_id);
1662	memcpy(arr + num, b, 8);
1663	num += 8;
1664	memset(arr + num, 0, 4);
1665	num += 4;
1666	return num;
1667}
1668
1669static unsigned char vpd84_data[] = {
1670/* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
1671    0x22,0x22,0x22,0x0,0xbb,0x1,
1672    0x22,0x22,0x22,0x0,0xbb,0x2,
1673};
1674
1675/*  Software interface identification VPD page */
1676static int inquiry_vpd_84(unsigned char *arr)
1677{
1678	memcpy(arr, vpd84_data, sizeof(vpd84_data));
1679	return sizeof(vpd84_data);
1680}
1681
1682/* Management network addresses VPD page */
1683static int inquiry_vpd_85(unsigned char *arr)
1684{
1685	int num = 0;
1686	const char *na1 = "https://www.kernel.org/config";
1687	const char *na2 = "http://www.kernel.org/log";
1688	int plen, olen;
1689
1690	arr[num++] = 0x1;	/* lu, storage config */
1691	arr[num++] = 0x0;	/* reserved */
1692	arr[num++] = 0x0;
1693	olen = strlen(na1);
1694	plen = olen + 1;
1695	if (plen % 4)
1696		plen = ((plen / 4) + 1) * 4;
1697	arr[num++] = plen;	/* length, null termianted, padded */
1698	memcpy(arr + num, na1, olen);
1699	memset(arr + num + olen, 0, plen - olen);
1700	num += plen;
1701
1702	arr[num++] = 0x4;	/* lu, logging */
1703	arr[num++] = 0x0;	/* reserved */
1704	arr[num++] = 0x0;
1705	olen = strlen(na2);
1706	plen = olen + 1;
1707	if (plen % 4)
1708		plen = ((plen / 4) + 1) * 4;
1709	arr[num++] = plen;	/* length, null terminated, padded */
1710	memcpy(arr + num, na2, olen);
1711	memset(arr + num + olen, 0, plen - olen);
1712	num += plen;
1713
1714	return num;
1715}
1716
1717/* SCSI ports VPD page */
1718static int inquiry_vpd_88(unsigned char *arr, int target_dev_id)
1719{
1720	int num = 0;
1721	int port_a, port_b;
1722
1723	port_a = target_dev_id + 1;
1724	port_b = port_a + 1;
1725	arr[num++] = 0x0;	/* reserved */
1726	arr[num++] = 0x0;	/* reserved */
1727	arr[num++] = 0x0;
1728	arr[num++] = 0x1;	/* relative port 1 (primary) */
1729	memset(arr + num, 0, 6);
1730	num += 6;
1731	arr[num++] = 0x0;
1732	arr[num++] = 12;	/* length tp descriptor */
1733	/* naa-5 target port identifier (A) */
1734	arr[num++] = 0x61;	/* proto=sas, binary */
1735	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1736	arr[num++] = 0x0;	/* reserved */
1737	arr[num++] = 0x8;	/* length */
1738	put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1739	num += 8;
1740	arr[num++] = 0x0;	/* reserved */
1741	arr[num++] = 0x0;	/* reserved */
1742	arr[num++] = 0x0;
1743	arr[num++] = 0x2;	/* relative port 2 (secondary) */
1744	memset(arr + num, 0, 6);
1745	num += 6;
1746	arr[num++] = 0x0;
1747	arr[num++] = 12;	/* length tp descriptor */
1748	/* naa-5 target port identifier (B) */
1749	arr[num++] = 0x61;	/* proto=sas, binary */
1750	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1751	arr[num++] = 0x0;	/* reserved */
1752	arr[num++] = 0x8;	/* length */
1753	put_unaligned_be64(naa3_comp_a + port_b, arr + num);
1754	num += 8;
1755
1756	return num;
1757}
1758
1759
1760static unsigned char vpd89_data[] = {
1761/* from 4th byte */ 0,0,0,0,
1762'l','i','n','u','x',' ',' ',' ',
1763'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
1764'1','2','3','4',
17650x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
17660xec,0,0,0,
17670x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
17680,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
17690x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
17700x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
17710x53,0x41,
17720x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
17730x20,0x20,
17740x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
17750x10,0x80,
17760,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
17770x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
17780x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
17790,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
17800x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
17810x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
17820,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
17830,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17840,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17850,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17860x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
17870,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
17880xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
17890,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
17900,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17930,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17960,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17970,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
18000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
18010,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
1802};
1803
1804/* ATA Information VPD page */
1805static int inquiry_vpd_89(unsigned char *arr)
1806{
1807	memcpy(arr, vpd89_data, sizeof(vpd89_data));
1808	return sizeof(vpd89_data);
1809}
1810
1811
1812static unsigned char vpdb0_data[] = {
1813	/* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
1814	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1815	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1816	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1817};
1818
1819/* Block limits VPD page (SBC-3) */
1820static int inquiry_vpd_b0(unsigned char *arr)
1821{
1822	unsigned int gran;
1823
1824	memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
1825
1826	/* Optimal transfer length granularity */
1827	if (sdebug_opt_xferlen_exp != 0 &&
1828	    sdebug_physblk_exp < sdebug_opt_xferlen_exp)
1829		gran = 1 << sdebug_opt_xferlen_exp;
1830	else
1831		gran = 1 << sdebug_physblk_exp;
1832	put_unaligned_be16(gran, arr + 2);
1833
1834	/* Maximum Transfer Length */
1835	if (sdebug_store_sectors > 0x400)
1836		put_unaligned_be32(sdebug_store_sectors, arr + 4);
1837
1838	/* Optimal Transfer Length */
1839	put_unaligned_be32(sdebug_opt_blks, &arr[8]);
1840
1841	if (sdebug_lbpu) {
1842		/* Maximum Unmap LBA Count */
1843		put_unaligned_be32(sdebug_unmap_max_blocks, &arr[16]);
1844
1845		/* Maximum Unmap Block Descriptor Count */
1846		put_unaligned_be32(sdebug_unmap_max_desc, &arr[20]);
1847	}
1848
1849	/* Unmap Granularity Alignment */
1850	if (sdebug_unmap_alignment) {
1851		put_unaligned_be32(sdebug_unmap_alignment, &arr[28]);
1852		arr[28] |= 0x80; /* UGAVALID */
1853	}
1854
1855	/* Optimal Unmap Granularity */
1856	put_unaligned_be32(sdebug_unmap_granularity, &arr[24]);
1857
1858	/* Maximum WRITE SAME Length */
1859	put_unaligned_be64(sdebug_write_same_length, &arr[32]);
1860
1861	if (sdebug_atomic_wr) {
1862		put_unaligned_be32(sdebug_atomic_wr_max_length, &arr[40]);
1863		put_unaligned_be32(sdebug_atomic_wr_align, &arr[44]);
1864		put_unaligned_be32(sdebug_atomic_wr_gran, &arr[48]);
1865		put_unaligned_be32(sdebug_atomic_wr_max_length_bndry, &arr[52]);
1866		put_unaligned_be32(sdebug_atomic_wr_max_bndry, &arr[56]);
1867	}
1868
1869	return 0x3c; /* Mandatory page length for Logical Block Provisioning */
 
 
1870}
1871
1872/* Block device characteristics VPD page (SBC-3) */
1873static int inquiry_vpd_b1(struct sdebug_dev_info *devip, unsigned char *arr)
1874{
1875	memset(arr, 0, 0x3c);
1876	arr[0] = 0;
1877	arr[1] = 1;	/* non rotating medium (e.g. solid state) */
1878	arr[2] = 0;
1879	arr[3] = 5;	/* less than 1.8" */
1880
1881	return 0x3c;
1882}
1883
1884/* Logical block provisioning VPD page (SBC-4) */
1885static int inquiry_vpd_b2(unsigned char *arr)
1886{
1887	memset(arr, 0, 0x4);
1888	arr[0] = 0;			/* threshold exponent */
1889	if (sdebug_lbpu)
1890		arr[1] = 1 << 7;
1891	if (sdebug_lbpws)
1892		arr[1] |= 1 << 6;
1893	if (sdebug_lbpws10)
1894		arr[1] |= 1 << 5;
1895	if (sdebug_lbprz && scsi_debug_lbp())
1896		arr[1] |= (sdebug_lbprz & 0x7) << 2;  /* sbc4r07 and later */
1897	/* anc_sup=0; dp=0 (no provisioning group descriptor) */
1898	/* minimum_percentage=0; provisioning_type=0 (unknown) */
1899	/* threshold_percentage=0 */
1900	return 0x4;
1901}
1902
1903/* Zoned block device characteristics VPD page (ZBC mandatory) */
1904static int inquiry_vpd_b6(struct sdebug_dev_info *devip, unsigned char *arr)
1905{
1906	memset(arr, 0, 0x3c);
1907	arr[0] = 0x1; /* set URSWRZ (unrestricted read in seq. wr req zone) */
1908	/*
1909	 * Set Optimal number of open sequential write preferred zones and
1910	 * Optimal number of non-sequentially written sequential write
1911	 * preferred zones fields to 'not reported' (0xffffffff). Leave other
1912	 * fields set to zero, apart from Max. number of open swrz_s field.
1913	 */
1914	put_unaligned_be32(0xffffffff, &arr[4]);
1915	put_unaligned_be32(0xffffffff, &arr[8]);
1916	if (sdeb_zbc_model == BLK_ZONED_HM && devip->max_open)
1917		put_unaligned_be32(devip->max_open, &arr[12]);
1918	else
1919		put_unaligned_be32(0xffffffff, &arr[12]);
1920	if (devip->zcap < devip->zsize) {
1921		arr[19] = ZBC_CONSTANT_ZONE_START_OFFSET;
1922		put_unaligned_be64(devip->zsize, &arr[20]);
1923	} else {
1924		arr[19] = 0;
1925	}
1926	return 0x3c;
1927}
1928
1929#define SDEBUG_BLE_LEN_AFTER_B4 28	/* thus vpage 32 bytes long */
1930
1931enum { MAXIMUM_NUMBER_OF_STREAMS = 6, PERMANENT_STREAM_COUNT = 5 };
1932
1933/* Block limits extension VPD page (SBC-4) */
1934static int inquiry_vpd_b7(unsigned char *arrb4)
1935{
1936	memset(arrb4, 0, SDEBUG_BLE_LEN_AFTER_B4);
1937	arrb4[1] = 1; /* Reduced stream control support (RSCS) */
1938	put_unaligned_be16(MAXIMUM_NUMBER_OF_STREAMS, &arrb4[2]);
1939	return SDEBUG_BLE_LEN_AFTER_B4;
1940}
1941
1942#define SDEBUG_LONG_INQ_SZ 96
1943#define SDEBUG_MAX_INQ_ARR_SZ 584
1944
1945static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1946{
1947	unsigned char pq_pdt;
1948	unsigned char *arr;
1949	unsigned char *cmd = scp->cmnd;
1950	u32 alloc_len, n;
1951	int ret;
1952	bool have_wlun, is_disk, is_zbc, is_disk_zbc;
1953
1954	alloc_len = get_unaligned_be16(cmd + 3);
1955	arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
1956	if (! arr)
1957		return DID_REQUEUE << 16;
1958	is_disk = (sdebug_ptype == TYPE_DISK);
1959	is_zbc = devip->zoned;
1960	is_disk_zbc = (is_disk || is_zbc);
1961	have_wlun = scsi_is_wlun(scp->device->lun);
1962	if (have_wlun)
1963		pq_pdt = TYPE_WLUN;	/* present, wlun */
1964	else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL))
1965		pq_pdt = 0x7f;	/* not present, PQ=3, PDT=0x1f */
1966	else
1967		pq_pdt = (sdebug_ptype & 0x1f);
1968	arr[0] = pq_pdt;
1969	if (0x2 & cmd[1]) {  /* CMDDT bit set */
1970		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 1);
1971		kfree(arr);
1972		return check_condition_result;
1973	} else if (0x1 & cmd[1]) {  /* EVPD bit set */
1974		int lu_id_num, port_group_id, target_dev_id;
1975		u32 len;
1976		char lu_id_str[6];
1977		int host_no = devip->sdbg_host->shost->host_no;
1978
1979		arr[1] = cmd[2];
1980		port_group_id = (((host_no + 1) & 0x7f) << 8) +
1981		    (devip->channel & 0x7f);
1982		if (sdebug_vpd_use_hostno == 0)
1983			host_no = 0;
1984		lu_id_num = have_wlun ? -1 : (((host_no + 1) * 2000) +
1985			    (devip->target * 1000) + devip->lun);
1986		target_dev_id = ((host_no + 1) * 2000) +
1987				 (devip->target * 1000) - 3;
1988		len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
1989		if (0 == cmd[2]) { /* supported vital product data pages */
 
1990			n = 4;
1991			arr[n++] = 0x0;   /* this page */
1992			arr[n++] = 0x80;  /* unit serial number */
1993			arr[n++] = 0x83;  /* device identification */
1994			arr[n++] = 0x84;  /* software interface ident. */
1995			arr[n++] = 0x85;  /* management network addresses */
1996			arr[n++] = 0x86;  /* extended inquiry */
1997			arr[n++] = 0x87;  /* mode page policy */
1998			arr[n++] = 0x88;  /* SCSI ports */
1999			if (is_disk_zbc) {	  /* SBC or ZBC */
2000				arr[n++] = 0x89;  /* ATA information */
2001				arr[n++] = 0xb0;  /* Block limits */
2002				arr[n++] = 0xb1;  /* Block characteristics */
2003				if (is_disk)
2004					arr[n++] = 0xb2;  /* LB Provisioning */
2005				if (is_zbc)
2006					arr[n++] = 0xb6;  /* ZB dev. char. */
2007				arr[n++] = 0xb7;  /* Block limits extension */
2008			}
2009			arr[3] = n - 4;	  /* number of supported VPD pages */
2010		} else if (0x80 == cmd[2]) { /* unit serial number */
 
2011			arr[3] = len;
2012			memcpy(&arr[4], lu_id_str, len);
2013		} else if (0x83 == cmd[2]) { /* device identification */
 
2014			arr[3] = inquiry_vpd_83(&arr[4], port_group_id,
2015						target_dev_id, lu_id_num,
2016						lu_id_str, len,
2017						&devip->lu_name);
2018		} else if (0x84 == cmd[2]) { /* Software interface ident. */
 
2019			arr[3] = inquiry_vpd_84(&arr[4]);
2020		} else if (0x85 == cmd[2]) { /* Management network addresses */
 
2021			arr[3] = inquiry_vpd_85(&arr[4]);
2022		} else if (0x86 == cmd[2]) { /* extended inquiry */
 
2023			arr[3] = 0x3c;	/* number of following entries */
2024			if (sdebug_dif == T10_PI_TYPE3_PROTECTION)
2025				arr[4] = 0x4;	/* SPT: GRD_CHK:1 */
2026			else if (have_dif_prot)
2027				arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
2028			else
2029				arr[4] = 0x0;   /* no protection stuff */
2030			/*
2031			 * GROUP_SUP=1; HEADSUP=1 (HEAD OF QUEUE); ORDSUP=1
2032			 * (ORDERED queuing); SIMPSUP=1 (SIMPLE queuing).
2033			 */
2034			arr[5] = 0x17;
2035		} else if (0x87 == cmd[2]) { /* mode page policy */
 
2036			arr[3] = 0x8;	/* number of following entries */
2037			arr[4] = 0x2;	/* disconnect-reconnect mp */
2038			arr[6] = 0x80;	/* mlus, shared */
2039			arr[8] = 0x18;	 /* protocol specific lu */
2040			arr[10] = 0x82;	 /* mlus, per initiator port */
2041		} else if (0x88 == cmd[2]) { /* SCSI Ports */
 
2042			arr[3] = inquiry_vpd_88(&arr[4], target_dev_id);
2043		} else if (is_disk_zbc && 0x89 == cmd[2]) { /* ATA info */
 
2044			n = inquiry_vpd_89(&arr[4]);
2045			put_unaligned_be16(n, arr + 2);
2046		} else if (is_disk_zbc && 0xb0 == cmd[2]) { /* Block limits */
 
2047			arr[3] = inquiry_vpd_b0(&arr[4]);
2048		} else if (is_disk_zbc && 0xb1 == cmd[2]) { /* Block char. */
2049			arr[3] = inquiry_vpd_b1(devip, &arr[4]);
 
2050		} else if (is_disk && 0xb2 == cmd[2]) { /* LB Prov. */
 
2051			arr[3] = inquiry_vpd_b2(&arr[4]);
2052		} else if (is_zbc && cmd[2] == 0xb6) { /* ZB dev. charact. */
2053			arr[3] = inquiry_vpd_b6(devip, &arr[4]);
2054		} else if (cmd[2] == 0xb7) { /* block limits extension page */
2055			arr[3] = inquiry_vpd_b7(&arr[4]);
2056		} else {
2057			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
2058			kfree(arr);
2059			return check_condition_result;
2060		}
2061		len = min_t(u32, get_unaligned_be16(arr + 2) + 4, alloc_len);
2062		ret = fill_from_dev_buffer(scp, arr,
2063			    min_t(u32, len, SDEBUG_MAX_INQ_ARR_SZ));
2064		kfree(arr);
2065		return ret;
2066	}
2067	/* drops through here for a standard inquiry */
2068	arr[1] = sdebug_removable ? 0x80 : 0;	/* Removable disk */
2069	arr[2] = sdebug_scsi_level;
2070	arr[3] = 2;    /* response_data_format==2 */
2071	arr[4] = SDEBUG_LONG_INQ_SZ - 5;
2072	arr[5] = (int)have_dif_prot;	/* PROTECT bit */
2073	if (sdebug_vpd_use_hostno == 0)
2074		arr[5] |= 0x10; /* claim: implicit TPGS */
2075	arr[6] = 0x10; /* claim: MultiP */
2076	/* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
2077	arr[7] = 0xa; /* claim: LINKED + CMDQUE */
2078	memcpy(&arr[8], sdebug_inq_vendor_id, 8);
2079	memcpy(&arr[16], sdebug_inq_product_id, 16);
2080	memcpy(&arr[32], sdebug_inq_product_rev, 4);
2081	/* Use Vendor Specific area to place driver date in ASCII hex */
2082	memcpy(&arr[36], sdebug_version_date, 8);
2083	/* version descriptors (2 bytes each) follow */
2084	put_unaligned_be16(0xc0, arr + 58);   /* SAM-6 no version claimed */
2085	put_unaligned_be16(0x5c0, arr + 60);  /* SPC-5 no version claimed */
2086	n = 62;
2087	if (is_disk) {		/* SBC-4 no version claimed */
2088		put_unaligned_be16(0x600, arr + n);
2089		n += 2;
2090	} else if (sdebug_ptype == TYPE_TAPE) {	/* SSC-4 rev 3 */
2091		put_unaligned_be16(0x525, arr + n);
2092		n += 2;
2093	} else if (is_zbc) {	/* ZBC BSR INCITS 536 revision 05 */
2094		put_unaligned_be16(0x624, arr + n);
2095		n += 2;
2096	}
2097	put_unaligned_be16(0x2100, arr + n);	/* SPL-4 no version claimed */
2098	ret = fill_from_dev_buffer(scp, arr,
2099			    min_t(u32, alloc_len, SDEBUG_LONG_INQ_SZ));
2100	kfree(arr);
2101	return ret;
2102}
2103
2104/* See resp_iec_m_pg() for how this data is manipulated */
2105static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
2106				   0, 0, 0x0, 0x0};
2107
2108static int resp_requests(struct scsi_cmnd *scp,
2109			 struct sdebug_dev_info *devip)
2110{
 
2111	unsigned char *cmd = scp->cmnd;
2112	unsigned char arr[SCSI_SENSE_BUFFERSIZE];	/* assume >= 18 bytes */
2113	bool dsense = !!(cmd[1] & 1);
2114	u32 alloc_len = cmd[4];
2115	u32 len = 18;
2116	int stopped_state = atomic_read(&devip->stopped);
2117
2118	memset(arr, 0, sizeof(arr));
2119	if (stopped_state > 0) {	/* some "pollable" data [spc6r02: 5.12.2] */
2120		if (dsense) {
2121			arr[0] = 0x72;
2122			arr[1] = NOT_READY;
2123			arr[2] = LOGICAL_UNIT_NOT_READY;
2124			arr[3] = (stopped_state == 2) ? 0x1 : 0x2;
2125			len = 8;
2126		} else {
2127			arr[0] = 0x70;
2128			arr[2] = NOT_READY;		/* NO_SENSE in sense_key */
2129			arr[7] = 0xa;			/* 18 byte sense buffer */
2130			arr[12] = LOGICAL_UNIT_NOT_READY;
2131			arr[13] = (stopped_state == 2) ? 0x1 : 0x2;
2132		}
2133	} else if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
2134		/* Information exceptions control mode page: TEST=1, MRIE=6 */
2135		if (dsense) {
2136			arr[0] = 0x72;
2137			arr[1] = 0x0;		/* NO_SENSE in sense_key */
2138			arr[2] = THRESHOLD_EXCEEDED;
2139			arr[3] = 0xff;		/* Failure prediction(false) */
2140			len = 8;
2141		} else {
2142			arr[0] = 0x70;
2143			arr[2] = 0x0;		/* NO_SENSE in sense_key */
2144			arr[7] = 0xa;   	/* 18 byte sense buffer */
2145			arr[12] = THRESHOLD_EXCEEDED;
2146			arr[13] = 0xff;		/* Failure prediction(false) */
2147		}
2148	} else {	/* nothing to report */
2149		if (dsense) {
2150			len = 8;
2151			memset(arr, 0, len);
 
 
 
 
 
 
 
 
 
 
 
 
2152			arr[0] = 0x72;
 
 
 
 
2153		} else {
2154			memset(arr, 0, len);
2155			arr[0] = 0x70;
 
2156			arr[7] = 0xa;
 
 
2157		}
 
2158	}
2159	return fill_from_dev_buffer(scp, arr, min_t(u32, len, alloc_len));
 
2160}
2161
2162static int resp_start_stop(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
 
2163{
2164	unsigned char *cmd = scp->cmnd;
2165	int power_cond, want_stop, stopped_state;
2166	bool changing;
2167
2168	power_cond = (cmd[4] & 0xf0) >> 4;
2169	if (power_cond) {
2170		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 7);
2171		return check_condition_result;
2172	}
2173	want_stop = !(cmd[4] & 1);
2174	stopped_state = atomic_read(&devip->stopped);
2175	if (stopped_state == 2) {
2176		ktime_t now_ts = ktime_get_boottime();
2177
2178		if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
2179			u64 diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
2180
2181			if (diff_ns >= ((u64)sdeb_tur_ms_to_ready * 1000000)) {
2182				/* tur_ms_to_ready timer extinguished */
2183				atomic_set(&devip->stopped, 0);
2184				stopped_state = 0;
2185			}
2186		}
2187		if (stopped_state == 2) {
2188			if (want_stop) {
2189				stopped_state = 1;	/* dummy up success */
2190			} else {	/* Disallow tur_ms_to_ready delay to be overridden */
2191				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 0 /* START bit */);
2192				return check_condition_result;
2193			}
2194		}
2195	}
2196	changing = (stopped_state != want_stop);
2197	if (changing)
2198		atomic_xchg(&devip->stopped, want_stop);
2199	if (!changing || (cmd[1] & 0x1))  /* state unchanged or IMMED bit set in cdb */
2200		return SDEG_RES_IMMED_MASK;
2201	else
2202		return 0;
2203}
2204
2205static sector_t get_sdebug_capacity(void)
2206{
2207	static const unsigned int gibibyte = 1073741824;
2208
2209	if (sdebug_virtual_gb > 0)
2210		return (sector_t)sdebug_virtual_gb *
2211			(gibibyte / sdebug_sector_size);
2212	else
2213		return sdebug_store_sectors;
2214}
2215
2216#define SDEBUG_READCAP_ARR_SZ 8
2217static int resp_readcap(struct scsi_cmnd *scp,
2218			struct sdebug_dev_info *devip)
2219{
2220	unsigned char arr[SDEBUG_READCAP_ARR_SZ];
2221	unsigned int capac;
2222
2223	/* following just in case virtual_gb changed */
2224	sdebug_capacity = get_sdebug_capacity();
2225	memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
2226	if (sdebug_capacity < 0xffffffff) {
2227		capac = (unsigned int)sdebug_capacity - 1;
2228		put_unaligned_be32(capac, arr + 0);
2229	} else
2230		put_unaligned_be32(0xffffffff, arr + 0);
2231	put_unaligned_be16(sdebug_sector_size, arr + 6);
2232	return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
2233}
2234
2235#define SDEBUG_READCAP16_ARR_SZ 32
2236static int resp_readcap16(struct scsi_cmnd *scp,
2237			  struct sdebug_dev_info *devip)
2238{
2239	unsigned char *cmd = scp->cmnd;
2240	unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
2241	u32 alloc_len;
2242
2243	alloc_len = get_unaligned_be32(cmd + 10);
2244	/* following just in case virtual_gb changed */
2245	sdebug_capacity = get_sdebug_capacity();
2246	memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
2247	put_unaligned_be64((u64)(sdebug_capacity - 1), arr + 0);
2248	put_unaligned_be32(sdebug_sector_size, arr + 8);
2249	arr[13] = sdebug_physblk_exp & 0xf;
2250	arr[14] = (sdebug_lowest_aligned >> 8) & 0x3f;
2251
2252	if (scsi_debug_lbp()) {
2253		arr[14] |= 0x80; /* LBPME */
2254		/* from sbc4r07, this LBPRZ field is 1 bit, but the LBPRZ in
2255		 * the LB Provisioning VPD page is 3 bits. Note that lbprz=2
2256		 * in the wider field maps to 0 in this field.
2257		 */
2258		if (sdebug_lbprz & 1)	/* precisely what the draft requires */
2259			arr[14] |= 0x40;
2260	}
2261
2262	/*
2263	 * Since the scsi_debug READ CAPACITY implementation always reports the
2264	 * total disk capacity, set RC BASIS = 1 for host-managed ZBC devices.
2265	 */
2266	if (devip->zoned)
2267		arr[12] |= 1 << 4;
2268
2269	arr[15] = sdebug_lowest_aligned & 0xff;
2270
2271	if (have_dif_prot) {
2272		arr[12] = (sdebug_dif - 1) << 1; /* P_TYPE */
2273		arr[12] |= 1; /* PROT_EN */
2274	}
2275
2276	return fill_from_dev_buffer(scp, arr,
2277			    min_t(u32, alloc_len, SDEBUG_READCAP16_ARR_SZ));
2278}
2279
2280#define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
2281
2282static int resp_report_tgtpgs(struct scsi_cmnd *scp,
2283			      struct sdebug_dev_info *devip)
2284{
2285	unsigned char *cmd = scp->cmnd;
2286	unsigned char *arr;
2287	int host_no = devip->sdbg_host->shost->host_no;
 
2288	int port_group_a, port_group_b, port_a, port_b;
2289	u32 alen, n, rlen;
2290	int ret;
2291
2292	alen = get_unaligned_be32(cmd + 6);
2293	arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
2294	if (! arr)
2295		return DID_REQUEUE << 16;
2296	/*
2297	 * EVPD page 0x88 states we have two ports, one
2298	 * real and a fake port with no device connected.
2299	 * So we create two port groups with one port each
2300	 * and set the group with port B to unavailable.
2301	 */
2302	port_a = 0x1; /* relative port A */
2303	port_b = 0x2; /* relative port B */
2304	port_group_a = (((host_no + 1) & 0x7f) << 8) +
2305			(devip->channel & 0x7f);
2306	port_group_b = (((host_no + 1) & 0x7f) << 8) +
2307			(devip->channel & 0x7f) + 0x80;
2308
2309	/*
2310	 * The asymmetric access state is cycled according to the host_id.
2311	 */
2312	n = 4;
2313	if (sdebug_vpd_use_hostno == 0) {
2314		arr[n++] = host_no % 3; /* Asymm access state */
2315		arr[n++] = 0x0F; /* claim: all states are supported */
2316	} else {
2317		arr[n++] = 0x0; /* Active/Optimized path */
2318		arr[n++] = 0x01; /* only support active/optimized paths */
2319	}
2320	put_unaligned_be16(port_group_a, arr + n);
2321	n += 2;
2322	arr[n++] = 0;    /* Reserved */
2323	arr[n++] = 0;    /* Status code */
2324	arr[n++] = 0;    /* Vendor unique */
2325	arr[n++] = 0x1;  /* One port per group */
2326	arr[n++] = 0;    /* Reserved */
2327	arr[n++] = 0;    /* Reserved */
2328	put_unaligned_be16(port_a, arr + n);
2329	n += 2;
2330	arr[n++] = 3;    /* Port unavailable */
2331	arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
2332	put_unaligned_be16(port_group_b, arr + n);
2333	n += 2;
2334	arr[n++] = 0;    /* Reserved */
2335	arr[n++] = 0;    /* Status code */
2336	arr[n++] = 0;    /* Vendor unique */
2337	arr[n++] = 0x1;  /* One port per group */
2338	arr[n++] = 0;    /* Reserved */
2339	arr[n++] = 0;    /* Reserved */
2340	put_unaligned_be16(port_b, arr + n);
2341	n += 2;
2342
2343	rlen = n - 4;
2344	put_unaligned_be32(rlen, arr + 0);
2345
2346	/*
2347	 * Return the smallest value of either
2348	 * - The allocated length
2349	 * - The constructed command length
2350	 * - The maximum array size
2351	 */
2352	rlen = min(alen, n);
2353	ret = fill_from_dev_buffer(scp, arr,
2354			   min_t(u32, rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
2355	kfree(arr);
2356	return ret;
2357}
2358
2359static int resp_rsup_opcodes(struct scsi_cmnd *scp,
2360			     struct sdebug_dev_info *devip)
2361{
2362	bool rctd;
2363	u8 reporting_opts, req_opcode, sdeb_i, supp;
2364	u16 req_sa, u;
2365	u32 alloc_len, a_len;
2366	int k, offset, len, errsts, count, bump, na;
2367	const struct opcode_info_t *oip;
2368	const struct opcode_info_t *r_oip;
2369	u8 *arr;
2370	u8 *cmd = scp->cmnd;
2371
2372	rctd = !!(cmd[2] & 0x80);
2373	reporting_opts = cmd[2] & 0x7;
2374	req_opcode = cmd[3];
2375	req_sa = get_unaligned_be16(cmd + 4);
2376	alloc_len = get_unaligned_be32(cmd + 6);
2377	if (alloc_len < 4 || alloc_len > 0xffff) {
2378		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
2379		return check_condition_result;
2380	}
2381	if (alloc_len > 8192)
2382		a_len = 8192;
2383	else
2384		a_len = alloc_len;
2385	arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
2386	if (NULL == arr) {
2387		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
2388				INSUFF_RES_ASCQ);
2389		return check_condition_result;
2390	}
2391	switch (reporting_opts) {
2392	case 0:	/* all commands */
2393		/* count number of commands */
2394		for (count = 0, oip = opcode_info_arr;
2395		     oip->num_attached != 0xff; ++oip) {
2396			if (F_INV_OP & oip->flags)
2397				continue;
2398			count += (oip->num_attached + 1);
2399		}
2400		bump = rctd ? 20 : 8;
2401		put_unaligned_be32(count * bump, arr);
2402		for (offset = 4, oip = opcode_info_arr;
2403		     oip->num_attached != 0xff && offset < a_len; ++oip) {
2404			if (F_INV_OP & oip->flags)
2405				continue;
2406			na = oip->num_attached;
2407			arr[offset] = oip->opcode;
2408			put_unaligned_be16(oip->sa, arr + offset + 2);
2409			if (rctd)
2410				arr[offset + 5] |= 0x2;
2411			if (FF_SA & oip->flags)
2412				arr[offset + 5] |= 0x1;
2413			put_unaligned_be16(oip->len_mask[0], arr + offset + 6);
2414			if (rctd)
2415				put_unaligned_be16(0xa, arr + offset + 8);
2416			r_oip = oip;
2417			for (k = 0, oip = oip->arrp; k < na; ++k, ++oip) {
2418				if (F_INV_OP & oip->flags)
2419					continue;
2420				offset += bump;
2421				arr[offset] = oip->opcode;
2422				put_unaligned_be16(oip->sa, arr + offset + 2);
2423				if (rctd)
2424					arr[offset + 5] |= 0x2;
2425				if (FF_SA & oip->flags)
2426					arr[offset + 5] |= 0x1;
2427				put_unaligned_be16(oip->len_mask[0],
2428						   arr + offset + 6);
2429				if (rctd)
2430					put_unaligned_be16(0xa,
2431							   arr + offset + 8);
2432			}
2433			oip = r_oip;
2434			offset += bump;
2435		}
2436		break;
2437	case 1:	/* one command: opcode only */
2438	case 2:	/* one command: opcode plus service action */
2439	case 3:	/* one command: if sa==0 then opcode only else opcode+sa */
2440		sdeb_i = opcode_ind_arr[req_opcode];
2441		oip = &opcode_info_arr[sdeb_i];
2442		if (F_INV_OP & oip->flags) {
2443			supp = 1;
2444			offset = 4;
2445		} else {
2446			if (1 == reporting_opts) {
2447				if (FF_SA & oip->flags) {
2448					mk_sense_invalid_fld(scp, SDEB_IN_CDB,
2449							     2, 2);
2450					kfree(arr);
2451					return check_condition_result;
2452				}
2453				req_sa = 0;
2454			} else if (2 == reporting_opts &&
2455				   0 == (FF_SA & oip->flags)) {
2456				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
2457				kfree(arr);	/* point at requested sa */
2458				return check_condition_result;
2459			}
2460			if (0 == (FF_SA & oip->flags) &&
2461			    req_opcode == oip->opcode)
2462				supp = 3;
2463			else if (0 == (FF_SA & oip->flags)) {
2464				na = oip->num_attached;
2465				for (k = 0, oip = oip->arrp; k < na;
2466				     ++k, ++oip) {
2467					if (req_opcode == oip->opcode)
2468						break;
2469				}
2470				supp = (k >= na) ? 1 : 3;
2471			} else if (req_sa != oip->sa) {
2472				na = oip->num_attached;
2473				for (k = 0, oip = oip->arrp; k < na;
2474				     ++k, ++oip) {
2475					if (req_sa == oip->sa)
2476						break;
2477				}
2478				supp = (k >= na) ? 1 : 3;
2479			} else
2480				supp = 3;
2481			if (3 == supp) {
2482				u = oip->len_mask[0];
2483				put_unaligned_be16(u, arr + 2);
2484				arr[4] = oip->opcode;
2485				for (k = 1; k < u; ++k)
2486					arr[4 + k] = (k < 16) ?
2487						 oip->len_mask[k] : 0xff;
2488				offset = 4 + u;
2489			} else
2490				offset = 4;
2491		}
2492		arr[1] = (rctd ? 0x80 : 0) | supp;
2493		if (rctd) {
2494			put_unaligned_be16(0xa, arr + offset);
2495			offset += 12;
2496		}
2497		break;
2498	default:
2499		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
2500		kfree(arr);
2501		return check_condition_result;
2502	}
2503	offset = (offset < a_len) ? offset : a_len;
2504	len = (offset < alloc_len) ? offset : alloc_len;
2505	errsts = fill_from_dev_buffer(scp, arr, len);
2506	kfree(arr);
2507	return errsts;
2508}
2509
2510static int resp_rsup_tmfs(struct scsi_cmnd *scp,
2511			  struct sdebug_dev_info *devip)
2512{
2513	bool repd;
2514	u32 alloc_len, len;
2515	u8 arr[16];
2516	u8 *cmd = scp->cmnd;
2517
2518	memset(arr, 0, sizeof(arr));
2519	repd = !!(cmd[2] & 0x80);
2520	alloc_len = get_unaligned_be32(cmd + 6);
2521	if (alloc_len < 4) {
2522		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
2523		return check_condition_result;
2524	}
2525	arr[0] = 0xc8;		/* ATS | ATSS | LURS */
2526	arr[1] = 0x1;		/* ITNRS */
2527	if (repd) {
2528		arr[3] = 0xc;
2529		len = 16;
2530	} else
2531		len = 4;
2532
2533	len = (len < alloc_len) ? len : alloc_len;
2534	return fill_from_dev_buffer(scp, arr, len);
2535}
2536
2537/* <<Following mode page info copied from ST318451LW>> */
2538
2539static int resp_err_recov_pg(unsigned char *p, int pcontrol, int target)
2540{	/* Read-Write Error Recovery page for mode_sense */
2541	unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
2542					5, 0, 0xff, 0xff};
2543
2544	memcpy(p, err_recov_pg, sizeof(err_recov_pg));
2545	if (1 == pcontrol)
2546		memset(p + 2, 0, sizeof(err_recov_pg) - 2);
2547	return sizeof(err_recov_pg);
2548}
2549
2550static int resp_disconnect_pg(unsigned char *p, int pcontrol, int target)
2551{ 	/* Disconnect-Reconnect page for mode_sense */
2552	unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
2553					 0, 0, 0, 0, 0, 0, 0, 0};
2554
2555	memcpy(p, disconnect_pg, sizeof(disconnect_pg));
2556	if (1 == pcontrol)
2557		memset(p + 2, 0, sizeof(disconnect_pg) - 2);
2558	return sizeof(disconnect_pg);
2559}
2560
2561static int resp_format_pg(unsigned char *p, int pcontrol, int target)
2562{       /* Format device page for mode_sense */
2563	unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
2564				     0, 0, 0, 0, 0, 0, 0, 0,
2565				     0, 0, 0, 0, 0x40, 0, 0, 0};
2566
2567	memcpy(p, format_pg, sizeof(format_pg));
2568	put_unaligned_be16(sdebug_sectors_per, p + 10);
2569	put_unaligned_be16(sdebug_sector_size, p + 12);
2570	if (sdebug_removable)
2571		p[20] |= 0x20; /* should agree with INQUIRY */
2572	if (1 == pcontrol)
2573		memset(p + 2, 0, sizeof(format_pg) - 2);
2574	return sizeof(format_pg);
2575}
2576
2577static unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
2578				     0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
2579				     0, 0, 0, 0};
2580
2581static int resp_caching_pg(unsigned char *p, int pcontrol, int target)
2582{ 	/* Caching page for mode_sense */
2583	unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
2584		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
2585	unsigned char d_caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
2586		0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
2587
2588	if (SDEBUG_OPT_N_WCE & sdebug_opts)
2589		caching_pg[2] &= ~0x4;	/* set WCE=0 (default WCE=1) */
2590	memcpy(p, caching_pg, sizeof(caching_pg));
2591	if (1 == pcontrol)
2592		memcpy(p + 2, ch_caching_pg, sizeof(ch_caching_pg));
2593	else if (2 == pcontrol)
2594		memcpy(p, d_caching_pg, sizeof(d_caching_pg));
2595	return sizeof(caching_pg);
2596}
2597
2598static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2599				    0, 0, 0x2, 0x4b};
2600
2601static int resp_ctrl_m_pg(unsigned char *p, int pcontrol, int target)
2602{ 	/* Control mode page for mode_sense */
2603	unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
2604					0, 0, 0, 0};
2605	unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
2606				     0, 0, 0x2, 0x4b};
2607
2608	if (sdebug_dsense)
2609		ctrl_m_pg[2] |= 0x4;
2610	else
2611		ctrl_m_pg[2] &= ~0x4;
2612
2613	if (sdebug_ato)
2614		ctrl_m_pg[5] |= 0x80; /* ATO=1 */
2615
2616	memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
2617	if (1 == pcontrol)
2618		memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
2619	else if (2 == pcontrol)
2620		memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
2621	return sizeof(ctrl_m_pg);
2622}
2623
2624/* IO Advice Hints Grouping mode page */
2625static int resp_grouping_m_pg(unsigned char *p, int pcontrol, int target)
2626{
2627	/* IO Advice Hints Grouping mode page */
2628	struct grouping_m_pg {
2629		u8 page_code;	/* OR 0x40 when subpage_code > 0 */
2630		u8 subpage_code;
2631		__be16 page_length;
2632		u8 reserved[12];
2633		struct scsi_io_group_descriptor descr[MAXIMUM_NUMBER_OF_STREAMS];
2634	};
2635	static const struct grouping_m_pg gr_m_pg = {
2636		.page_code = 0xa | 0x40,
2637		.subpage_code = 5,
2638		.page_length = cpu_to_be16(sizeof(gr_m_pg) - 4),
2639		.descr = {
2640			{ .st_enble = 1 },
2641			{ .st_enble = 1 },
2642			{ .st_enble = 1 },
2643			{ .st_enble = 1 },
2644			{ .st_enble = 1 },
2645			{ .st_enble = 0 },
2646		}
2647	};
2648
2649	BUILD_BUG_ON(sizeof(struct grouping_m_pg) !=
2650		     16 + MAXIMUM_NUMBER_OF_STREAMS * 16);
2651	memcpy(p, &gr_m_pg, sizeof(gr_m_pg));
2652	if (1 == pcontrol) {
2653		/* There are no changeable values so clear from byte 4 on. */
2654		memset(p + 4, 0, sizeof(gr_m_pg) - 4);
2655	}
2656	return sizeof(gr_m_pg);
2657}
2658
2659static int resp_iec_m_pg(unsigned char *p, int pcontrol, int target)
2660{	/* Informational Exceptions control mode page for mode_sense */
2661	unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
2662				       0, 0, 0x0, 0x0};
2663	unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
2664				      0, 0, 0x0, 0x0};
2665
2666	memcpy(p, iec_m_pg, sizeof(iec_m_pg));
2667	if (1 == pcontrol)
2668		memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
2669	else if (2 == pcontrol)
2670		memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
2671	return sizeof(iec_m_pg);
2672}
2673
2674static int resp_sas_sf_m_pg(unsigned char *p, int pcontrol, int target)
2675{	/* SAS SSP mode page - short format for mode_sense */
2676	unsigned char sas_sf_m_pg[] = {0x19, 0x6,
2677		0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
2678
2679	memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
2680	if (1 == pcontrol)
2681		memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
2682	return sizeof(sas_sf_m_pg);
2683}
2684
2685
2686static int resp_sas_pcd_m_spg(unsigned char *p, int pcontrol, int target,
2687			      int target_dev_id)
2688{	/* SAS phy control and discover mode page for mode_sense */
2689	unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
2690		    0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
2691		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2692		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2693		    0x2, 0, 0, 0, 0, 0, 0, 0,
2694		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
2695		    0, 0, 0, 0, 0, 0, 0, 0,
2696		    0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
2697		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2698		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
2699		    0x3, 0, 0, 0, 0, 0, 0, 0,
2700		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
2701		    0, 0, 0, 0, 0, 0, 0, 0,
2702		};
2703	int port_a, port_b;
2704
2705	put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 16);
2706	put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 24);
2707	put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 64);
2708	put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 72);
2709	port_a = target_dev_id + 1;
2710	port_b = port_a + 1;
2711	memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
2712	put_unaligned_be32(port_a, p + 20);
2713	put_unaligned_be32(port_b, p + 48 + 20);
2714	if (1 == pcontrol)
2715		memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
2716	return sizeof(sas_pcd_m_pg);
2717}
2718
2719static int resp_sas_sha_m_spg(unsigned char *p, int pcontrol)
2720{	/* SAS SSP shared protocol specific port mode subpage */
2721	unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
2722		    0, 0, 0, 0, 0, 0, 0, 0,
2723		};
2724
2725	memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
2726	if (1 == pcontrol)
2727		memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
2728	return sizeof(sas_sha_m_pg);
2729}
2730
2731/* PAGE_SIZE is more than necessary but provides room for future expansion. */
2732#define SDEBUG_MAX_MSENSE_SZ PAGE_SIZE
2733
2734static int resp_mode_sense(struct scsi_cmnd *scp,
2735			   struct sdebug_dev_info *devip)
2736{
2737	int pcontrol, pcode, subpcode, bd_len;
2738	unsigned char dev_spec;
2739	u32 alloc_len, offset, len;
2740	int target_dev_id;
2741	int target = scp->device->id;
2742	unsigned char *ap;
2743	unsigned char *arr __free(kfree);
2744	unsigned char *cmd = scp->cmnd;
2745	bool dbd, llbaa, msense_6, is_disk, is_zbc;
2746
2747	arr = kzalloc(SDEBUG_MAX_MSENSE_SZ, GFP_ATOMIC);
2748	if (!arr)
2749		return -ENOMEM;
2750	dbd = !!(cmd[1] & 0x8);		/* disable block descriptors */
2751	pcontrol = (cmd[2] & 0xc0) >> 6;
2752	pcode = cmd[2] & 0x3f;
2753	subpcode = cmd[3];
2754	msense_6 = (MODE_SENSE == cmd[0]);
2755	llbaa = msense_6 ? false : !!(cmd[1] & 0x10);
2756	is_disk = (sdebug_ptype == TYPE_DISK);
2757	is_zbc = devip->zoned;
2758	if ((is_disk || is_zbc) && !dbd)
2759		bd_len = llbaa ? 16 : 8;
2760	else
2761		bd_len = 0;
2762	alloc_len = msense_6 ? cmd[4] : get_unaligned_be16(cmd + 7);
 
2763	if (0x3 == pcontrol) {  /* Saving values not supported */
2764		mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
2765		return check_condition_result;
2766	}
2767	target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2768			(devip->target * 1000) - 3;
2769	/* for disks+zbc set DPOFUA bit and clear write protect (WP) bit */
2770	if (is_disk || is_zbc) {
2771		dev_spec = 0x10;	/* =0x90 if WP=1 implies read-only */
2772		if (sdebug_wp)
2773			dev_spec |= 0x80;
2774	} else
2775		dev_spec = 0x0;
2776	if (msense_6) {
2777		arr[2] = dev_spec;
2778		arr[3] = bd_len;
2779		offset = 4;
2780	} else {
2781		arr[3] = dev_spec;
2782		if (16 == bd_len)
2783			arr[4] = 0x1;	/* set LONGLBA bit */
2784		arr[7] = bd_len;	/* assume 255 or less */
2785		offset = 8;
2786	}
2787	ap = arr + offset;
2788	if ((bd_len > 0) && (!sdebug_capacity))
2789		sdebug_capacity = get_sdebug_capacity();
2790
2791	if (8 == bd_len) {
2792		if (sdebug_capacity > 0xfffffffe)
2793			put_unaligned_be32(0xffffffff, ap + 0);
2794		else
2795			put_unaligned_be32(sdebug_capacity, ap + 0);
2796		put_unaligned_be16(sdebug_sector_size, ap + 6);
2797		offset += bd_len;
2798		ap = arr + offset;
2799	} else if (16 == bd_len) {
2800		put_unaligned_be64((u64)sdebug_capacity, ap + 0);
2801		put_unaligned_be32(sdebug_sector_size, ap + 12);
2802		offset += bd_len;
2803		ap = arr + offset;
2804	}
2805
2806	/*
2807	 * N.B. If len>0 before resp_*_pg() call, then form of that call should be:
2808	 *        len += resp_*_pg(ap + len, pcontrol, target);
2809	 */
 
 
 
2810	switch (pcode) {
2811	case 0x1:	/* Read-Write error recovery page, direct access */
2812		if (subpcode > 0x0 && subpcode < 0xff)
2813			goto bad_subpcode;
2814		len = resp_err_recov_pg(ap, pcontrol, target);
2815		offset += len;
2816		break;
2817	case 0x2:	/* Disconnect-Reconnect page, all devices */
2818		if (subpcode > 0x0 && subpcode < 0xff)
2819			goto bad_subpcode;
2820		len = resp_disconnect_pg(ap, pcontrol, target);
2821		offset += len;
2822		break;
2823	case 0x3:       /* Format device page, direct access */
2824		if (subpcode > 0x0 && subpcode < 0xff)
2825			goto bad_subpcode;
2826		if (is_disk) {
2827			len = resp_format_pg(ap, pcontrol, target);
2828			offset += len;
2829		} else {
2830			goto bad_pcode;
2831		}
2832		break;
2833	case 0x8:	/* Caching page, direct access */
2834		if (subpcode > 0x0 && subpcode < 0xff)
2835			goto bad_subpcode;
2836		if (is_disk || is_zbc) {
2837			len = resp_caching_pg(ap, pcontrol, target);
2838			offset += len;
2839		} else {
2840			goto bad_pcode;
2841		}
2842		break;
2843	case 0xa:	/* Control Mode page, all devices */
2844		switch (subpcode) {
2845		case 0:
2846			len = resp_ctrl_m_pg(ap, pcontrol, target);
2847			break;
2848		case 0x05:
2849			len = resp_grouping_m_pg(ap, pcontrol, target);
2850			break;
2851		case 0xff:
2852			len = resp_ctrl_m_pg(ap, pcontrol, target);
2853			len += resp_grouping_m_pg(ap + len, pcontrol, target);
2854			break;
2855		default:
2856			goto bad_subpcode;
2857		}
2858		offset += len;
2859		break;
2860	case 0x19:	/* if spc==1 then sas phy, control+discover */
2861		if (subpcode > 0x2 && subpcode < 0xff)
2862			goto bad_subpcode;
 
 
2863		len = 0;
2864		if ((0x0 == subpcode) || (0xff == subpcode))
2865			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2866		if ((0x1 == subpcode) || (0xff == subpcode))
2867			len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2868						  target_dev_id);
2869		if ((0x2 == subpcode) || (0xff == subpcode))
2870			len += resp_sas_sha_m_spg(ap + len, pcontrol);
2871		offset += len;
2872		break;
2873	case 0x1c:	/* Informational Exceptions Mode page, all devices */
2874		if (subpcode > 0x0 && subpcode < 0xff)
2875			goto bad_subpcode;
2876		len = resp_iec_m_pg(ap, pcontrol, target);
2877		offset += len;
2878		break;
2879	case 0x3f:	/* Read all Mode pages */
2880		if (subpcode > 0x0 && subpcode < 0xff)
2881			goto bad_subpcode;
2882		len = resp_err_recov_pg(ap, pcontrol, target);
2883		len += resp_disconnect_pg(ap + len, pcontrol, target);
2884		if (is_disk) {
2885			len += resp_format_pg(ap + len, pcontrol, target);
2886			len += resp_caching_pg(ap + len, pcontrol, target);
2887		} else if (is_zbc) {
2888			len += resp_caching_pg(ap + len, pcontrol, target);
2889		}
2890		len += resp_ctrl_m_pg(ap + len, pcontrol, target);
2891		if (0xff == subpcode)
2892			len += resp_grouping_m_pg(ap + len, pcontrol, target);
2893		len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2894		if (0xff == subpcode) {
2895			len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2896						  target_dev_id);
2897			len += resp_sas_sha_m_spg(ap + len, pcontrol);
2898		}
2899		len += resp_iec_m_pg(ap + len, pcontrol, target);
2900		offset += len;
 
2901		break;
2902	default:
2903		goto bad_pcode;
 
 
 
 
 
2904	}
2905	if (msense_6)
2906		arr[0] = offset - 1;
2907	else
2908		put_unaligned_be16((offset - 2), arr + 0);
2909	return fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, offset));
2910
2911bad_pcode:
2912	mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2913	return check_condition_result;
2914
2915bad_subpcode:
2916	mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2917	return check_condition_result;
2918}
2919
2920#define SDEBUG_MAX_MSELECT_SZ 512
2921
2922static int resp_mode_select(struct scsi_cmnd *scp,
2923			    struct sdebug_dev_info *devip)
2924{
2925	int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
2926	int param_len, res, mpage;
2927	unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
2928	unsigned char *cmd = scp->cmnd;
2929	int mselect6 = (MODE_SELECT == cmd[0]);
2930
2931	memset(arr, 0, sizeof(arr));
2932	pf = cmd[1] & 0x10;
2933	sp = cmd[1] & 0x1;
2934	param_len = mselect6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2935	if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
2936		mk_sense_invalid_fld(scp, SDEB_IN_CDB, mselect6 ? 4 : 7, -1);
2937		return check_condition_result;
2938	}
2939	res = fetch_to_dev_buffer(scp, arr, param_len);
2940	if (-1 == res)
2941		return DID_ERROR << 16;
2942	else if (sdebug_verbose && (res < param_len))
2943		sdev_printk(KERN_INFO, scp->device,
2944			    "%s: cdb indicated=%d, IO sent=%d bytes\n",
2945			    __func__, param_len, res);
2946	md_len = mselect6 ? (arr[0] + 1) : (get_unaligned_be16(arr + 0) + 2);
2947	bd_len = mselect6 ? arr[3] : get_unaligned_be16(arr + 6);
2948	off = bd_len + (mselect6 ? 4 : 8);
2949	if (md_len > 2 || off >= res) {
2950		mk_sense_invalid_fld(scp, SDEB_IN_DATA, 0, -1);
2951		return check_condition_result;
2952	}
 
2953	mpage = arr[off] & 0x3f;
2954	ps = !!(arr[off] & 0x80);
2955	if (ps) {
2956		mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 7);
2957		return check_condition_result;
2958	}
2959	spf = !!(arr[off] & 0x40);
2960	pg_len = spf ? (get_unaligned_be16(arr + off + 2) + 4) :
2961		       (arr[off + 1] + 2);
2962	if ((pg_len + off) > param_len) {
2963		mk_sense_buffer(scp, ILLEGAL_REQUEST,
2964				PARAMETER_LIST_LENGTH_ERR, 0);
2965		return check_condition_result;
2966	}
2967	switch (mpage) {
2968	case 0x8:      /* Caching Mode page */
2969		if (caching_pg[1] == arr[off + 1]) {
2970			memcpy(caching_pg + 2, arr + off + 2,
2971			       sizeof(caching_pg) - 2);
2972			goto set_mode_changed_ua;
2973		}
2974		break;
2975	case 0xa:      /* Control Mode page */
2976		if (ctrl_m_pg[1] == arr[off + 1]) {
2977			memcpy(ctrl_m_pg + 2, arr + off + 2,
2978			       sizeof(ctrl_m_pg) - 2);
2979			if (ctrl_m_pg[4] & 0x8)
2980				sdebug_wp = true;
2981			else
2982				sdebug_wp = false;
2983			sdebug_dsense = !!(ctrl_m_pg[2] & 0x4);
2984			goto set_mode_changed_ua;
2985		}
2986		break;
2987	case 0x1c:      /* Informational Exceptions Mode page */
2988		if (iec_m_pg[1] == arr[off + 1]) {
2989			memcpy(iec_m_pg + 2, arr + off + 2,
2990			       sizeof(iec_m_pg) - 2);
2991			goto set_mode_changed_ua;
2992		}
2993		break;
2994	default:
2995		break;
2996	}
2997	mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 5);
2998	return check_condition_result;
2999set_mode_changed_ua:
3000	set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
3001	return 0;
3002}
3003
3004static int resp_temp_l_pg(unsigned char *arr)
3005{
3006	unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
3007				     0x0, 0x1, 0x3, 0x2, 0x0, 65,
3008		};
3009
3010	memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
3011	return sizeof(temp_l_pg);
3012}
3013
3014static int resp_ie_l_pg(unsigned char *arr)
3015{
3016	unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
3017		};
3018
3019	memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
3020	if (iec_m_pg[2] & 0x4) {	/* TEST bit set */
3021		arr[4] = THRESHOLD_EXCEEDED;
3022		arr[5] = 0xff;
3023	}
3024	return sizeof(ie_l_pg);
3025}
3026
3027static int resp_env_rep_l_spg(unsigned char *arr)
3028{
3029	unsigned char env_rep_l_spg[] = {0x0, 0x0, 0x23, 0x8,
3030					 0x0, 40, 72, 0xff, 45, 18, 0, 0,
3031					 0x1, 0x0, 0x23, 0x8,
3032					 0x0, 55, 72, 35, 55, 45, 0, 0,
3033		};
3034
3035	memcpy(arr, env_rep_l_spg, sizeof(env_rep_l_spg));
3036	return sizeof(env_rep_l_spg);
3037}
3038
3039#define SDEBUG_MAX_LSENSE_SZ 512
3040
3041static int resp_log_sense(struct scsi_cmnd *scp,
3042			  struct sdebug_dev_info *devip)
3043{
3044	int ppc, sp, pcode, subpcode;
3045	u32 alloc_len, len, n;
3046	unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
3047	unsigned char *cmd = scp->cmnd;
3048
3049	memset(arr, 0, sizeof(arr));
3050	ppc = cmd[1] & 0x2;
3051	sp = cmd[1] & 0x1;
3052	if (ppc || sp) {
3053		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, ppc ? 1 : 0);
3054		return check_condition_result;
3055	}
 
3056	pcode = cmd[2] & 0x3f;
3057	subpcode = cmd[3] & 0xff;
3058	alloc_len = get_unaligned_be16(cmd + 7);
3059	arr[0] = pcode;
3060	if (0 == subpcode) {
3061		switch (pcode) {
3062		case 0x0:	/* Supported log pages log page */
3063			n = 4;
3064			arr[n++] = 0x0;		/* this page */
3065			arr[n++] = 0xd;		/* Temperature */
3066			arr[n++] = 0x2f;	/* Informational exceptions */
3067			arr[3] = n - 4;
3068			break;
3069		case 0xd:	/* Temperature log page */
3070			arr[3] = resp_temp_l_pg(arr + 4);
3071			break;
3072		case 0x2f:	/* Informational exceptions log page */
3073			arr[3] = resp_ie_l_pg(arr + 4);
3074			break;
3075		default:
3076			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
3077			return check_condition_result;
3078		}
3079	} else if (0xff == subpcode) {
3080		arr[0] |= 0x40;
3081		arr[1] = subpcode;
3082		switch (pcode) {
3083		case 0x0:	/* Supported log pages and subpages log page */
3084			n = 4;
3085			arr[n++] = 0x0;
3086			arr[n++] = 0x0;		/* 0,0 page */
3087			arr[n++] = 0x0;
3088			arr[n++] = 0xff;	/* this page */
3089			arr[n++] = 0xd;
3090			arr[n++] = 0x0;		/* Temperature */
3091			arr[n++] = 0xd;
3092			arr[n++] = 0x1;		/* Environment reporting */
3093			arr[n++] = 0xd;
3094			arr[n++] = 0xff;	/* all 0xd subpages */
3095			arr[n++] = 0x2f;
3096			arr[n++] = 0x0;	/* Informational exceptions */
3097			arr[n++] = 0x2f;
3098			arr[n++] = 0xff;	/* all 0x2f subpages */
3099			arr[3] = n - 4;
3100			break;
3101		case 0xd:	/* Temperature subpages */
3102			n = 4;
3103			arr[n++] = 0xd;
3104			arr[n++] = 0x0;		/* Temperature */
3105			arr[n++] = 0xd;
3106			arr[n++] = 0x1;		/* Environment reporting */
3107			arr[n++] = 0xd;
3108			arr[n++] = 0xff;	/* these subpages */
3109			arr[3] = n - 4;
3110			break;
3111		case 0x2f:	/* Informational exceptions subpages */
3112			n = 4;
3113			arr[n++] = 0x2f;
3114			arr[n++] = 0x0;		/* Informational exceptions */
3115			arr[n++] = 0x2f;
3116			arr[n++] = 0xff;	/* these subpages */
3117			arr[3] = n - 4;
3118			break;
3119		default:
3120			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
3121			return check_condition_result;
3122		}
3123	} else if (subpcode > 0) {
3124		arr[0] |= 0x40;
3125		arr[1] = subpcode;
3126		if (pcode == 0xd && subpcode == 1)
3127			arr[3] = resp_env_rep_l_spg(arr + 4);
3128		else {
3129			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
3130			return check_condition_result;
3131		}
3132	} else {
3133		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
3134		return check_condition_result;
3135	}
3136	len = min_t(u32, get_unaligned_be16(arr + 2) + 4, alloc_len);
3137	return fill_from_dev_buffer(scp, arr,
3138		    min_t(u32, len, SDEBUG_MAX_INQ_ARR_SZ));
3139}
3140
3141static inline bool sdebug_dev_is_zoned(struct sdebug_dev_info *devip)
3142{
3143	return devip->nr_zones != 0;
3144}
3145
3146static struct sdeb_zone_state *zbc_zone(struct sdebug_dev_info *devip,
3147					unsigned long long lba)
3148{
3149	u32 zno = lba >> devip->zsize_shift;
3150	struct sdeb_zone_state *zsp;
3151
3152	if (devip->zcap == devip->zsize || zno < devip->nr_conv_zones)
3153		return &devip->zstate[zno];
3154
3155	/*
3156	 * If the zone capacity is less than the zone size, adjust for gap
3157	 * zones.
3158	 */
3159	zno = 2 * zno - devip->nr_conv_zones;
3160	WARN_ONCE(zno >= devip->nr_zones, "%u > %u\n", zno, devip->nr_zones);
3161	zsp = &devip->zstate[zno];
3162	if (lba >= zsp->z_start + zsp->z_size)
3163		zsp++;
3164	WARN_ON_ONCE(lba >= zsp->z_start + zsp->z_size);
3165	return zsp;
3166}
3167
3168static inline bool zbc_zone_is_conv(struct sdeb_zone_state *zsp)
3169{
3170	return zsp->z_type == ZBC_ZTYPE_CNV;
3171}
3172
3173static inline bool zbc_zone_is_gap(struct sdeb_zone_state *zsp)
 
3174{
3175	return zsp->z_type == ZBC_ZTYPE_GAP;
3176}
3177
3178static inline bool zbc_zone_is_seq(struct sdeb_zone_state *zsp)
3179{
3180	return !zbc_zone_is_conv(zsp) && !zbc_zone_is_gap(zsp);
3181}
3182
3183static void zbc_close_zone(struct sdebug_dev_info *devip,
3184			   struct sdeb_zone_state *zsp)
3185{
3186	enum sdebug_z_cond zc;
3187
3188	if (!zbc_zone_is_seq(zsp))
3189		return;
3190
3191	zc = zsp->z_cond;
3192	if (!(zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN))
3193		return;
3194
3195	if (zc == ZC2_IMPLICIT_OPEN)
3196		devip->nr_imp_open--;
3197	else
3198		devip->nr_exp_open--;
3199
3200	if (zsp->z_wp == zsp->z_start) {
3201		zsp->z_cond = ZC1_EMPTY;
3202	} else {
3203		zsp->z_cond = ZC4_CLOSED;
3204		devip->nr_closed++;
3205	}
3206}
3207
3208static void zbc_close_imp_open_zone(struct sdebug_dev_info *devip)
3209{
3210	struct sdeb_zone_state *zsp = &devip->zstate[0];
3211	unsigned int i;
3212
3213	for (i = 0; i < devip->nr_zones; i++, zsp++) {
3214		if (zsp->z_cond == ZC2_IMPLICIT_OPEN) {
3215			zbc_close_zone(devip, zsp);
3216			return;
3217		}
3218	}
3219}
3220
3221static void zbc_open_zone(struct sdebug_dev_info *devip,
3222			  struct sdeb_zone_state *zsp, bool explicit)
3223{
3224	enum sdebug_z_cond zc;
3225
3226	if (!zbc_zone_is_seq(zsp))
3227		return;
3228
3229	zc = zsp->z_cond;
3230	if ((explicit && zc == ZC3_EXPLICIT_OPEN) ||
3231	    (!explicit && zc == ZC2_IMPLICIT_OPEN))
3232		return;
3233
3234	/* Close an implicit open zone if necessary */
3235	if (explicit && zsp->z_cond == ZC2_IMPLICIT_OPEN)
3236		zbc_close_zone(devip, zsp);
3237	else if (devip->max_open &&
3238		 devip->nr_imp_open + devip->nr_exp_open >= devip->max_open)
3239		zbc_close_imp_open_zone(devip);
3240
3241	if (zsp->z_cond == ZC4_CLOSED)
3242		devip->nr_closed--;
3243	if (explicit) {
3244		zsp->z_cond = ZC3_EXPLICIT_OPEN;
3245		devip->nr_exp_open++;
3246	} else {
3247		zsp->z_cond = ZC2_IMPLICIT_OPEN;
3248		devip->nr_imp_open++;
3249	}
3250}
3251
3252static inline void zbc_set_zone_full(struct sdebug_dev_info *devip,
3253				     struct sdeb_zone_state *zsp)
3254{
3255	switch (zsp->z_cond) {
3256	case ZC2_IMPLICIT_OPEN:
3257		devip->nr_imp_open--;
3258		break;
3259	case ZC3_EXPLICIT_OPEN:
3260		devip->nr_exp_open--;
3261		break;
3262	default:
3263		WARN_ONCE(true, "Invalid zone %llu condition %x\n",
3264			  zsp->z_start, zsp->z_cond);
3265		break;
3266	}
3267	zsp->z_cond = ZC5_FULL;
3268}
3269
3270static void zbc_inc_wp(struct sdebug_dev_info *devip,
3271		       unsigned long long lba, unsigned int num)
3272{
3273	struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
3274	unsigned long long n, end, zend = zsp->z_start + zsp->z_size;
3275
3276	if (!zbc_zone_is_seq(zsp))
3277		return;
3278
3279	if (zsp->z_type == ZBC_ZTYPE_SWR) {
3280		zsp->z_wp += num;
3281		if (zsp->z_wp >= zend)
3282			zbc_set_zone_full(devip, zsp);
3283		return;
3284	}
3285
3286	while (num) {
3287		if (lba != zsp->z_wp)
3288			zsp->z_non_seq_resource = true;
3289
3290		end = lba + num;
3291		if (end >= zend) {
3292			n = zend - lba;
3293			zsp->z_wp = zend;
3294		} else if (end > zsp->z_wp) {
3295			n = num;
3296			zsp->z_wp = end;
3297		} else {
3298			n = num;
3299		}
3300		if (zsp->z_wp >= zend)
3301			zbc_set_zone_full(devip, zsp);
3302
3303		num -= n;
3304		lba += n;
3305		if (num) {
3306			zsp++;
3307			zend = zsp->z_start + zsp->z_size;
3308		}
3309	}
3310}
3311
3312static int check_zbc_access_params(struct scsi_cmnd *scp,
3313			unsigned long long lba, unsigned int num, bool write)
3314{
3315	struct scsi_device *sdp = scp->device;
3316	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
3317	struct sdeb_zone_state *zsp = zbc_zone(devip, lba);
3318	struct sdeb_zone_state *zsp_end = zbc_zone(devip, lba + num - 1);
3319
3320	if (!write) {
3321		/* For host-managed, reads cannot cross zone types boundaries */
3322		if (zsp->z_type != zsp_end->z_type) {
3323			mk_sense_buffer(scp, ILLEGAL_REQUEST,
3324					LBA_OUT_OF_RANGE,
3325					READ_INVDATA_ASCQ);
3326			return check_condition_result;
3327		}
3328		return 0;
3329	}
3330
3331	/* Writing into a gap zone is not allowed */
3332	if (zbc_zone_is_gap(zsp)) {
3333		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE,
3334				ATTEMPT_ACCESS_GAP);
3335		return check_condition_result;
3336	}
3337
3338	/* No restrictions for writes within conventional zones */
3339	if (zbc_zone_is_conv(zsp)) {
3340		if (!zbc_zone_is_conv(zsp_end)) {
3341			mk_sense_buffer(scp, ILLEGAL_REQUEST,
3342					LBA_OUT_OF_RANGE,
3343					WRITE_BOUNDARY_ASCQ);
3344			return check_condition_result;
3345		}
3346		return 0;
3347	}
3348
3349	if (zsp->z_type == ZBC_ZTYPE_SWR) {
3350		/* Writes cannot cross sequential zone boundaries */
3351		if (zsp_end != zsp) {
3352			mk_sense_buffer(scp, ILLEGAL_REQUEST,
3353					LBA_OUT_OF_RANGE,
3354					WRITE_BOUNDARY_ASCQ);
3355			return check_condition_result;
3356		}
3357		/* Cannot write full zones */
3358		if (zsp->z_cond == ZC5_FULL) {
3359			mk_sense_buffer(scp, ILLEGAL_REQUEST,
3360					INVALID_FIELD_IN_CDB, 0);
3361			return check_condition_result;
3362		}
3363		/* Writes must be aligned to the zone WP */
3364		if (lba != zsp->z_wp) {
3365			mk_sense_buffer(scp, ILLEGAL_REQUEST,
3366					LBA_OUT_OF_RANGE,
3367					UNALIGNED_WRITE_ASCQ);
3368			return check_condition_result;
3369		}
3370	}
3371
3372	/* Handle implicit open of closed and empty zones */
3373	if (zsp->z_cond == ZC1_EMPTY || zsp->z_cond == ZC4_CLOSED) {
3374		if (devip->max_open &&
3375		    devip->nr_exp_open >= devip->max_open) {
3376			mk_sense_buffer(scp, DATA_PROTECT,
3377					INSUFF_RES_ASC,
3378					INSUFF_ZONE_ASCQ);
3379			return check_condition_result;
3380		}
3381		zbc_open_zone(devip, zsp, false);
3382	}
3383
3384	return 0;
3385}
3386
3387static inline int check_device_access_params
3388			(struct scsi_cmnd *scp, unsigned long long lba,
3389			 unsigned int num, bool write)
3390{
3391	struct scsi_device *sdp = scp->device;
3392	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
3393
3394	if (lba + num > sdebug_capacity) {
3395		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3396		return check_condition_result;
3397	}
3398	/* transfer length excessive (tie in to block limits VPD page) */
3399	if (num > sdebug_store_sectors) {
3400		/* needs work to find which cdb byte 'num' comes from */
3401		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3402		return check_condition_result;
3403	}
3404	if (write && unlikely(sdebug_wp)) {
3405		mk_sense_buffer(scp, DATA_PROTECT, WRITE_PROTECTED, 0x2);
3406		return check_condition_result;
3407	}
3408	if (sdebug_dev_is_zoned(devip))
3409		return check_zbc_access_params(scp, lba, num, write);
3410
3411	return 0;
3412}
3413
3414/*
3415 * Note: if BUG_ON() fires it usually indicates a problem with the parser
3416 * tables. Perhaps a missing F_FAKE_RW or FF_MEDIA_IO flag. Response functions
3417 * that access any of the "stores" in struct sdeb_store_info should call this
3418 * function with bug_if_fake_rw set to true.
3419 */
3420static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip,
3421						bool bug_if_fake_rw)
3422{
3423	if (sdebug_fake_rw) {
3424		BUG_ON(bug_if_fake_rw);	/* See note above */
3425		return NULL;
3426	}
3427	return xa_load(per_store_ap, devip->sdbg_host->si_idx);
3428}
3429
3430static inline void
3431sdeb_read_lock(rwlock_t *lock)
3432{
3433	if (sdebug_no_rwlock)
3434		__acquire(lock);
3435	else
3436		read_lock(lock);
3437}
3438
3439static inline void
3440sdeb_read_unlock(rwlock_t *lock)
3441{
3442	if (sdebug_no_rwlock)
3443		__release(lock);
3444	else
3445		read_unlock(lock);
3446}
3447
3448static inline void
3449sdeb_write_lock(rwlock_t *lock)
3450{
3451	if (sdebug_no_rwlock)
3452		__acquire(lock);
3453	else
3454		write_lock(lock);
3455}
3456
3457static inline void
3458sdeb_write_unlock(rwlock_t *lock)
3459{
3460	if (sdebug_no_rwlock)
3461		__release(lock);
3462	else
3463		write_unlock(lock);
3464}
3465
3466static inline void
3467sdeb_data_read_lock(struct sdeb_store_info *sip)
3468{
3469	BUG_ON(!sip);
3470
3471	sdeb_read_lock(&sip->macc_data_lck);
3472}
3473
3474static inline void
3475sdeb_data_read_unlock(struct sdeb_store_info *sip)
3476{
3477	BUG_ON(!sip);
3478
3479	sdeb_read_unlock(&sip->macc_data_lck);
3480}
3481
3482static inline void
3483sdeb_data_write_lock(struct sdeb_store_info *sip)
3484{
3485	BUG_ON(!sip);
3486
3487	sdeb_write_lock(&sip->macc_data_lck);
3488}
3489
3490static inline void
3491sdeb_data_write_unlock(struct sdeb_store_info *sip)
3492{
3493	BUG_ON(!sip);
3494
3495	sdeb_write_unlock(&sip->macc_data_lck);
3496}
3497
3498static inline void
3499sdeb_data_sector_read_lock(struct sdeb_store_info *sip)
3500{
3501	BUG_ON(!sip);
3502
3503	sdeb_read_lock(&sip->macc_sector_lck);
3504}
3505
3506static inline void
3507sdeb_data_sector_read_unlock(struct sdeb_store_info *sip)
3508{
3509	BUG_ON(!sip);
3510
3511	sdeb_read_unlock(&sip->macc_sector_lck);
3512}
3513
3514static inline void
3515sdeb_data_sector_write_lock(struct sdeb_store_info *sip)
3516{
3517	BUG_ON(!sip);
3518
3519	sdeb_write_lock(&sip->macc_sector_lck);
3520}
3521
3522static inline void
3523sdeb_data_sector_write_unlock(struct sdeb_store_info *sip)
3524{
3525	BUG_ON(!sip);
3526
3527	sdeb_write_unlock(&sip->macc_sector_lck);
3528}
3529
3530/*
3531 * Atomic locking:
3532 * We simplify the atomic model to allow only 1x atomic write and many non-
3533 * atomic reads or writes for all LBAs.
3534
3535 * A RW lock has a similar bahaviour:
3536 * Only 1x writer and many readers.
3537
3538 * So use a RW lock for per-device read and write locking:
3539 * An atomic access grabs the lock as a writer and non-atomic grabs the lock
3540 * as a reader.
3541 */
3542
3543static inline void
3544sdeb_data_lock(struct sdeb_store_info *sip, bool atomic)
3545{
3546	if (atomic)
3547		sdeb_data_write_lock(sip);
3548	else
3549		sdeb_data_read_lock(sip);
3550}
3551
3552static inline void
3553sdeb_data_unlock(struct sdeb_store_info *sip, bool atomic)
3554{
3555	if (atomic)
3556		sdeb_data_write_unlock(sip);
3557	else
3558		sdeb_data_read_unlock(sip);
3559}
3560
3561/* Allow many reads but only 1x write per sector */
3562static inline void
3563sdeb_data_sector_lock(struct sdeb_store_info *sip, bool do_write)
3564{
3565	if (do_write)
3566		sdeb_data_sector_write_lock(sip);
3567	else
3568		sdeb_data_sector_read_lock(sip);
3569}
3570
3571static inline void
3572sdeb_data_sector_unlock(struct sdeb_store_info *sip, bool do_write)
3573{
3574	if (do_write)
3575		sdeb_data_sector_write_unlock(sip);
3576	else
3577		sdeb_data_sector_read_unlock(sip);
3578}
3579
3580static inline void
3581sdeb_meta_read_lock(struct sdeb_store_info *sip)
3582{
3583	if (sdebug_no_rwlock) {
3584		if (sip)
3585			__acquire(&sip->macc_meta_lck);
3586		else
3587			__acquire(&sdeb_fake_rw_lck);
3588	} else {
3589		if (sip)
3590			read_lock(&sip->macc_meta_lck);
3591		else
3592			read_lock(&sdeb_fake_rw_lck);
3593	}
3594}
3595
3596static inline void
3597sdeb_meta_read_unlock(struct sdeb_store_info *sip)
3598{
3599	if (sdebug_no_rwlock) {
3600		if (sip)
3601			__release(&sip->macc_meta_lck);
3602		else
3603			__release(&sdeb_fake_rw_lck);
3604	} else {
3605		if (sip)
3606			read_unlock(&sip->macc_meta_lck);
3607		else
3608			read_unlock(&sdeb_fake_rw_lck);
3609	}
3610}
3611
3612static inline void
3613sdeb_meta_write_lock(struct sdeb_store_info *sip)
3614{
3615	if (sdebug_no_rwlock) {
3616		if (sip)
3617			__acquire(&sip->macc_meta_lck);
3618		else
3619			__acquire(&sdeb_fake_rw_lck);
3620	} else {
3621		if (sip)
3622			write_lock(&sip->macc_meta_lck);
3623		else
3624			write_lock(&sdeb_fake_rw_lck);
3625	}
3626}
3627
3628static inline void
3629sdeb_meta_write_unlock(struct sdeb_store_info *sip)
3630{
3631	if (sdebug_no_rwlock) {
3632		if (sip)
3633			__release(&sip->macc_meta_lck);
3634		else
3635			__release(&sdeb_fake_rw_lck);
3636	} else {
3637		if (sip)
3638			write_unlock(&sip->macc_meta_lck);
3639		else
3640			write_unlock(&sdeb_fake_rw_lck);
3641	}
3642}
3643
3644/* Returns number of bytes copied or -1 if error. */
3645static int do_device_access(struct sdeb_store_info *sip, struct scsi_cmnd *scp,
3646			    u32 sg_skip, u64 lba, u32 num, u8 group_number,
3647			    bool do_write, bool atomic)
3648{
3649	int ret;
3650	u64 block;
 
3651	enum dma_data_direction dir;
3652	struct scsi_data_buffer *sdb = &scp->sdb;
3653	u8 *fsp;
3654	int i, total = 0;
3655
3656	/*
3657	 * Even though reads are inherently atomic (in this driver), we expect
3658	 * the atomic flag only for writes.
3659	 */
3660	if (!do_write && atomic)
3661		return -1;
3662
3663	if (do_write) {
 
3664		dir = DMA_TO_DEVICE;
3665		write_since_sync = true;
3666	} else {
 
3667		dir = DMA_FROM_DEVICE;
3668	}
3669
3670	if (!sdb->length || !sip)
3671		return 0;
3672	if (scp->sc_data_direction != dir)
3673		return -1;
3674
3675	if (do_write && group_number < ARRAY_SIZE(writes_by_group_number))
3676		atomic_long_inc(&writes_by_group_number[group_number]);
3677
3678	fsp = sip->storep;
3679
3680	block = do_div(lba, sdebug_store_sectors);
 
 
3681
3682	/* Only allow 1x atomic write or multiple non-atomic writes at any given time */
3683	sdeb_data_lock(sip, atomic);
3684	for (i = 0; i < num; i++) {
3685		/* We shouldn't need to lock for atomic writes, but do it anyway */
3686		sdeb_data_sector_lock(sip, do_write);
3687		ret = sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
3688		   fsp + (block * sdebug_sector_size),
3689		   sdebug_sector_size, sg_skip, do_write);
3690		sdeb_data_sector_unlock(sip, do_write);
3691		total += ret;
3692		if (ret != sdebug_sector_size)
3693			break;
3694		sg_skip += sdebug_sector_size;
3695		if (++block >= sdebug_store_sectors)
3696			block = 0;
3697	}
3698	sdeb_data_unlock(sip, atomic);
3699
3700	return total;
3701}
3702
3703/* Returns number of bytes copied or -1 if error. */
3704static int do_dout_fetch(struct scsi_cmnd *scp, u32 num, u8 *doutp)
3705{
3706	struct scsi_data_buffer *sdb = &scp->sdb;
 
3707
3708	if (!sdb->length)
3709		return 0;
3710	if (scp->sc_data_direction != DMA_TO_DEVICE)
3711		return -1;
3712	return sg_copy_buffer(sdb->table.sgl, sdb->table.nents, doutp,
3713			      num * sdebug_sector_size, 0, true);
3714}
3715
3716/* If sip->storep+lba compares equal to arr(num), then copy top half of
3717 * arr into sip->storep+lba and return true. If comparison fails then
3718 * return false. */
3719static bool comp_write_worker(struct sdeb_store_info *sip, u64 lba, u32 num,
3720			      const u8 *arr, bool compare_only)
3721{
3722	bool res;
3723	u64 block, rest = 0;
3724	u32 store_blks = sdebug_store_sectors;
3725	u32 lb_size = sdebug_sector_size;
3726	u8 *fsp = sip->storep;
3727
3728	block = do_div(lba, store_blks);
3729	if (block + num > store_blks)
3730		rest = block + num - store_blks;
3731
3732	res = !memcmp(fsp + (block * lb_size), arr, (num - rest) * lb_size);
 
3733	if (!res)
3734		return res;
3735	if (rest)
3736		res = memcmp(fsp, arr + ((num - rest) * lb_size),
3737			     rest * lb_size);
3738	if (!res)
3739		return res;
3740	if (compare_only)
3741		return true;
3742	arr += num * lb_size;
3743	memcpy(fsp + (block * lb_size), arr, (num - rest) * lb_size);
3744	if (rest)
3745		memcpy(fsp, arr + ((num - rest) * lb_size), rest * lb_size);
 
3746	return res;
3747}
3748
3749static __be16 dif_compute_csum(const void *buf, int len)
3750{
3751	__be16 csum;
3752
3753	if (sdebug_guard)
3754		csum = (__force __be16)ip_compute_csum(buf, len);
3755	else
3756		csum = cpu_to_be16(crc_t10dif(buf, len));
3757
3758	return csum;
3759}
3760
3761static int dif_verify(struct t10_pi_tuple *sdt, const void *data,
3762		      sector_t sector, u32 ei_lba)
3763{
3764	__be16 csum = dif_compute_csum(data, sdebug_sector_size);
3765
3766	if (sdt->guard_tag != csum) {
3767		pr_err("GUARD check failed on sector %lu rcvd 0x%04x, data 0x%04x\n",
3768			(unsigned long)sector,
3769			be16_to_cpu(sdt->guard_tag),
3770			be16_to_cpu(csum));
3771		return 0x01;
3772	}
3773	if (sdebug_dif == T10_PI_TYPE1_PROTECTION &&
3774	    be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
3775		pr_err("REF check failed on sector %lu\n",
3776			(unsigned long)sector);
3777		return 0x03;
3778	}
3779	if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3780	    be32_to_cpu(sdt->ref_tag) != ei_lba) {
3781		pr_err("REF check failed on sector %lu\n",
3782			(unsigned long)sector);
3783		return 0x03;
3784	}
3785	return 0;
3786}
3787
3788static void dif_copy_prot(struct scsi_cmnd *scp, sector_t sector,
3789			  unsigned int sectors, bool read)
3790{
3791	size_t resid;
3792	void *paddr;
3793	struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
3794						scp->device->hostdata, true);
3795	struct t10_pi_tuple *dif_storep = sip->dif_storep;
3796	const void *dif_store_end = dif_storep + sdebug_store_sectors;
3797	struct sg_mapping_iter miter;
3798
3799	/* Bytes of protection data to copy into sgl */
3800	resid = sectors * sizeof(*dif_storep);
3801
3802	sg_miter_start(&miter, scsi_prot_sglist(scp),
3803		       scsi_prot_sg_count(scp), SG_MITER_ATOMIC |
3804		       (read ? SG_MITER_TO_SG : SG_MITER_FROM_SG));
3805
3806	while (sg_miter_next(&miter) && resid > 0) {
3807		size_t len = min_t(size_t, miter.length, resid);
3808		void *start = dif_store(sip, sector);
3809		size_t rest = 0;
3810
3811		if (dif_store_end < start + len)
3812			rest = start + len - dif_store_end;
3813
3814		paddr = miter.addr;
3815
3816		if (read)
3817			memcpy(paddr, start, len - rest);
3818		else
3819			memcpy(start, paddr, len - rest);
3820
3821		if (rest) {
3822			if (read)
3823				memcpy(paddr + len - rest, dif_storep, rest);
3824			else
3825				memcpy(dif_storep, paddr + len - rest, rest);
3826		}
3827
3828		sector += len / sizeof(*dif_storep);
3829		resid -= len;
3830	}
3831	sg_miter_stop(&miter);
3832}
3833
3834static int prot_verify_read(struct scsi_cmnd *scp, sector_t start_sec,
3835			    unsigned int sectors, u32 ei_lba)
3836{
3837	int ret = 0;
3838	unsigned int i;
3839	sector_t sector;
3840	struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
3841						scp->device->hostdata, true);
3842	struct t10_pi_tuple *sdt;
 
3843
3844	for (i = 0; i < sectors; i++, ei_lba++) {
 
 
3845		sector = start_sec + i;
3846		sdt = dif_store(sip, sector);
3847
3848		if (sdt->app_tag == cpu_to_be16(0xffff))
3849			continue;
3850
3851		/*
3852		 * Because scsi_debug acts as both initiator and
3853		 * target we proceed to verify the PI even if
3854		 * RDPROTECT=3. This is done so the "initiator" knows
3855		 * which type of error to return. Otherwise we would
3856		 * have to iterate over the PI twice.
3857		 */
3858		if (scp->cmnd[1] >> 5) { /* RDPROTECT */
3859			ret = dif_verify(sdt, lba2fake_store(sip, sector),
3860					 sector, ei_lba);
3861			if (ret) {
3862				dif_errors++;
3863				break;
3864			}
3865		}
3866	}
3867
3868	dif_copy_prot(scp, start_sec, sectors, true);
3869	dix_reads++;
3870
3871	return ret;
3872}
3873
3874static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3875{
3876	bool check_prot;
 
 
3877	u32 num;
3878	u32 ei_lba;
 
3879	int ret;
3880	u64 lba;
3881	struct sdeb_store_info *sip = devip2sip(devip, true);
3882	u8 *cmd = scp->cmnd;
3883	bool meta_data_locked = false;
3884
3885	switch (cmd[0]) {
3886	case READ_16:
3887		ei_lba = 0;
3888		lba = get_unaligned_be64(cmd + 2);
3889		num = get_unaligned_be32(cmd + 10);
3890		check_prot = true;
3891		break;
3892	case READ_10:
3893		ei_lba = 0;
3894		lba = get_unaligned_be32(cmd + 2);
3895		num = get_unaligned_be16(cmd + 7);
3896		check_prot = true;
3897		break;
3898	case READ_6:
3899		ei_lba = 0;
3900		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
3901		      (u32)(cmd[1] & 0x1f) << 16;
3902		num = (0 == cmd[4]) ? 256 : cmd[4];
3903		check_prot = true;
3904		break;
3905	case READ_12:
3906		ei_lba = 0;
3907		lba = get_unaligned_be32(cmd + 2);
3908		num = get_unaligned_be32(cmd + 6);
3909		check_prot = true;
3910		break;
3911	case XDWRITEREAD_10:
3912		ei_lba = 0;
3913		lba = get_unaligned_be32(cmd + 2);
3914		num = get_unaligned_be16(cmd + 7);
3915		check_prot = false;
3916		break;
3917	default:	/* assume READ(32) */
3918		lba = get_unaligned_be64(cmd + 12);
3919		ei_lba = get_unaligned_be32(cmd + 20);
3920		num = get_unaligned_be32(cmd + 28);
3921		check_prot = false;
3922		break;
3923	}
3924	if (unlikely(have_dif_prot && check_prot)) {
3925		if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3926		    (cmd[1] & 0xe0)) {
3927			mk_sense_invalid_opcode(scp);
3928			return check_condition_result;
3929		}
3930		if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3931		     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3932		    (cmd[1] & 0xe0) == 0)
3933			sdev_printk(KERN_ERR, scp->device, "Unprotected RD "
3934				    "to DIF device\n");
3935	}
3936	if (unlikely((sdebug_opts & SDEBUG_OPT_SHORT_TRANSFER) &&
3937		     atomic_read(&sdeb_inject_pending))) {
3938		num /= 2;
3939		atomic_set(&sdeb_inject_pending, 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3940	}
3941
3942	/*
3943	 * When checking device access params, for reads we only check data
3944	 * versus what is set at init time, so no need to lock.
3945	 */
3946	ret = check_device_access_params(scp, lba, num, false);
3947	if (ret)
3948		return ret;
3949	if (unlikely((SDEBUG_OPT_MEDIUM_ERR & sdebug_opts) &&
3950		     (lba <= (sdebug_medium_error_start + sdebug_medium_error_count - 1)) &&
3951		     ((lba + num) > sdebug_medium_error_start))) {
3952		/* claim unrecoverable read error */
3953		mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
3954		/* set info field and valid bit for fixed descriptor */
3955		if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
3956			scp->sense_buffer[0] |= 0x80;	/* Valid bit */
3957			ret = (lba < OPT_MEDIUM_ERR_ADDR)
3958			      ? OPT_MEDIUM_ERR_ADDR : (int)lba;
3959			put_unaligned_be32(ret, scp->sense_buffer + 3);
3960		}
3961		scsi_set_resid(scp, scsi_bufflen(scp));
3962		return check_condition_result;
3963	}
3964
3965	if (sdebug_dev_is_zoned(devip) ||
3966	    (sdebug_dix && scsi_prot_sg_count(scp)))  {
3967		sdeb_meta_read_lock(sip);
3968		meta_data_locked = true;
3969	}
3970
3971	/* DIX + T10 DIF */
3972	if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
3973		switch (prot_verify_read(scp, lba, num, ei_lba)) {
3974		case 1: /* Guard tag error */
3975			if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
3976				sdeb_meta_read_unlock(sip);
3977				mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
3978				return check_condition_result;
3979			} else if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
3980				sdeb_meta_read_unlock(sip);
3981				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
3982				return illegal_condition_result;
3983			}
3984			break;
3985		case 3: /* Reference tag error */
3986			if (cmd[1] >> 5 != 3) { /* RDPROTECT != 3 */
3987				sdeb_meta_read_unlock(sip);
3988				mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
3989				return check_condition_result;
3990			} else if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
3991				sdeb_meta_read_unlock(sip);
3992				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
3993				return illegal_condition_result;
3994			}
3995			break;
3996		}
3997	}
3998
3999	ret = do_device_access(sip, scp, 0, lba, num, 0, false, false);
4000	if (meta_data_locked)
4001		sdeb_meta_read_unlock(sip);
4002	if (unlikely(ret == -1))
4003		return DID_ERROR << 16;
4004
4005	scsi_set_resid(scp, scsi_bufflen(scp) - ret);
4006
4007	if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
4008		     atomic_read(&sdeb_inject_pending))) {
4009		if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
4010			mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
4011			atomic_set(&sdeb_inject_pending, 0);
4012			return check_condition_result;
4013		} else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
 
 
 
 
4014			/* Logical block guard check failed */
4015			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
4016			atomic_set(&sdeb_inject_pending, 0);
4017			return illegal_condition_result;
4018		} else if (SDEBUG_OPT_DIX_ERR & sdebug_opts) {
4019			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
4020			atomic_set(&sdeb_inject_pending, 0);
4021			return illegal_condition_result;
4022		}
4023	}
4024	return 0;
4025}
4026
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4027static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
4028			     unsigned int sectors, u32 ei_lba)
4029{
4030	int ret;
4031	struct t10_pi_tuple *sdt;
4032	void *daddr;
4033	sector_t sector = start_sec;
4034	int ppage_offset;
4035	int dpage_offset;
4036	struct sg_mapping_iter diter;
4037	struct sg_mapping_iter piter;
4038
4039	BUG_ON(scsi_sg_count(SCpnt) == 0);
4040	BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
4041
4042	sg_miter_start(&piter, scsi_prot_sglist(SCpnt),
4043			scsi_prot_sg_count(SCpnt),
4044			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
4045	sg_miter_start(&diter, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
4046			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
4047
4048	/* For each protection page */
4049	while (sg_miter_next(&piter)) {
4050		dpage_offset = 0;
4051		if (WARN_ON(!sg_miter_next(&diter))) {
4052			ret = 0x01;
4053			goto out;
4054		}
4055
4056		for (ppage_offset = 0; ppage_offset < piter.length;
4057		     ppage_offset += sizeof(struct t10_pi_tuple)) {
4058			/* If we're at the end of the current
4059			 * data page advance to the next one
4060			 */
4061			if (dpage_offset >= diter.length) {
4062				if (WARN_ON(!sg_miter_next(&diter))) {
4063					ret = 0x01;
4064					goto out;
4065				}
4066				dpage_offset = 0;
4067			}
4068
4069			sdt = piter.addr + ppage_offset;
4070			daddr = diter.addr + dpage_offset;
4071
4072			if (SCpnt->cmnd[1] >> 5 != 3) { /* WRPROTECT */
4073				ret = dif_verify(sdt, daddr, sector, ei_lba);
4074				if (ret)
4075					goto out;
4076			}
4077
4078			sector++;
4079			ei_lba++;
4080			dpage_offset += sdebug_sector_size;
4081		}
4082		diter.consumed = dpage_offset;
4083		sg_miter_stop(&diter);
4084	}
4085	sg_miter_stop(&piter);
4086
4087	dif_copy_prot(SCpnt, start_sec, sectors, false);
4088	dix_writes++;
4089
4090	return 0;
4091
4092out:
4093	dif_errors++;
4094	sg_miter_stop(&diter);
4095	sg_miter_stop(&piter);
4096	return ret;
4097}
4098
4099static unsigned long lba_to_map_index(sector_t lba)
4100{
4101	if (sdebug_unmap_alignment)
4102		lba += sdebug_unmap_granularity - sdebug_unmap_alignment;
4103	sector_div(lba, sdebug_unmap_granularity);
4104	return lba;
4105}
4106
4107static sector_t map_index_to_lba(unsigned long index)
4108{
4109	sector_t lba = index * sdebug_unmap_granularity;
4110
4111	if (sdebug_unmap_alignment)
4112		lba -= sdebug_unmap_granularity - sdebug_unmap_alignment;
4113	return lba;
4114}
4115
4116static unsigned int map_state(struct sdeb_store_info *sip, sector_t lba,
4117			      unsigned int *num)
4118{
4119	sector_t end;
4120	unsigned int mapped;
4121	unsigned long index;
4122	unsigned long next;
4123
4124	index = lba_to_map_index(lba);
4125	mapped = test_bit(index, sip->map_storep);
4126
4127	if (mapped)
4128		next = find_next_zero_bit(sip->map_storep, map_size, index);
4129	else
4130		next = find_next_bit(sip->map_storep, map_size, index);
4131
4132	end = min_t(sector_t, sdebug_store_sectors,  map_index_to_lba(next));
4133	*num = end - lba;
4134	return mapped;
4135}
4136
4137static void map_region(struct sdeb_store_info *sip, sector_t lba,
4138		       unsigned int len)
4139{
4140	sector_t end = lba + len;
4141
4142	while (lba < end) {
4143		unsigned long index = lba_to_map_index(lba);
4144
4145		if (index < map_size)
4146			set_bit(index, sip->map_storep);
4147
4148		lba = map_index_to_lba(index + 1);
4149	}
4150}
4151
4152static void unmap_region(struct sdeb_store_info *sip, sector_t lba,
4153			 unsigned int len)
4154{
4155	sector_t end = lba + len;
4156	u8 *fsp = sip->storep;
4157
4158	while (lba < end) {
4159		unsigned long index = lba_to_map_index(lba);
4160
4161		if (lba == map_index_to_lba(index) &&
4162		    lba + sdebug_unmap_granularity <= end &&
4163		    index < map_size) {
4164			clear_bit(index, sip->map_storep);
4165			if (sdebug_lbprz) {  /* for LBPRZ=2 return 0xff_s */
4166				memset(fsp + lba * sdebug_sector_size,
 
4167				       (sdebug_lbprz & 1) ? 0 : 0xff,
4168				       sdebug_sector_size *
4169				       sdebug_unmap_granularity);
4170			}
4171			if (sip->dif_storep) {
4172				memset(sip->dif_storep + lba, 0xff,
4173				       sizeof(*sip->dif_storep) *
4174				       sdebug_unmap_granularity);
4175			}
4176		}
4177		lba = map_index_to_lba(index + 1);
4178	}
4179}
4180
4181static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4182{
4183	bool check_prot;
 
4184	u32 num;
4185	u8 group = 0;
4186	u32 ei_lba;
 
4187	int ret;
4188	u64 lba;
4189	struct sdeb_store_info *sip = devip2sip(devip, true);
4190	u8 *cmd = scp->cmnd;
4191	bool meta_data_locked = false;
4192
4193	switch (cmd[0]) {
4194	case WRITE_16:
4195		ei_lba = 0;
4196		lba = get_unaligned_be64(cmd + 2);
4197		num = get_unaligned_be32(cmd + 10);
4198		group = cmd[14] & 0x3f;
4199		check_prot = true;
4200		break;
4201	case WRITE_10:
4202		ei_lba = 0;
4203		lba = get_unaligned_be32(cmd + 2);
4204		group = cmd[6] & 0x3f;
4205		num = get_unaligned_be16(cmd + 7);
4206		check_prot = true;
4207		break;
4208	case WRITE_6:
4209		ei_lba = 0;
4210		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
4211		      (u32)(cmd[1] & 0x1f) << 16;
4212		num = (0 == cmd[4]) ? 256 : cmd[4];
4213		check_prot = true;
4214		break;
4215	case WRITE_12:
4216		ei_lba = 0;
4217		lba = get_unaligned_be32(cmd + 2);
4218		num = get_unaligned_be32(cmd + 6);
4219		group = cmd[6] & 0x3f;
4220		check_prot = true;
4221		break;
4222	case 0x53:	/* XDWRITEREAD(10) */
4223		ei_lba = 0;
4224		lba = get_unaligned_be32(cmd + 2);
4225		group = cmd[6] & 0x1f;
4226		num = get_unaligned_be16(cmd + 7);
4227		check_prot = false;
4228		break;
4229	default:	/* assume WRITE(32) */
4230		group = cmd[6] & 0x3f;
4231		lba = get_unaligned_be64(cmd + 12);
4232		ei_lba = get_unaligned_be32(cmd + 20);
4233		num = get_unaligned_be32(cmd + 28);
4234		check_prot = false;
4235		break;
4236	}
4237	if (unlikely(have_dif_prot && check_prot)) {
4238		if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
4239		    (cmd[1] & 0xe0)) {
4240			mk_sense_invalid_opcode(scp);
4241			return check_condition_result;
4242		}
4243		if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
4244		     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
4245		    (cmd[1] & 0xe0) == 0)
4246			sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
4247				    "to DIF device\n");
4248	}
4249
4250	if (sdebug_dev_is_zoned(devip) ||
4251	    (sdebug_dix && scsi_prot_sg_count(scp)) ||
4252	    scsi_debug_lbp())  {
4253		sdeb_meta_write_lock(sip);
4254		meta_data_locked = true;
4255	}
4256
4257	ret = check_device_access_params(scp, lba, num, true);
4258	if (ret) {
4259		if (meta_data_locked)
4260			sdeb_meta_write_unlock(sip);
4261		return ret;
4262	}
4263
 
 
4264	/* DIX + T10 DIF */
4265	if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
4266		switch (prot_verify_write(scp, lba, num, ei_lba)) {
4267		case 1: /* Guard tag error */
4268			if (scp->prot_flags & SCSI_PROT_GUARD_CHECK) {
4269				sdeb_meta_write_unlock(sip);
4270				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
4271				return illegal_condition_result;
4272			} else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
4273				sdeb_meta_write_unlock(sip);
4274				mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
4275				return check_condition_result;
4276			}
4277			break;
4278		case 3: /* Reference tag error */
4279			if (scp->prot_flags & SCSI_PROT_REF_CHECK) {
4280				sdeb_meta_write_unlock(sip);
4281				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 3);
4282				return illegal_condition_result;
4283			} else if (scp->cmnd[1] >> 5 != 3) { /* WRPROTECT != 3 */
4284				sdeb_meta_write_unlock(sip);
4285				mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 3);
4286				return check_condition_result;
4287			}
4288			break;
4289		}
4290	}
4291
4292	ret = do_device_access(sip, scp, 0, lba, num, group, true, false);
4293	if (unlikely(scsi_debug_lbp()))
4294		map_region(sip, lba, num);
4295
4296	/* If ZBC zone then bump its write pointer */
4297	if (sdebug_dev_is_zoned(devip))
4298		zbc_inc_wp(devip, lba, num);
4299	if (meta_data_locked)
4300		sdeb_meta_write_unlock(sip);
4301
4302	if (unlikely(-1 == ret))
4303		return DID_ERROR << 16;
4304	else if (unlikely(sdebug_verbose &&
4305			  (ret < (num * sdebug_sector_size))))
4306		sdev_printk(KERN_INFO, scp->device,
4307			    "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
4308			    my_name, num * sdebug_sector_size, ret);
4309
4310	if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
4311		     atomic_read(&sdeb_inject_pending))) {
4312		if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
4313			mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
4314			atomic_set(&sdeb_inject_pending, 0);
4315			return check_condition_result;
4316		} else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
4317			/* Logical block guard check failed */
4318			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
4319			atomic_set(&sdeb_inject_pending, 0);
4320			return illegal_condition_result;
4321		} else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
4322			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
4323			atomic_set(&sdeb_inject_pending, 0);
4324			return illegal_condition_result;
4325		}
4326	}
4327	return 0;
4328}
4329
4330/*
4331 * T10 has only specified WRITE SCATTERED(16) and WRITE SCATTERED(32).
4332 * No READ GATHERED yet (requires bidi or long cdb holding gather list).
4333 */
4334static int resp_write_scat(struct scsi_cmnd *scp,
4335			   struct sdebug_dev_info *devip)
4336{
4337	u8 *cmd = scp->cmnd;
4338	u8 *lrdp = NULL;
4339	u8 *up;
4340	struct sdeb_store_info *sip = devip2sip(devip, true);
4341	u8 wrprotect;
4342	u16 lbdof, num_lrd, k;
4343	u32 num, num_by, bt_len, lbdof_blen, sg_off, cum_lb;
4344	u32 lb_size = sdebug_sector_size;
4345	u32 ei_lba;
4346	u64 lba;
4347	u8 group;
4348	int ret, res;
4349	bool is_16;
4350	static const u32 lrd_size = 32; /* + parameter list header size */
4351
4352	if (cmd[0] == VARIABLE_LENGTH_CMD) {
4353		is_16 = false;
4354		group = cmd[6] & 0x3f;
4355		wrprotect = (cmd[10] >> 5) & 0x7;
4356		lbdof = get_unaligned_be16(cmd + 12);
4357		num_lrd = get_unaligned_be16(cmd + 16);
4358		bt_len = get_unaligned_be32(cmd + 28);
4359	} else {        /* that leaves WRITE SCATTERED(16) */
4360		is_16 = true;
4361		wrprotect = (cmd[2] >> 5) & 0x7;
4362		lbdof = get_unaligned_be16(cmd + 4);
4363		num_lrd = get_unaligned_be16(cmd + 8);
4364		bt_len = get_unaligned_be32(cmd + 10);
4365		group = cmd[14] & 0x3f;
4366		if (unlikely(have_dif_prot)) {
4367			if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
4368			    wrprotect) {
4369				mk_sense_invalid_opcode(scp);
4370				return illegal_condition_result;
4371			}
4372			if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
4373			     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
4374			     wrprotect == 0)
4375				sdev_printk(KERN_ERR, scp->device,
4376					    "Unprotected WR to DIF device\n");
4377		}
4378	}
4379	if ((num_lrd == 0) || (bt_len == 0))
4380		return 0;       /* T10 says these do-nothings are not errors */
4381	if (lbdof == 0) {
4382		if (sdebug_verbose)
4383			sdev_printk(KERN_INFO, scp->device,
4384				"%s: %s: LB Data Offset field bad\n",
4385				my_name, __func__);
4386		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4387		return illegal_condition_result;
4388	}
4389	lbdof_blen = lbdof * lb_size;
4390	if ((lrd_size + (num_lrd * lrd_size)) > lbdof_blen) {
4391		if (sdebug_verbose)
4392			sdev_printk(KERN_INFO, scp->device,
4393				"%s: %s: LBA range descriptors don't fit\n",
4394				my_name, __func__);
4395		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
4396		return illegal_condition_result;
4397	}
4398	lrdp = kzalloc(lbdof_blen, GFP_ATOMIC | __GFP_NOWARN);
4399	if (lrdp == NULL)
4400		return SCSI_MLQUEUE_HOST_BUSY;
4401	if (sdebug_verbose)
4402		sdev_printk(KERN_INFO, scp->device,
4403			"%s: %s: Fetch header+scatter_list, lbdof_blen=%u\n",
4404			my_name, __func__, lbdof_blen);
4405	res = fetch_to_dev_buffer(scp, lrdp, lbdof_blen);
4406	if (res == -1) {
4407		ret = DID_ERROR << 16;
4408		goto err_out;
4409	}
4410
4411	/* Just keep it simple and always lock for now */
4412	sdeb_meta_write_lock(sip);
4413	sg_off = lbdof_blen;
4414	/* Spec says Buffer xfer Length field in number of LBs in dout */
4415	cum_lb = 0;
4416	for (k = 0, up = lrdp + lrd_size; k < num_lrd; ++k, up += lrd_size) {
4417		lba = get_unaligned_be64(up + 0);
4418		num = get_unaligned_be32(up + 8);
4419		if (sdebug_verbose)
4420			sdev_printk(KERN_INFO, scp->device,
4421				"%s: %s: k=%d  LBA=0x%llx num=%u  sg_off=%u\n",
4422				my_name, __func__, k, lba, num, sg_off);
4423		if (num == 0)
4424			continue;
4425		ret = check_device_access_params(scp, lba, num, true);
4426		if (ret)
4427			goto err_out_unlock;
4428		num_by = num * lb_size;
4429		ei_lba = is_16 ? 0 : get_unaligned_be32(up + 12);
4430
4431		if ((cum_lb + num) > bt_len) {
4432			if (sdebug_verbose)
4433				sdev_printk(KERN_INFO, scp->device,
4434				    "%s: %s: sum of blocks > data provided\n",
4435				    my_name, __func__);
4436			mk_sense_buffer(scp, ILLEGAL_REQUEST, WRITE_ERROR_ASC,
4437					0);
4438			ret = illegal_condition_result;
4439			goto err_out_unlock;
4440		}
4441
4442		/* DIX + T10 DIF */
4443		if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
4444			int prot_ret = prot_verify_write(scp, lba, num,
4445							 ei_lba);
4446
4447			if (prot_ret) {
4448				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10,
4449						prot_ret);
4450				ret = illegal_condition_result;
4451				goto err_out_unlock;
4452			}
4453		}
4454
4455		/*
4456		 * Write ranges atomically to keep as close to pre-atomic
4457		 * writes behaviour as possible.
4458		 */
4459		ret = do_device_access(sip, scp, sg_off, lba, num, group, true, true);
4460		/* If ZBC zone then bump its write pointer */
4461		if (sdebug_dev_is_zoned(devip))
4462			zbc_inc_wp(devip, lba, num);
4463		if (unlikely(scsi_debug_lbp()))
4464			map_region(sip, lba, num);
4465		if (unlikely(-1 == ret)) {
4466			ret = DID_ERROR << 16;
4467			goto err_out_unlock;
4468		} else if (unlikely(sdebug_verbose && (ret < num_by)))
4469			sdev_printk(KERN_INFO, scp->device,
4470			    "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
4471			    my_name, num_by, ret);
4472
4473		if (unlikely((sdebug_opts & SDEBUG_OPT_RECOV_DIF_DIX) &&
4474			     atomic_read(&sdeb_inject_pending))) {
4475			if (sdebug_opts & SDEBUG_OPT_RECOVERED_ERR) {
4476				mk_sense_buffer(scp, RECOVERED_ERROR, THRESHOLD_EXCEEDED, 0);
4477				atomic_set(&sdeb_inject_pending, 0);
4478				ret = check_condition_result;
4479				goto err_out_unlock;
4480			} else if (sdebug_opts & SDEBUG_OPT_DIF_ERR) {
4481				/* Logical block guard check failed */
4482				mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
4483				atomic_set(&sdeb_inject_pending, 0);
4484				ret = illegal_condition_result;
4485				goto err_out_unlock;
4486			} else if (sdebug_opts & SDEBUG_OPT_DIX_ERR) {
4487				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
4488				atomic_set(&sdeb_inject_pending, 0);
4489				ret = illegal_condition_result;
4490				goto err_out_unlock;
4491			}
4492		}
4493		sg_off += num_by;
4494		cum_lb += num;
4495	}
4496	ret = 0;
4497err_out_unlock:
4498	sdeb_meta_write_unlock(sip);
4499err_out:
4500	kfree(lrdp);
4501	return ret;
4502}
4503
4504static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num,
4505			   u32 ei_lba, bool unmap, bool ndob)
4506{
4507	struct scsi_device *sdp = scp->device;
4508	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
4509	unsigned long long i;
4510	u64 block, lbaa;
4511	u32 lb_size = sdebug_sector_size;
4512	int ret;
4513	struct sdeb_store_info *sip = devip2sip((struct sdebug_dev_info *)
4514						scp->device->hostdata, true);
4515	u8 *fs1p;
4516	u8 *fsp;
4517	bool meta_data_locked = false;
4518
4519	if (sdebug_dev_is_zoned(devip) || scsi_debug_lbp()) {
4520		sdeb_meta_write_lock(sip);
4521		meta_data_locked = true;
4522	}
4523
4524	ret = check_device_access_params(scp, lba, num, true);
4525	if (ret)
4526		goto out;
 
 
4527
4528	if (unmap && scsi_debug_lbp()) {
4529		unmap_region(sip, lba, num);
4530		goto out;
4531	}
4532	lbaa = lba;
4533	block = do_div(lbaa, sdebug_store_sectors);
4534	/* if ndob then zero 1 logical block, else fetch 1 logical block */
4535	fsp = sip->storep;
4536	fs1p = fsp + (block * lb_size);
4537	sdeb_data_write_lock(sip);
4538	if (ndob) {
4539		memset(fs1p, 0, lb_size);
4540		ret = 0;
4541	} else
4542		ret = fetch_to_dev_buffer(scp, fs1p, lb_size);
 
4543
4544	if (-1 == ret) {
4545		ret = DID_ERROR << 16;
4546		goto out;
4547	} else if (sdebug_verbose && !ndob && (ret < lb_size))
4548		sdev_printk(KERN_INFO, scp->device,
4549			    "%s: %s: lb size=%u, IO sent=%d bytes\n",
4550			    my_name, "write same", lb_size, ret);
 
4551
4552	/* Copy first sector to remaining blocks */
4553	for (i = 1 ; i < num ; i++) {
4554		lbaa = lba + i;
4555		block = do_div(lbaa, sdebug_store_sectors);
4556		memmove(fsp + (block * lb_size), fs1p, lb_size);
4557	}
4558	if (scsi_debug_lbp())
4559		map_region(sip, lba, num);
4560	/* If ZBC zone then bump its write pointer */
4561	if (sdebug_dev_is_zoned(devip))
4562		zbc_inc_wp(devip, lba, num);
4563	sdeb_data_write_unlock(sip);
4564	ret = 0;
4565out:
4566	if (meta_data_locked)
4567		sdeb_meta_write_unlock(sip);
4568	return ret;
4569}
4570
4571static int resp_write_same_10(struct scsi_cmnd *scp,
4572			      struct sdebug_dev_info *devip)
4573{
4574	u8 *cmd = scp->cmnd;
4575	u32 lba;
4576	u16 num;
4577	u32 ei_lba = 0;
4578	bool unmap = false;
4579
4580	if (cmd[1] & 0x8) {
4581		if (sdebug_lbpws10 == 0) {
4582			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
4583			return check_condition_result;
4584		} else
4585			unmap = true;
4586	}
4587	lba = get_unaligned_be32(cmd + 2);
4588	num = get_unaligned_be16(cmd + 7);
4589	if (num > sdebug_write_same_length) {
4590		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
4591		return check_condition_result;
4592	}
4593	return resp_write_same(scp, lba, num, ei_lba, unmap, false);
4594}
4595
4596static int resp_write_same_16(struct scsi_cmnd *scp,
4597			      struct sdebug_dev_info *devip)
4598{
4599	u8 *cmd = scp->cmnd;
4600	u64 lba;
4601	u32 num;
4602	u32 ei_lba = 0;
4603	bool unmap = false;
4604	bool ndob = false;
4605
4606	if (cmd[1] & 0x8) {	/* UNMAP */
4607		if (sdebug_lbpws == 0) {
4608			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
4609			return check_condition_result;
4610		} else
4611			unmap = true;
4612	}
4613	if (cmd[1] & 0x1)  /* NDOB (no data-out buffer, assumes zeroes) */
4614		ndob = true;
4615	lba = get_unaligned_be64(cmd + 2);
4616	num = get_unaligned_be32(cmd + 10);
4617	if (num > sdebug_write_same_length) {
4618		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
4619		return check_condition_result;
4620	}
4621	return resp_write_same(scp, lba, num, ei_lba, unmap, ndob);
4622}
4623
4624/* Note the mode field is in the same position as the (lower) service action
4625 * field. For the Report supported operation codes command, SPC-4 suggests
4626 * each mode of this command should be reported separately; for future. */
4627static int resp_write_buffer(struct scsi_cmnd *scp,
4628			     struct sdebug_dev_info *devip)
4629{
4630	u8 *cmd = scp->cmnd;
4631	struct scsi_device *sdp = scp->device;
4632	struct sdebug_dev_info *dp;
4633	u8 mode;
4634
4635	mode = cmd[1] & 0x1f;
4636	switch (mode) {
4637	case 0x4:	/* download microcode (MC) and activate (ACT) */
4638		/* set UAs on this device only */
4639		set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
4640		set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
4641		break;
4642	case 0x5:	/* download MC, save and ACT */
4643		set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
4644		break;
4645	case 0x6:	/* download MC with offsets and ACT */
4646		/* set UAs on most devices (LUs) in this target */
4647		list_for_each_entry(dp,
4648				    &devip->sdbg_host->dev_info_list,
4649				    dev_list)
4650			if (dp->target == sdp->id) {
4651				set_bit(SDEBUG_UA_BUS_RESET, dp->uas_bm);
4652				if (devip != dp)
4653					set_bit(SDEBUG_UA_MICROCODE_CHANGED,
4654						dp->uas_bm);
4655			}
4656		break;
4657	case 0x7:	/* download MC with offsets, save, and ACT */
4658		/* set UA on all devices (LUs) in this target */
4659		list_for_each_entry(dp,
4660				    &devip->sdbg_host->dev_info_list,
4661				    dev_list)
4662			if (dp->target == sdp->id)
4663				set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET,
4664					dp->uas_bm);
4665		break;
4666	default:
4667		/* do nothing for this command for other mode values */
4668		break;
4669	}
4670	return 0;
4671}
4672
4673static int resp_comp_write(struct scsi_cmnd *scp,
4674			   struct sdebug_dev_info *devip)
4675{
4676	u8 *cmd = scp->cmnd;
4677	u8 *arr;
4678	struct sdeb_store_info *sip = devip2sip(devip, true);
4679	u64 lba;
4680	u32 dnum;
4681	u32 lb_size = sdebug_sector_size;
4682	u8 num;
 
4683	int ret;
4684	int retval = 0;
4685
4686	lba = get_unaligned_be64(cmd + 2);
4687	num = cmd[13];		/* 1 to a maximum of 255 logical blocks */
4688	if (0 == num)
4689		return 0;	/* degenerate case, not an error */
4690	if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
4691	    (cmd[1] & 0xe0)) {
4692		mk_sense_invalid_opcode(scp);
4693		return check_condition_result;
4694	}
4695	if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
4696	     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
4697	    (cmd[1] & 0xe0) == 0)
4698		sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
4699			    "to DIF device\n");
4700	ret = check_device_access_params(scp, lba, num, false);
4701	if (ret)
4702		return ret;
 
 
 
 
 
 
 
 
 
4703	dnum = 2 * num;
4704	arr = kcalloc(lb_size, dnum, GFP_ATOMIC);
4705	if (NULL == arr) {
4706		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4707				INSUFF_RES_ASCQ);
4708		return check_condition_result;
4709	}
4710
4711	ret = do_dout_fetch(scp, dnum, arr);
 
 
 
 
 
 
 
4712	if (ret == -1) {
4713		retval = DID_ERROR << 16;
4714		goto cleanup_free;
4715	} else if (sdebug_verbose && (ret < (dnum * lb_size)))
4716		sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
4717			    "indicated=%u, IO sent=%d bytes\n", my_name,
4718			    dnum * lb_size, ret);
4719
4720	sdeb_data_write_lock(sip);
4721	sdeb_meta_write_lock(sip);
4722	if (!comp_write_worker(sip, lba, num, arr, false)) {
4723		mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
4724		retval = check_condition_result;
4725		goto cleanup_unlock;
4726	}
4727
4728	/* Cover sip->map_storep (which map_region()) sets with data lock */
4729	if (scsi_debug_lbp())
4730		map_region(sip, lba, num);
4731cleanup_unlock:
4732	sdeb_meta_write_unlock(sip);
4733	sdeb_data_write_unlock(sip);
4734cleanup_free:
4735	kfree(arr);
4736	return retval;
4737}
4738
4739struct unmap_block_desc {
4740	__be64	lba;
4741	__be32	blocks;
4742	__be32	__reserved;
4743};
4744
4745static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
4746{
4747	unsigned char *buf;
4748	struct unmap_block_desc *desc;
4749	struct sdeb_store_info *sip = devip2sip(devip, true);
4750	unsigned int i, payload_len, descriptors;
4751	int ret;
 
 
4752
4753	if (!scsi_debug_lbp())
4754		return 0;	/* fib and say its done */
4755	payload_len = get_unaligned_be16(scp->cmnd + 7);
4756	BUG_ON(scsi_bufflen(scp) != payload_len);
4757
4758	descriptors = (payload_len - 8) / 16;
4759	if (descriptors > sdebug_unmap_max_desc) {
4760		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
4761		return check_condition_result;
4762	}
4763
4764	buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
4765	if (!buf) {
4766		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
4767				INSUFF_RES_ASCQ);
4768		return check_condition_result;
4769	}
4770
4771	scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
4772
4773	BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
4774	BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
4775
4776	desc = (void *)&buf[8];
4777
4778	sdeb_meta_write_lock(sip);
4779
4780	for (i = 0 ; i < descriptors ; i++) {
4781		unsigned long long lba = get_unaligned_be64(&desc[i].lba);
4782		unsigned int num = get_unaligned_be32(&desc[i].blocks);
4783
4784		ret = check_device_access_params(scp, lba, num, true);
4785		if (ret)
4786			goto out;
4787
4788		unmap_region(sip, lba, num);
4789	}
4790
4791	ret = 0;
4792
4793out:
4794	sdeb_meta_write_unlock(sip);
4795	kfree(buf);
4796
4797	return ret;
4798}
4799
4800#define SDEBUG_GET_LBA_STATUS_LEN 32
4801
4802static int resp_get_lba_status(struct scsi_cmnd *scp,
4803			       struct sdebug_dev_info *devip)
4804{
4805	u8 *cmd = scp->cmnd;
4806	u64 lba;
4807	u32 alloc_len, mapped, num;
4808	int ret;
4809	u8 arr[SDEBUG_GET_LBA_STATUS_LEN];
 
4810
4811	lba = get_unaligned_be64(cmd + 2);
4812	alloc_len = get_unaligned_be32(cmd + 10);
4813
4814	if (alloc_len < 24)
4815		return 0;
4816
4817	ret = check_device_access_params(scp, lba, 1, false);
4818	if (ret)
4819		return ret;
4820
4821	if (scsi_debug_lbp()) {
4822		struct sdeb_store_info *sip = devip2sip(devip, true);
4823
4824		mapped = map_state(sip, lba, &num);
4825	} else {
4826		mapped = 1;
4827		/* following just in case virtual_gb changed */
4828		sdebug_capacity = get_sdebug_capacity();
4829		if (sdebug_capacity - lba <= 0xffffffff)
4830			num = sdebug_capacity - lba;
4831		else
4832			num = 0xffffffff;
4833	}
4834
4835	memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
4836	put_unaligned_be32(20, arr);		/* Parameter Data Length */
4837	put_unaligned_be64(lba, arr + 8);	/* LBA */
4838	put_unaligned_be32(num, arr + 16);	/* Number of blocks */
4839	arr[20] = !mapped;		/* prov_stat=0: mapped; 1: dealloc */
4840
4841	return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
4842}
4843
4844static int resp_get_stream_status(struct scsi_cmnd *scp,
4845				  struct sdebug_dev_info *devip)
4846{
4847	u16 starting_stream_id, stream_id;
4848	const u8 *cmd = scp->cmnd;
4849	u32 alloc_len, offset;
4850	u8 arr[256] = {};
4851	struct scsi_stream_status_header *h = (void *)arr;
4852
4853	starting_stream_id = get_unaligned_be16(cmd + 4);
4854	alloc_len = get_unaligned_be32(cmd + 10);
4855
4856	if (alloc_len < 8) {
4857		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
4858		return check_condition_result;
4859	}
4860
4861	if (starting_stream_id >= MAXIMUM_NUMBER_OF_STREAMS) {
4862		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
4863		return check_condition_result;
4864	}
4865
4866	/*
4867	 * The GET STREAM STATUS command only reports status information
4868	 * about open streams. Treat the non-permanent stream as open.
4869	 */
4870	put_unaligned_be16(MAXIMUM_NUMBER_OF_STREAMS,
4871			   &h->number_of_open_streams);
4872
4873	for (offset = 8, stream_id = starting_stream_id;
4874	     offset + 8 <= min_t(u32, alloc_len, sizeof(arr)) &&
4875		     stream_id < MAXIMUM_NUMBER_OF_STREAMS;
4876	     offset += 8, stream_id++) {
4877		struct scsi_stream_status *stream_status = (void *)arr + offset;
4878
4879		stream_status->perm = stream_id < PERMANENT_STREAM_COUNT;
4880		put_unaligned_be16(stream_id,
4881				   &stream_status->stream_identifier);
4882		stream_status->rel_lifetime = stream_id + 1;
4883	}
4884	put_unaligned_be32(offset - 8, &h->len); /* PARAMETER DATA LENGTH */
4885
4886	return fill_from_dev_buffer(scp, arr, min(offset, alloc_len));
4887}
4888
4889static int resp_sync_cache(struct scsi_cmnd *scp,
4890			   struct sdebug_dev_info *devip)
4891{
4892	int res = 0;
4893	u64 lba;
4894	u32 num_blocks;
4895	u8 *cmd = scp->cmnd;
4896
4897	if (cmd[0] == SYNCHRONIZE_CACHE) {	/* 10 byte cdb */
4898		lba = get_unaligned_be32(cmd + 2);
4899		num_blocks = get_unaligned_be16(cmd + 7);
4900	} else {				/* SYNCHRONIZE_CACHE(16) */
4901		lba = get_unaligned_be64(cmd + 2);
4902		num_blocks = get_unaligned_be32(cmd + 10);
4903	}
4904	if (lba + num_blocks > sdebug_capacity) {
4905		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4906		return check_condition_result;
4907	}
4908	if (!write_since_sync || (cmd[1] & 0x2))
4909		res = SDEG_RES_IMMED_MASK;
4910	else		/* delay if write_since_sync and IMMED clear */
4911		write_since_sync = false;
4912	return res;
4913}
4914
4915/*
4916 * Assuming the LBA+num_blocks is not out-of-range, this function will return
4917 * CONDITION MET if the specified blocks will/have fitted in the cache, and
4918 * a GOOD status otherwise. Model a disk with a big cache and yield
4919 * CONDITION MET. Actually tries to bring range in main memory into the
4920 * cache associated with the CPU(s).
4921 */
4922static int resp_pre_fetch(struct scsi_cmnd *scp,
4923			  struct sdebug_dev_info *devip)
4924{
4925	int res = 0;
4926	u64 lba;
4927	u64 block, rest = 0;
4928	u32 nblks;
4929	u8 *cmd = scp->cmnd;
4930	struct sdeb_store_info *sip = devip2sip(devip, true);
4931	u8 *fsp = sip->storep;
4932
4933	if (cmd[0] == PRE_FETCH) {	/* 10 byte cdb */
4934		lba = get_unaligned_be32(cmd + 2);
4935		nblks = get_unaligned_be16(cmd + 7);
4936	} else {			/* PRE-FETCH(16) */
4937		lba = get_unaligned_be64(cmd + 2);
4938		nblks = get_unaligned_be32(cmd + 10);
4939	}
4940	if (lba + nblks > sdebug_capacity) {
4941		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
4942		return check_condition_result;
4943	}
4944	if (!fsp)
4945		goto fini;
4946	/* PRE-FETCH spec says nothing about LBP or PI so skip them */
4947	block = do_div(lba, sdebug_store_sectors);
4948	if (block + nblks > sdebug_store_sectors)
4949		rest = block + nblks - sdebug_store_sectors;
4950
4951	/* Try to bring the PRE-FETCH range into CPU's cache */
4952	sdeb_data_read_lock(sip);
4953	prefetch_range(fsp + (sdebug_sector_size * block),
4954		       (nblks - rest) * sdebug_sector_size);
4955	if (rest)
4956		prefetch_range(fsp, rest * sdebug_sector_size);
4957
4958	sdeb_data_read_unlock(sip);
4959fini:
4960	if (cmd[1] & 0x2)
4961		res = SDEG_RES_IMMED_MASK;
4962	return res | condition_met_result;
4963}
4964
4965#define RL_BUCKET_ELEMS 8
4966
4967/* Even though each pseudo target has a REPORT LUNS "well known logical unit"
4968 * (W-LUN), the normal Linux scanning logic does not associate it with a
4969 * device (e.g. /dev/sg7). The following magic will make that association:
4970 *   "cd /sys/class/scsi_host/host<n> ; echo '- - 49409' > scan"
4971 * where <n> is a host number. If there are multiple targets in a host then
4972 * the above will associate a W-LUN to each target. To only get a W-LUN
4973 * for target 2, then use "echo '- 2 49409' > scan" .
4974 */
4975static int resp_report_luns(struct scsi_cmnd *scp,
4976			    struct sdebug_dev_info *devip)
4977{
4978	unsigned char *cmd = scp->cmnd;
4979	unsigned int alloc_len;
4980	unsigned char select_report;
4981	u64 lun;
4982	struct scsi_lun *lun_p;
4983	u8 arr[RL_BUCKET_ELEMS * sizeof(struct scsi_lun)];
4984	unsigned int lun_cnt;	/* normal LUN count (max: 256) */
4985	unsigned int wlun_cnt;	/* report luns W-LUN count */
4986	unsigned int tlun_cnt;	/* total LUN count */
4987	unsigned int rlen;	/* response length (in bytes) */
4988	int k, j, n, res;
4989	unsigned int off_rsp = 0;
4990	const int sz_lun = sizeof(struct scsi_lun);
4991
4992	clear_luns_changed_on_target(devip);
4993
4994	select_report = cmd[2];
4995	alloc_len = get_unaligned_be32(cmd + 6);
4996
4997	if (alloc_len < 4) {
4998		pr_err("alloc len too small %d\n", alloc_len);
4999		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
5000		return check_condition_result;
5001	}
5002
5003	switch (select_report) {
5004	case 0:		/* all LUNs apart from W-LUNs */
5005		lun_cnt = sdebug_max_luns;
5006		wlun_cnt = 0;
5007		break;
5008	case 1:		/* only W-LUNs */
5009		lun_cnt = 0;
5010		wlun_cnt = 1;
5011		break;
5012	case 2:		/* all LUNs */
5013		lun_cnt = sdebug_max_luns;
5014		wlun_cnt = 1;
5015		break;
5016	case 0x10:	/* only administrative LUs */
5017	case 0x11:	/* see SPC-5 */
5018	case 0x12:	/* only subsiduary LUs owned by referenced LU */
5019	default:
5020		pr_debug("select report invalid %d\n", select_report);
5021		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
5022		return check_condition_result;
5023	}
5024
5025	if (sdebug_no_lun_0 && (lun_cnt > 0))
5026		--lun_cnt;
5027
5028	tlun_cnt = lun_cnt + wlun_cnt;
5029	rlen = tlun_cnt * sz_lun;	/* excluding 8 byte header */
5030	scsi_set_resid(scp, scsi_bufflen(scp));
5031	pr_debug("select_report %d luns = %d wluns = %d no_lun0 %d\n",
5032		 select_report, lun_cnt, wlun_cnt, sdebug_no_lun_0);
5033
5034	/* loops rely on sizeof response header same as sizeof lun (both 8) */
5035	lun = sdebug_no_lun_0 ? 1 : 0;
5036	for (k = 0, j = 0, res = 0; true; ++k, j = 0) {
5037		memset(arr, 0, sizeof(arr));
5038		lun_p = (struct scsi_lun *)&arr[0];
5039		if (k == 0) {
5040			put_unaligned_be32(rlen, &arr[0]);
5041			++lun_p;
5042			j = 1;
5043		}
5044		for ( ; j < RL_BUCKET_ELEMS; ++j, ++lun_p) {
5045			if ((k * RL_BUCKET_ELEMS) + j > lun_cnt)
5046				break;
5047			int_to_scsilun(lun++, lun_p);
5048			if (lun > 1 && sdebug_lun_am == SAM_LUN_AM_FLAT)
5049				lun_p->scsi_lun[0] |= 0x40;
5050		}
5051		if (j < RL_BUCKET_ELEMS)
5052			break;
5053		n = j * sz_lun;
5054		res = p_fill_from_dev_buffer(scp, arr, n, off_rsp);
5055		if (res)
5056			return res;
5057		off_rsp += n;
5058	}
5059	if (wlun_cnt) {
5060		int_to_scsilun(SCSI_W_LUN_REPORT_LUNS, lun_p);
5061		++j;
5062	}
5063	if (j > 0)
5064		res = p_fill_from_dev_buffer(scp, arr, j * sz_lun, off_rsp);
5065	return res;
5066}
5067
5068static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
5069{
5070	bool is_bytchk3 = false;
5071	u8 bytchk;
5072	int ret, j;
5073	u32 vnum, a_num, off;
5074	const u32 lb_size = sdebug_sector_size;
5075	u64 lba;
5076	u8 *arr;
5077	u8 *cmd = scp->cmnd;
5078	struct sdeb_store_info *sip = devip2sip(devip, true);
5079
5080	bytchk = (cmd[1] >> 1) & 0x3;
5081	if (bytchk == 0) {
5082		return 0;	/* always claim internal verify okay */
5083	} else if (bytchk == 2) {
5084		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
5085		return check_condition_result;
5086	} else if (bytchk == 3) {
5087		is_bytchk3 = true;	/* 1 block sent, compared repeatedly */
5088	}
5089	switch (cmd[0]) {
5090	case VERIFY_16:
5091		lba = get_unaligned_be64(cmd + 2);
5092		vnum = get_unaligned_be32(cmd + 10);
5093		break;
5094	case VERIFY:		/* is VERIFY(10) */
5095		lba = get_unaligned_be32(cmd + 2);
5096		vnum = get_unaligned_be16(cmd + 7);
5097		break;
5098	default:
5099		mk_sense_invalid_opcode(scp);
5100		return check_condition_result;
5101	}
5102	if (vnum == 0)
5103		return 0;	/* not an error */
5104	a_num = is_bytchk3 ? 1 : vnum;
5105	/* Treat following check like one for read (i.e. no write) access */
5106	ret = check_device_access_params(scp, lba, a_num, false);
5107	if (ret)
5108		return ret;
5109
5110	arr = kcalloc(lb_size, vnum, GFP_ATOMIC | __GFP_NOWARN);
5111	if (!arr) {
5112		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
5113				INSUFF_RES_ASCQ);
5114		return check_condition_result;
5115	}
5116	/* Not changing store, so only need read access */
5117	sdeb_data_read_lock(sip);
5118
5119	ret = do_dout_fetch(scp, a_num, arr);
5120	if (ret == -1) {
5121		ret = DID_ERROR << 16;
5122		goto cleanup;
5123	} else if (sdebug_verbose && (ret < (a_num * lb_size))) {
5124		sdev_printk(KERN_INFO, scp->device,
5125			    "%s: %s: cdb indicated=%u, IO sent=%d bytes\n",
5126			    my_name, __func__, a_num * lb_size, ret);
5127	}
5128	if (is_bytchk3) {
5129		for (j = 1, off = lb_size; j < vnum; ++j, off += lb_size)
5130			memcpy(arr + off, arr, lb_size);
5131	}
5132	ret = 0;
5133	if (!comp_write_worker(sip, lba, vnum, arr, true)) {
5134		mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
5135		ret = check_condition_result;
5136		goto cleanup;
5137	}
5138cleanup:
5139	sdeb_data_read_unlock(sip);
5140	kfree(arr);
5141	return ret;
5142}
5143
5144#define RZONES_DESC_HD 64
5145
5146/* Report zones depending on start LBA and reporting options */
5147static int resp_report_zones(struct scsi_cmnd *scp,
5148			     struct sdebug_dev_info *devip)
5149{
5150	unsigned int rep_max_zones, nrz = 0;
5151	int ret = 0;
5152	u32 alloc_len, rep_opts, rep_len;
5153	bool partial;
5154	u64 lba, zs_lba;
5155	u8 *arr = NULL, *desc;
5156	u8 *cmd = scp->cmnd;
5157	struct sdeb_zone_state *zsp = NULL;
5158	struct sdeb_store_info *sip = devip2sip(devip, false);
5159
5160	if (!sdebug_dev_is_zoned(devip)) {
5161		mk_sense_invalid_opcode(scp);
5162		return check_condition_result;
5163	}
5164	zs_lba = get_unaligned_be64(cmd + 2);
5165	alloc_len = get_unaligned_be32(cmd + 10);
5166	if (alloc_len == 0)
5167		return 0;	/* not an error */
5168	rep_opts = cmd[14] & 0x3f;
5169	partial = cmd[14] & 0x80;
5170
5171	if (zs_lba >= sdebug_capacity) {
5172		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5173		return check_condition_result;
5174	}
5175
5176	rep_max_zones = (alloc_len - 64) >> ilog2(RZONES_DESC_HD);
5177
5178	arr = kzalloc(alloc_len, GFP_ATOMIC | __GFP_NOWARN);
5179	if (!arr) {
 
5180		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
5181				INSUFF_RES_ASCQ);
5182		return check_condition_result;
5183	}
5184
5185	sdeb_meta_read_lock(sip);
5186
5187	desc = arr + 64;
5188	for (lba = zs_lba; lba < sdebug_capacity;
5189	     lba = zsp->z_start + zsp->z_size) {
5190		if (WARN_ONCE(zbc_zone(devip, lba) == zsp, "lba = %llu\n", lba))
5191			break;
5192		zsp = zbc_zone(devip, lba);
5193		switch (rep_opts) {
5194		case 0x00:
5195			/* All zones */
5196			break;
5197		case 0x01:
5198			/* Empty zones */
5199			if (zsp->z_cond != ZC1_EMPTY)
5200				continue;
5201			break;
5202		case 0x02:
5203			/* Implicit open zones */
5204			if (zsp->z_cond != ZC2_IMPLICIT_OPEN)
5205				continue;
5206			break;
5207		case 0x03:
5208			/* Explicit open zones */
5209			if (zsp->z_cond != ZC3_EXPLICIT_OPEN)
5210				continue;
5211			break;
5212		case 0x04:
5213			/* Closed zones */
5214			if (zsp->z_cond != ZC4_CLOSED)
5215				continue;
5216			break;
5217		case 0x05:
5218			/* Full zones */
5219			if (zsp->z_cond != ZC5_FULL)
5220				continue;
5221			break;
5222		case 0x06:
5223		case 0x07:
5224		case 0x10:
5225			/*
5226			 * Read-only, offline, reset WP recommended are
5227			 * not emulated: no zones to report;
5228			 */
5229			continue;
5230		case 0x11:
5231			/* non-seq-resource set */
5232			if (!zsp->z_non_seq_resource)
5233				continue;
5234			break;
5235		case 0x3e:
5236			/* All zones except gap zones. */
5237			if (zbc_zone_is_gap(zsp))
5238				continue;
5239			break;
5240		case 0x3f:
5241			/* Not write pointer (conventional) zones */
5242			if (zbc_zone_is_seq(zsp))
5243				continue;
5244			break;
5245		default:
5246			mk_sense_buffer(scp, ILLEGAL_REQUEST,
5247					INVALID_FIELD_IN_CDB, 0);
5248			ret = check_condition_result;
5249			goto fini;
5250		}
5251
5252		if (nrz < rep_max_zones) {
5253			/* Fill zone descriptor */
5254			desc[0] = zsp->z_type;
5255			desc[1] = zsp->z_cond << 4;
5256			if (zsp->z_non_seq_resource)
5257				desc[1] |= 1 << 1;
5258			put_unaligned_be64((u64)zsp->z_size, desc + 8);
5259			put_unaligned_be64((u64)zsp->z_start, desc + 16);
5260			put_unaligned_be64((u64)zsp->z_wp, desc + 24);
5261			desc += 64;
5262		}
5263
5264		if (partial && nrz >= rep_max_zones)
5265			break;
5266
5267		nrz++;
5268	}
5269
5270	/* Report header */
5271	/* Zone list length. */
5272	put_unaligned_be32(nrz * RZONES_DESC_HD, arr + 0);
5273	/* Maximum LBA */
5274	put_unaligned_be64(sdebug_capacity - 1, arr + 8);
5275	/* Zone starting LBA granularity. */
5276	if (devip->zcap < devip->zsize)
5277		put_unaligned_be64(devip->zsize, arr + 16);
5278
5279	rep_len = (unsigned long)desc - (unsigned long)arr;
5280	ret = fill_from_dev_buffer(scp, arr, min_t(u32, alloc_len, rep_len));
5281
5282fini:
5283	sdeb_meta_read_unlock(sip);
5284	kfree(arr);
5285	return ret;
5286}
5287
5288static int resp_atomic_write(struct scsi_cmnd *scp,
5289			     struct sdebug_dev_info *devip)
5290{
5291	struct sdeb_store_info *sip;
5292	u8 *cmd = scp->cmnd;
5293	u16 boundary, len;
5294	u64 lba, lba_tmp;
5295	int ret;
5296
5297	if (!scsi_debug_atomic_write()) {
5298		mk_sense_invalid_opcode(scp);
5299		return check_condition_result;
5300	}
5301
5302	sip = devip2sip(devip, true);
5303
5304	lba = get_unaligned_be64(cmd + 2);
5305	boundary = get_unaligned_be16(cmd + 10);
5306	len = get_unaligned_be16(cmd + 12);
5307
5308	lba_tmp = lba;
5309	if (sdebug_atomic_wr_align &&
5310	    do_div(lba_tmp, sdebug_atomic_wr_align)) {
5311		/* Does not meet alignment requirement */
5312		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5313		return check_condition_result;
5314	}
5315
5316	if (sdebug_atomic_wr_gran && len % sdebug_atomic_wr_gran) {
5317		/* Does not meet alignment requirement */
5318		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5319		return check_condition_result;
5320	}
5321
5322	if (boundary > 0) {
5323		if (boundary > sdebug_atomic_wr_max_bndry) {
5324			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 12, -1);
5325			return check_condition_result;
5326		}
 
 
 
5327
5328		if (len > sdebug_atomic_wr_max_length_bndry) {
5329			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 12, -1);
5330			return check_condition_result;
5331		}
5332	} else {
5333		if (len > sdebug_atomic_wr_max_length) {
5334			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 12, -1);
5335			return check_condition_result;
5336		}
5337	}
 
 
5338
5339	ret = do_device_access(sip, scp, 0, lba, len, 0, true, true);
5340	if (unlikely(ret == -1))
5341		return DID_ERROR << 16;
5342	if (unlikely(ret != len * sdebug_sector_size))
5343		return DID_ERROR << 16;
5344	return 0;
5345}
5346
5347/* Logic transplanted from tcmu-runner, file_zbc.c */
5348static void zbc_open_all(struct sdebug_dev_info *devip)
5349{
5350	struct sdeb_zone_state *zsp = &devip->zstate[0];
5351	unsigned int i;
5352
5353	for (i = 0; i < devip->nr_zones; i++, zsp++) {
5354		if (zsp->z_cond == ZC4_CLOSED)
5355			zbc_open_zone(devip, &devip->zstate[i], true);
5356	}
5357}
5358
5359static int resp_open_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
5360{
5361	int res = 0;
5362	u64 z_id;
5363	enum sdebug_z_cond zc;
5364	u8 *cmd = scp->cmnd;
5365	struct sdeb_zone_state *zsp;
5366	bool all = cmd[14] & 0x01;
5367	struct sdeb_store_info *sip = devip2sip(devip, false);
5368
5369	if (!sdebug_dev_is_zoned(devip)) {
5370		mk_sense_invalid_opcode(scp);
5371		return check_condition_result;
5372	}
5373	sdeb_meta_write_lock(sip);
5374
5375	if (all) {
5376		/* Check if all closed zones can be open */
5377		if (devip->max_open &&
5378		    devip->nr_exp_open + devip->nr_closed > devip->max_open) {
5379			mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
5380					INSUFF_ZONE_ASCQ);
5381			res = check_condition_result;
5382			goto fini;
5383		}
5384		/* Open all closed zones */
5385		zbc_open_all(devip);
5386		goto fini;
5387	}
5388
5389	/* Open the specified zone */
5390	z_id = get_unaligned_be64(cmd + 2);
5391	if (z_id >= sdebug_capacity) {
5392		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5393		res = check_condition_result;
5394		goto fini;
5395	}
5396
5397	zsp = zbc_zone(devip, z_id);
5398	if (z_id != zsp->z_start) {
5399		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5400		res = check_condition_result;
5401		goto fini;
5402	}
5403	if (zbc_zone_is_conv(zsp)) {
5404		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5405		res = check_condition_result;
5406		goto fini;
5407	}
5408
5409	zc = zsp->z_cond;
5410	if (zc == ZC3_EXPLICIT_OPEN || zc == ZC5_FULL)
5411		goto fini;
5412
5413	if (devip->max_open && devip->nr_exp_open >= devip->max_open) {
5414		mk_sense_buffer(scp, DATA_PROTECT, INSUFF_RES_ASC,
5415				INSUFF_ZONE_ASCQ);
5416		res = check_condition_result;
5417		goto fini;
5418	}
5419
5420	zbc_open_zone(devip, zsp, true);
5421fini:
5422	sdeb_meta_write_unlock(sip);
5423	return res;
5424}
5425
5426static void zbc_close_all(struct sdebug_dev_info *devip)
5427{
5428	unsigned int i;
5429
5430	for (i = 0; i < devip->nr_zones; i++)
5431		zbc_close_zone(devip, &devip->zstate[i]);
5432}
5433
5434static int resp_close_zone(struct scsi_cmnd *scp,
5435			   struct sdebug_dev_info *devip)
5436{
5437	int res = 0;
5438	u64 z_id;
5439	u8 *cmd = scp->cmnd;
5440	struct sdeb_zone_state *zsp;
5441	bool all = cmd[14] & 0x01;
5442	struct sdeb_store_info *sip = devip2sip(devip, false);
5443
5444	if (!sdebug_dev_is_zoned(devip)) {
5445		mk_sense_invalid_opcode(scp);
5446		return check_condition_result;
5447	}
5448
5449	sdeb_meta_write_lock(sip);
5450
5451	if (all) {
5452		zbc_close_all(devip);
5453		goto fini;
5454	}
5455
5456	/* Close specified zone */
5457	z_id = get_unaligned_be64(cmd + 2);
5458	if (z_id >= sdebug_capacity) {
5459		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5460		res = check_condition_result;
5461		goto fini;
5462	}
5463
5464	zsp = zbc_zone(devip, z_id);
5465	if (z_id != zsp->z_start) {
5466		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5467		res = check_condition_result;
5468		goto fini;
5469	}
5470	if (zbc_zone_is_conv(zsp)) {
5471		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5472		res = check_condition_result;
5473		goto fini;
5474	}
5475
5476	zbc_close_zone(devip, zsp);
5477fini:
5478	sdeb_meta_write_unlock(sip);
5479	return res;
5480}
5481
5482static void zbc_finish_zone(struct sdebug_dev_info *devip,
5483			    struct sdeb_zone_state *zsp, bool empty)
5484{
5485	enum sdebug_z_cond zc = zsp->z_cond;
5486
5487	if (zc == ZC4_CLOSED || zc == ZC2_IMPLICIT_OPEN ||
5488	    zc == ZC3_EXPLICIT_OPEN || (empty && zc == ZC1_EMPTY)) {
5489		if (zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN)
5490			zbc_close_zone(devip, zsp);
5491		if (zsp->z_cond == ZC4_CLOSED)
5492			devip->nr_closed--;
5493		zsp->z_wp = zsp->z_start + zsp->z_size;
5494		zsp->z_cond = ZC5_FULL;
5495	}
5496}
5497
5498static void zbc_finish_all(struct sdebug_dev_info *devip)
5499{
5500	unsigned int i;
5501
5502	for (i = 0; i < devip->nr_zones; i++)
5503		zbc_finish_zone(devip, &devip->zstate[i], false);
5504}
5505
5506static int resp_finish_zone(struct scsi_cmnd *scp,
5507			    struct sdebug_dev_info *devip)
5508{
5509	struct sdeb_zone_state *zsp;
5510	int res = 0;
5511	u64 z_id;
5512	u8 *cmd = scp->cmnd;
5513	bool all = cmd[14] & 0x01;
5514	struct sdeb_store_info *sip = devip2sip(devip, false);
 
5515
5516	if (!sdebug_dev_is_zoned(devip)) {
5517		mk_sense_invalid_opcode(scp);
 
5518		return check_condition_result;
5519	}
5520
5521	sdeb_meta_write_lock(sip);
5522
5523	if (all) {
5524		zbc_finish_all(devip);
5525		goto fini;
5526	}
5527
5528	/* Finish the specified zone */
5529	z_id = get_unaligned_be64(cmd + 2);
5530	if (z_id >= sdebug_capacity) {
5531		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5532		res = check_condition_result;
5533		goto fini;
5534	}
5535
5536	zsp = zbc_zone(devip, z_id);
5537	if (z_id != zsp->z_start) {
5538		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5539		res = check_condition_result;
5540		goto fini;
5541	}
5542	if (zbc_zone_is_conv(zsp)) {
5543		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5544		res = check_condition_result;
5545		goto fini;
5546	}
5547
5548	zbc_finish_zone(devip, zsp, true);
5549fini:
5550	sdeb_meta_write_unlock(sip);
5551	return res;
5552}
5553
5554static void zbc_rwp_zone(struct sdebug_dev_info *devip,
5555			 struct sdeb_zone_state *zsp)
5556{
5557	enum sdebug_z_cond zc;
5558	struct sdeb_store_info *sip = devip2sip(devip, false);
5559
5560	if (!zbc_zone_is_seq(zsp))
5561		return;
5562
5563	zc = zsp->z_cond;
5564	if (zc == ZC2_IMPLICIT_OPEN || zc == ZC3_EXPLICIT_OPEN)
5565		zbc_close_zone(devip, zsp);
5566
5567	if (zsp->z_cond == ZC4_CLOSED)
5568		devip->nr_closed--;
5569
5570	if (zsp->z_wp > zsp->z_start)
5571		memset(sip->storep + zsp->z_start * sdebug_sector_size, 0,
5572		       (zsp->z_wp - zsp->z_start) * sdebug_sector_size);
5573
5574	zsp->z_non_seq_resource = false;
5575	zsp->z_wp = zsp->z_start;
5576	zsp->z_cond = ZC1_EMPTY;
5577}
5578
5579static void zbc_rwp_all(struct sdebug_dev_info *devip)
5580{
5581	unsigned int i;
5582
5583	for (i = 0; i < devip->nr_zones; i++)
5584		zbc_rwp_zone(devip, &devip->zstate[i]);
5585}
5586
5587static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
5588{
5589	struct sdeb_zone_state *zsp;
5590	int res = 0;
5591	u64 z_id;
5592	u8 *cmd = scp->cmnd;
5593	bool all = cmd[14] & 0x01;
5594	struct sdeb_store_info *sip = devip2sip(devip, false);
5595
5596	if (!sdebug_dev_is_zoned(devip)) {
5597		mk_sense_invalid_opcode(scp);
5598		return check_condition_result;
5599	}
5600
5601	sdeb_meta_write_lock(sip);
5602
5603	if (all) {
5604		zbc_rwp_all(devip);
5605		goto fini;
5606	}
5607
5608	z_id = get_unaligned_be64(cmd + 2);
5609	if (z_id >= sdebug_capacity) {
5610		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
5611		res = check_condition_result;
5612		goto fini;
5613	}
5614
5615	zsp = zbc_zone(devip, z_id);
5616	if (z_id != zsp->z_start) {
5617		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5618		res = check_condition_result;
5619		goto fini;
5620	}
5621	if (zbc_zone_is_conv(zsp)) {
5622		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
5623		res = check_condition_result;
5624		goto fini;
5625	}
5626
5627	zbc_rwp_zone(devip, zsp);
5628fini:
5629	sdeb_meta_write_unlock(sip);
5630	return res;
5631}
5632
5633static u32 get_tag(struct scsi_cmnd *cmnd)
5634{
5635	return blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
5636}
5637
5638/* Queued (deferred) command completions converge here. */
5639static void sdebug_q_cmd_complete(struct sdebug_defer *sd_dp)
5640{
5641	struct sdebug_queued_cmd *sqcp = container_of(sd_dp, struct sdebug_queued_cmd, sd_dp);
5642	unsigned long flags;
5643	struct scsi_cmnd *scp = sqcp->scmd;
5644	struct sdebug_scsi_cmd *sdsc;
5645	bool aborted;
 
 
5646
 
 
5647	if (sdebug_statistics) {
5648		atomic_inc(&sdebug_completions);
5649		if (raw_smp_processor_id() != sd_dp->issuing_cpu)
5650			atomic_inc(&sdebug_miss_cpus);
5651	}
5652
5653	if (!scp) {
5654		pr_err("scmd=NULL\n");
5655		goto out;
5656	}
5657
5658	sdsc = scsi_cmd_priv(scp);
5659	spin_lock_irqsave(&sdsc->lock, flags);
5660	aborted = sd_dp->aborted;
5661	if (unlikely(aborted))
5662		sd_dp->aborted = false;
5663	ASSIGN_QUEUED_CMD(scp, NULL);
5664
5665	spin_unlock_irqrestore(&sdsc->lock, flags);
5666
5667	if (aborted) {
5668		pr_info("bypassing scsi_done() due to aborted cmd, kicking-off EH\n");
5669		blk_abort_request(scsi_cmd_to_rq(scp));
5670		goto out;
 
 
 
 
 
 
 
 
5671	}
5672
5673	scsi_done(scp); /* callback to mid level */
5674out:
5675	sdebug_free_queued_cmd(sqcp);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5676}
5677
5678/* When high resolution timer goes off this function is called. */
5679static enum hrtimer_restart sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
5680{
5681	struct sdebug_defer *sd_dp = container_of(timer, struct sdebug_defer,
5682						  hrt);
5683	sdebug_q_cmd_complete(sd_dp);
5684	return HRTIMER_NORESTART;
5685}
5686
5687/* When work queue schedules work, it calls this function. */
5688static void sdebug_q_cmd_wq_complete(struct work_struct *work)
5689{
5690	struct sdebug_defer *sd_dp = container_of(work, struct sdebug_defer,
5691						  ew.work);
5692	sdebug_q_cmd_complete(sd_dp);
5693}
5694
5695static bool got_shared_uuid;
5696static uuid_t shared_uuid;
5697
5698static int sdebug_device_create_zones(struct sdebug_dev_info *devip)
5699{
5700	struct sdeb_zone_state *zsp;
5701	sector_t capacity = get_sdebug_capacity();
5702	sector_t conv_capacity;
5703	sector_t zstart = 0;
5704	unsigned int i;
5705
5706	/*
5707	 * Set the zone size: if sdeb_zbc_zone_size_mb is not set, figure out
5708	 * a zone size allowing for at least 4 zones on the device. Otherwise,
5709	 * use the specified zone size checking that at least 2 zones can be
5710	 * created for the device.
5711	 */
5712	if (!sdeb_zbc_zone_size_mb) {
5713		devip->zsize = (DEF_ZBC_ZONE_SIZE_MB * SZ_1M)
5714			>> ilog2(sdebug_sector_size);
5715		while (capacity < devip->zsize << 2 && devip->zsize >= 2)
5716			devip->zsize >>= 1;
5717		if (devip->zsize < 2) {
5718			pr_err("Device capacity too small\n");
5719			return -EINVAL;
5720		}
5721	} else {
5722		if (!is_power_of_2(sdeb_zbc_zone_size_mb)) {
5723			pr_err("Zone size is not a power of 2\n");
5724			return -EINVAL;
5725		}
5726		devip->zsize = (sdeb_zbc_zone_size_mb * SZ_1M)
5727			>> ilog2(sdebug_sector_size);
5728		if (devip->zsize >= capacity) {
5729			pr_err("Zone size too large for device capacity\n");
5730			return -EINVAL;
5731		}
5732	}
5733
5734	devip->zsize_shift = ilog2(devip->zsize);
5735	devip->nr_zones = (capacity + devip->zsize - 1) >> devip->zsize_shift;
5736
5737	if (sdeb_zbc_zone_cap_mb == 0) {
5738		devip->zcap = devip->zsize;
5739	} else {
5740		devip->zcap = (sdeb_zbc_zone_cap_mb * SZ_1M) >>
5741			      ilog2(sdebug_sector_size);
5742		if (devip->zcap > devip->zsize) {
5743			pr_err("Zone capacity too large\n");
5744			return -EINVAL;
5745		}
5746	}
5747
5748	conv_capacity = (sector_t)sdeb_zbc_nr_conv << devip->zsize_shift;
5749	if (conv_capacity >= capacity) {
5750		pr_err("Number of conventional zones too large\n");
5751		return -EINVAL;
5752	}
5753	devip->nr_conv_zones = sdeb_zbc_nr_conv;
5754	devip->nr_seq_zones = ALIGN(capacity - conv_capacity, devip->zsize) >>
5755			      devip->zsize_shift;
5756	devip->nr_zones = devip->nr_conv_zones + devip->nr_seq_zones;
5757
5758	/* Add gap zones if zone capacity is smaller than the zone size */
5759	if (devip->zcap < devip->zsize)
5760		devip->nr_zones += devip->nr_seq_zones;
5761
5762	if (devip->zoned) {
5763		/* zbc_max_open_zones can be 0, meaning "not reported" */
5764		if (sdeb_zbc_max_open >= devip->nr_zones - 1)
5765			devip->max_open = (devip->nr_zones - 1) / 2;
5766		else
5767			devip->max_open = sdeb_zbc_max_open;
5768	}
5769
5770	devip->zstate = kcalloc(devip->nr_zones,
5771				sizeof(struct sdeb_zone_state), GFP_KERNEL);
5772	if (!devip->zstate)
5773		return -ENOMEM;
5774
5775	for (i = 0; i < devip->nr_zones; i++) {
5776		zsp = &devip->zstate[i];
5777
5778		zsp->z_start = zstart;
5779
5780		if (i < devip->nr_conv_zones) {
5781			zsp->z_type = ZBC_ZTYPE_CNV;
5782			zsp->z_cond = ZBC_NOT_WRITE_POINTER;
5783			zsp->z_wp = (sector_t)-1;
5784			zsp->z_size =
5785				min_t(u64, devip->zsize, capacity - zstart);
5786		} else if ((zstart & (devip->zsize - 1)) == 0) {
5787			if (devip->zoned)
5788				zsp->z_type = ZBC_ZTYPE_SWR;
5789			else
5790				zsp->z_type = ZBC_ZTYPE_SWP;
5791			zsp->z_cond = ZC1_EMPTY;
5792			zsp->z_wp = zsp->z_start;
5793			zsp->z_size =
5794				min_t(u64, devip->zcap, capacity - zstart);
5795		} else {
5796			zsp->z_type = ZBC_ZTYPE_GAP;
5797			zsp->z_cond = ZBC_NOT_WRITE_POINTER;
5798			zsp->z_wp = (sector_t)-1;
5799			zsp->z_size = min_t(u64, devip->zsize - devip->zcap,
5800					    capacity - zstart);
5801		}
5802
5803		WARN_ON_ONCE((int)zsp->z_size <= 0);
5804		zstart += zsp->z_size;
5805	}
5806
5807	return 0;
5808}
5809
5810static struct sdebug_dev_info *sdebug_device_create(
5811			struct sdebug_host_info *sdbg_host, gfp_t flags)
5812{
5813	struct sdebug_dev_info *devip;
5814
5815	devip = kzalloc(sizeof(*devip), flags);
5816	if (devip) {
5817		if (sdebug_uuid_ctl == 1)
5818			uuid_gen(&devip->lu_name);
5819		else if (sdebug_uuid_ctl == 2) {
5820			if (got_shared_uuid)
5821				devip->lu_name = shared_uuid;
5822			else {
5823				uuid_gen(&shared_uuid);
5824				got_shared_uuid = true;
5825				devip->lu_name = shared_uuid;
5826			}
5827		}
5828		devip->sdbg_host = sdbg_host;
5829		if (sdeb_zbc_in_use) {
5830			devip->zoned = sdeb_zbc_model == BLK_ZONED_HM;
5831			if (sdebug_device_create_zones(devip)) {
5832				kfree(devip);
5833				return NULL;
5834			}
5835		} else {
5836			devip->zoned = false;
5837		}
5838		devip->create_ts = ktime_get_boottime();
5839		atomic_set(&devip->stopped, (sdeb_tur_ms_to_ready > 0 ? 2 : 0));
5840		spin_lock_init(&devip->list_lock);
5841		INIT_LIST_HEAD(&devip->inject_err_list);
5842		list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
5843	}
5844	return devip;
5845}
5846
5847static struct sdebug_dev_info *find_build_dev_info(struct scsi_device *sdev)
5848{
5849	struct sdebug_host_info *sdbg_host;
5850	struct sdebug_dev_info *open_devip = NULL;
5851	struct sdebug_dev_info *devip;
5852
5853	sdbg_host = shost_to_sdebug_host(sdev->host);
5854
 
 
 
5855	list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
5856		if ((devip->used) && (devip->channel == sdev->channel) &&
5857		    (devip->target == sdev->id) &&
5858		    (devip->lun == sdev->lun))
5859			return devip;
5860		else {
5861			if ((!devip->used) && (!open_devip))
5862				open_devip = devip;
5863		}
5864	}
5865	if (!open_devip) { /* try and make a new one */
5866		open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
5867		if (!open_devip) {
5868			pr_err("out of memory at line %d\n", __LINE__);
5869			return NULL;
5870		}
5871	}
5872
5873	open_devip->channel = sdev->channel;
5874	open_devip->target = sdev->id;
5875	open_devip->lun = sdev->lun;
5876	open_devip->sdbg_host = sdbg_host;
5877	set_bit(SDEBUG_UA_POOCCUR, open_devip->uas_bm);
 
5878	open_devip->used = true;
5879	return open_devip;
5880}
5881
5882static int scsi_debug_slave_alloc(struct scsi_device *sdp)
5883{
5884	if (sdebug_verbose)
5885		pr_info("slave_alloc <%u %u %u %llu>\n",
5886		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5887
5888	return 0;
5889}
5890
5891static int scsi_debug_slave_configure(struct scsi_device *sdp)
5892{
5893	struct sdebug_dev_info *devip =
5894			(struct sdebug_dev_info *)sdp->hostdata;
5895	struct dentry *dentry;
5896
5897	if (sdebug_verbose)
5898		pr_info("slave_configure <%u %u %u %llu>\n",
5899		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5900	if (sdp->host->max_cmd_len != SDEBUG_MAX_CMD_LEN)
5901		sdp->host->max_cmd_len = SDEBUG_MAX_CMD_LEN;
5902	if (devip == NULL) {
5903		devip = find_build_dev_info(sdp);
5904		if (devip == NULL)
5905			return 1;  /* no resources, will be marked offline */
5906	}
5907	sdp->hostdata = devip;
 
5908	if (sdebug_no_uld)
5909		sdp->no_uld_attach = 1;
5910	config_cdb_len(sdp);
5911
5912	if (sdebug_allow_restart)
5913		sdp->allow_restart = 1;
5914
5915	devip->debugfs_entry = debugfs_create_dir(dev_name(&sdp->sdev_dev),
5916				sdebug_debugfs_root);
5917	if (IS_ERR_OR_NULL(devip->debugfs_entry))
5918		pr_info("%s: failed to create debugfs directory for device %s\n",
5919			__func__, dev_name(&sdp->sdev_gendev));
5920
5921	dentry = debugfs_create_file("error", 0600, devip->debugfs_entry, sdp,
5922				&sdebug_error_fops);
5923	if (IS_ERR_OR_NULL(dentry))
5924		pr_info("%s: failed to create error file for device %s\n",
5925			__func__, dev_name(&sdp->sdev_gendev));
5926
5927	return 0;
5928}
5929
5930static void scsi_debug_slave_destroy(struct scsi_device *sdp)
5931{
5932	struct sdebug_dev_info *devip =
5933		(struct sdebug_dev_info *)sdp->hostdata;
5934	struct sdebug_err_inject *err;
5935
5936	if (sdebug_verbose)
5937		pr_info("slave_destroy <%u %u %u %llu>\n",
5938		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
5939
5940	if (!devip)
5941		return;
5942
5943	spin_lock(&devip->list_lock);
5944	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
5945		list_del_rcu(&err->list);
5946		call_rcu(&err->rcu, sdebug_err_free);
5947	}
5948	spin_unlock(&devip->list_lock);
5949
5950	debugfs_remove(devip->debugfs_entry);
5951
5952	/* make this slot available for re-use */
5953	devip->used = false;
5954	sdp->hostdata = NULL;
5955}
5956
5957/* Returns true if we require the queued memory to be freed by the caller. */
5958static bool stop_qc_helper(struct sdebug_defer *sd_dp,
5959			   enum sdeb_defer_type defer_t)
5960{
5961	if (defer_t == SDEB_DEFER_HRT) {
5962		int res = hrtimer_try_to_cancel(&sd_dp->hrt);
5963
5964		switch (res) {
5965		case 0: /* Not active, it must have already run */
5966		case -1: /* -1 It's executing the CB */
5967			return false;
5968		case 1: /* Was active, we've now cancelled */
5969		default:
5970			return true;
5971		}
5972	} else if (defer_t == SDEB_DEFER_WQ) {
5973		/* Cancel if pending */
5974		if (cancel_work_sync(&sd_dp->ew.work))
5975			return true;
5976		/* Was not pending, so it must have run */
5977		return false;
5978	} else if (defer_t == SDEB_DEFER_POLL) {
5979		return true;
5980	}
5981
5982	return false;
5983}
5984
5985
5986static bool scsi_debug_stop_cmnd(struct scsi_cmnd *cmnd)
 
5987{
5988	enum sdeb_defer_type l_defer_t;
 
 
 
 
5989	struct sdebug_defer *sd_dp;
5990	struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmnd);
5991	struct sdebug_queued_cmd *sqcp = TO_QUEUED_CMD(cmnd);
5992
5993	lockdep_assert_held(&sdsc->lock);
5994
5995	if (!sqcp)
5996		return false;
5997	sd_dp = &sqcp->sd_dp;
5998	l_defer_t = READ_ONCE(sd_dp->defer_t);
5999	ASSIGN_QUEUED_CMD(cmnd, NULL);
6000
6001	if (stop_qc_helper(sd_dp, l_defer_t))
6002		sdebug_free_queued_cmd(sqcp);
6003
6004	return true;
6005}
6006
6007/*
6008 * Called from scsi_debug_abort() only, which is for timed-out cmd.
6009 */
6010static bool scsi_debug_abort_cmnd(struct scsi_cmnd *cmnd)
6011{
6012	struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmnd);
6013	unsigned long flags;
6014	bool res;
6015
6016	spin_lock_irqsave(&sdsc->lock, flags);
6017	res = scsi_debug_stop_cmnd(cmnd);
6018	spin_unlock_irqrestore(&sdsc->lock, flags);
6019
6020	return res;
6021}
6022
6023/*
6024 * All we can do is set the cmnd as internally aborted and wait for it to
6025 * finish. We cannot call scsi_done() as normal completion path may do that.
6026 */
6027static bool sdebug_stop_cmnd(struct request *rq, void *data)
6028{
6029	scsi_debug_abort_cmnd(blk_mq_rq_to_pdu(rq));
6030
6031	return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6032}
6033
6034/* Deletes (stops) timers or work queues of all queued commands */
6035static void stop_all_queued(void)
6036{
6037	struct sdebug_host_info *sdhp;
6038
6039	mutex_lock(&sdebug_host_list_mutex);
6040	list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6041		struct Scsi_Host *shost = sdhp->shost;
 
6042
6043		blk_mq_tagset_busy_iter(&shost->tag_set, sdebug_stop_cmnd, NULL);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6044	}
6045	mutex_unlock(&sdebug_host_list_mutex);
6046}
6047
6048static int sdebug_fail_abort(struct scsi_cmnd *cmnd)
 
6049{
6050	struct scsi_device *sdp = cmnd->device;
6051	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
6052	struct sdebug_err_inject *err;
6053	unsigned char *cmd = cmnd->cmnd;
6054	int ret = 0;
6055
6056	if (devip == NULL)
6057		return 0;
6058
6059	rcu_read_lock();
6060	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
6061		if (err->type == ERR_ABORT_CMD_FAILED &&
6062		    (err->cmd == cmd[0] || err->cmd == 0xff)) {
6063			ret = !!err->cnt;
6064			if (err->cnt < 0)
6065				err->cnt++;
6066
6067			rcu_read_unlock();
6068			return ret;
 
 
 
6069		}
6070	}
6071	rcu_read_unlock();
6072
6073	return 0;
6074}
6075
6076static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
6077{
6078	bool ok = scsi_debug_abort_cmnd(SCpnt);
6079	u8 *cmd = SCpnt->cmnd;
6080	u8 opcode = cmd[0];
6081
6082	++num_aborts;
6083
6084	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
6085		sdev_printk(KERN_INFO, SCpnt->device,
6086			    "%s: command%s found\n", __func__,
6087			    ok ? "" : " not");
6088
6089	if (sdebug_fail_abort(SCpnt)) {
6090		scmd_printk(KERN_INFO, SCpnt, "fail abort command 0x%x\n",
6091			    opcode);
6092		return FAILED;
6093	}
6094
6095	return SUCCESS;
6096}
6097
6098static bool scsi_debug_stop_all_queued_iter(struct request *rq, void *data)
6099{
6100	struct scsi_device *sdp = data;
6101	struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq);
6102
6103	if (scmd->device == sdp)
6104		scsi_debug_abort_cmnd(scmd);
6105
6106	return true;
6107}
6108
6109/* Deletes (stops) timers or work queues of all queued commands per sdev */
6110static void scsi_debug_stop_all_queued(struct scsi_device *sdp)
6111{
6112	struct Scsi_Host *shost = sdp->host;
6113
6114	blk_mq_tagset_busy_iter(&shost->tag_set,
6115				scsi_debug_stop_all_queued_iter, sdp);
6116}
6117
6118static int sdebug_fail_lun_reset(struct scsi_cmnd *cmnd)
6119{
6120	struct scsi_device *sdp = cmnd->device;
6121	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
6122	struct sdebug_err_inject *err;
6123	unsigned char *cmd = cmnd->cmnd;
6124	int ret = 0;
6125
6126	if (devip == NULL)
6127		return 0;
6128
6129	rcu_read_lock();
6130	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
6131		if (err->type == ERR_LUN_RESET_FAILED &&
6132		    (err->cmd == cmd[0] || err->cmd == 0xff)) {
6133			ret = !!err->cnt;
6134			if (err->cnt < 0)
6135				err->cnt++;
6136
6137			rcu_read_unlock();
6138			return ret;
6139		}
6140	}
6141	rcu_read_unlock();
6142
6143	return 0;
6144}
6145
6146static int scsi_debug_device_reset(struct scsi_cmnd *SCpnt)
6147{
6148	struct scsi_device *sdp = SCpnt->device;
6149	struct sdebug_dev_info *devip = sdp->hostdata;
6150	u8 *cmd = SCpnt->cmnd;
6151	u8 opcode = cmd[0];
6152
6153	++num_dev_resets;
6154
6155	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
6156		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
6157
6158	scsi_debug_stop_all_queued(sdp);
6159	if (devip)
6160		set_bit(SDEBUG_UA_POR, devip->uas_bm);
6161
6162	if (sdebug_fail_lun_reset(SCpnt)) {
6163		scmd_printk(KERN_INFO, SCpnt, "fail lun reset 0x%x\n", opcode);
6164		return FAILED;
6165	}
6166
6167	return SUCCESS;
6168}
6169
6170static int sdebug_fail_target_reset(struct scsi_cmnd *cmnd)
6171{
6172	struct scsi_target *starget = scsi_target(cmnd->device);
6173	struct sdebug_target_info *targetip =
6174		(struct sdebug_target_info *)starget->hostdata;
6175
6176	if (targetip)
6177		return targetip->reset_fail;
6178
6179	return 0;
6180}
6181
6182static int scsi_debug_target_reset(struct scsi_cmnd *SCpnt)
6183{
6184	struct scsi_device *sdp = SCpnt->device;
6185	struct sdebug_host_info *sdbg_host = shost_to_sdebug_host(sdp->host);
6186	struct sdebug_dev_info *devip;
6187	u8 *cmd = SCpnt->cmnd;
6188	u8 opcode = cmd[0];
6189	int k = 0;
6190
6191	++num_target_resets;
 
 
 
 
 
6192	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
6193		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
6194
6195	list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
6196		if (devip->target == sdp->id) {
6197			set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
6198			++k;
6199		}
 
 
 
 
 
 
6200	}
6201
6202	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
6203		sdev_printk(KERN_INFO, sdp,
6204			    "%s: %d device(s) found in target\n", __func__, k);
6205
6206	if (sdebug_fail_target_reset(SCpnt)) {
6207		scmd_printk(KERN_INFO, SCpnt, "fail target reset 0x%x\n",
6208			    opcode);
6209		return FAILED;
6210	}
6211
6212	return SUCCESS;
6213}
6214
6215static int scsi_debug_bus_reset(struct scsi_cmnd *SCpnt)
6216{
6217	struct scsi_device *sdp = SCpnt->device;
6218	struct sdebug_host_info *sdbg_host = shost_to_sdebug_host(sdp->host);
6219	struct sdebug_dev_info *devip;
 
 
6220	int k = 0;
6221
6222	++num_bus_resets;
6223
 
 
6224	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
6225		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
6226
6227	list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
6228		set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
6229		++k;
 
 
 
 
 
 
 
6230	}
6231
6232	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
6233		sdev_printk(KERN_INFO, sdp,
6234			    "%s: %d device(s) found in host\n", __func__, k);
 
6235	return SUCCESS;
6236}
6237
6238static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt)
6239{
6240	struct sdebug_host_info *sdbg_host;
6241	struct sdebug_dev_info *devip;
6242	int k = 0;
6243
6244	++num_host_resets;
6245	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
6246		sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
6247	mutex_lock(&sdebug_host_list_mutex);
6248	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
6249		list_for_each_entry(devip, &sdbg_host->dev_info_list,
6250				    dev_list) {
6251			set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
6252			++k;
6253		}
6254	}
6255	mutex_unlock(&sdebug_host_list_mutex);
6256	stop_all_queued();
6257	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
6258		sdev_printk(KERN_INFO, SCpnt->device,
6259			    "%s: %d device(s) found\n", __func__, k);
6260	return SUCCESS;
6261}
6262
6263static void sdebug_build_parts(unsigned char *ramp, unsigned long store_size)
 
6264{
6265	struct msdos_partition *pp;
6266	int starts[SDEBUG_MAX_PARTS + 2], max_part_secs;
6267	int sectors_per_part, num_sectors, k;
6268	int heads_by_sects, start_sec, end_sec;
6269
6270	/* assume partition table already zeroed */
6271	if ((sdebug_num_parts < 1) || (store_size < 1048576))
6272		return;
6273	if (sdebug_num_parts > SDEBUG_MAX_PARTS) {
6274		sdebug_num_parts = SDEBUG_MAX_PARTS;
6275		pr_warn("reducing partitions to %d\n", SDEBUG_MAX_PARTS);
6276	}
6277	num_sectors = (int)get_sdebug_capacity();
6278	sectors_per_part = (num_sectors - sdebug_sectors_per)
6279			   / sdebug_num_parts;
6280	heads_by_sects = sdebug_heads * sdebug_sectors_per;
6281	starts[0] = sdebug_sectors_per;
6282	max_part_secs = sectors_per_part;
6283	for (k = 1; k < sdebug_num_parts; ++k) {
6284		starts[k] = ((k * sectors_per_part) / heads_by_sects)
6285			    * heads_by_sects;
6286		if (starts[k] - starts[k - 1] < max_part_secs)
6287			max_part_secs = starts[k] - starts[k - 1];
6288	}
6289	starts[sdebug_num_parts] = num_sectors;
6290	starts[sdebug_num_parts + 1] = 0;
6291
6292	ramp[510] = 0x55;	/* magic partition markings */
6293	ramp[511] = 0xAA;
6294	pp = (struct msdos_partition *)(ramp + 0x1be);
6295	for (k = 0; starts[k + 1]; ++k, ++pp) {
6296		start_sec = starts[k];
6297		end_sec = starts[k] + max_part_secs - 1;
6298		pp->boot_ind = 0;
6299
6300		pp->cyl = start_sec / heads_by_sects;
6301		pp->head = (start_sec - (pp->cyl * heads_by_sects))
6302			   / sdebug_sectors_per;
6303		pp->sector = (start_sec % sdebug_sectors_per) + 1;
6304
6305		pp->end_cyl = end_sec / heads_by_sects;
6306		pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
6307			       / sdebug_sectors_per;
6308		pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
6309
6310		pp->start_sect = cpu_to_le32(start_sec);
6311		pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
6312		pp->sys_ind = 0x83;	/* plain Linux partition */
6313	}
6314}
6315
6316static void block_unblock_all_queues(bool block)
6317{
6318	struct sdebug_host_info *sdhp;
6319
6320	lockdep_assert_held(&sdebug_host_list_mutex);
6321
6322	list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6323		struct Scsi_Host *shost = sdhp->shost;
6324
6325		if (block)
6326			scsi_block_requests(shost);
6327		else
6328			scsi_unblock_requests(shost);
6329	}
6330}
6331
6332/* Adjust (by rounding down) the sdebug_cmnd_count so abs(every_nth)-1
6333 * commands will be processed normally before triggers occur.
6334 */
6335static void tweak_cmnd_count(void)
6336{
6337	int count, modulo;
6338
6339	modulo = abs(sdebug_every_nth);
6340	if (modulo < 2)
6341		return;
6342
6343	mutex_lock(&sdebug_host_list_mutex);
6344	block_unblock_all_queues(true);
6345	count = atomic_read(&sdebug_cmnd_count);
6346	atomic_set(&sdebug_cmnd_count, (count / modulo) * modulo);
6347	block_unblock_all_queues(false);
6348	mutex_unlock(&sdebug_host_list_mutex);
6349}
6350
6351static void clear_queue_stats(void)
6352{
6353	atomic_set(&sdebug_cmnd_count, 0);
6354	atomic_set(&sdebug_completions, 0);
6355	atomic_set(&sdebug_miss_cpus, 0);
6356	atomic_set(&sdebug_a_tsf, 0);
6357}
6358
6359static bool inject_on_this_cmd(void)
 
6360{
6361	if (sdebug_every_nth == 0)
6362		return false;
6363	return (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) == 0;
6364}
6365
6366#define INCLUSIVE_TIMING_MAX_NS 1000000		/* 1 millisecond */
6367
6368
6369void sdebug_free_queued_cmd(struct sdebug_queued_cmd *sqcp)
6370{
6371	if (sqcp)
6372		kmem_cache_free(queued_cmd_cache, sqcp);
6373}
6374
6375static struct sdebug_queued_cmd *sdebug_alloc_queued_cmd(struct scsi_cmnd *scmd)
6376{
6377	struct sdebug_queued_cmd *sqcp;
6378	struct sdebug_defer *sd_dp;
6379
6380	sqcp = kmem_cache_zalloc(queued_cmd_cache, GFP_ATOMIC);
6381	if (!sqcp)
6382		return NULL;
6383
6384	sd_dp = &sqcp->sd_dp;
6385
6386	hrtimer_init(&sd_dp->hrt, CLOCK_MONOTONIC, HRTIMER_MODE_REL_PINNED);
6387	sd_dp->hrt.function = sdebug_q_cmd_hrt_complete;
6388	INIT_WORK(&sd_dp->ew.work, sdebug_q_cmd_wq_complete);
6389
6390	sqcp->scmd = scmd;
6391
6392	return sqcp;
6393}
6394
6395/* Complete the processing of the thread that queued a SCSI command to this
6396 * driver. It either completes the command by calling cmnd_done() or
6397 * schedules a hr timer or work queue then returns 0. Returns
6398 * SCSI_MLQUEUE_HOST_BUSY if temporarily out of resources.
6399 */
6400static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
6401			 int scsi_result,
6402			 int (*pfp)(struct scsi_cmnd *,
6403				    struct sdebug_dev_info *),
6404			 int delta_jiff, int ndelay)
6405{
6406	struct request *rq = scsi_cmd_to_rq(cmnd);
6407	bool polled = rq->cmd_flags & REQ_POLLED;
6408	struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmnd);
6409	unsigned long flags;
6410	u64 ns_from_boot = 0;
6411	struct sdebug_queued_cmd *sqcp;
6412	struct scsi_device *sdp;
6413	struct sdebug_defer *sd_dp;
6414
6415	if (unlikely(devip == NULL)) {
6416		if (scsi_result == 0)
6417			scsi_result = DID_NO_CONNECT << 16;
6418		goto respond_in_thread;
6419	}
6420	sdp = cmnd->device;
6421
 
 
 
6422	if (delta_jiff == 0)
6423		goto respond_in_thread;
6424
6425
6426	if (unlikely(sdebug_every_nth && (SDEBUG_OPT_RARE_TSF & sdebug_opts) &&
6427		     (scsi_result == 0))) {
6428		int num_in_q = scsi_device_busy(sdp);
6429		int qdepth = cmnd->device->queue_depth;
6430
6431		if ((num_in_q == qdepth) &&
 
 
 
 
 
 
 
 
 
 
 
 
 
6432		    (atomic_inc_return(&sdebug_a_tsf) >=
6433		     abs(sdebug_every_nth))) {
6434			atomic_set(&sdebug_a_tsf, 0);
 
6435			scsi_result = device_qfull_result;
6436
6437			if (unlikely(SDEBUG_OPT_Q_NOISE & sdebug_opts))
6438				sdev_printk(KERN_INFO, sdp, "%s: num_in_q=%d +1, <inject> status: TASK SET FULL\n",
6439					    __func__, num_in_q);
6440		}
6441	}
6442
6443	sqcp = sdebug_alloc_queued_cmd(cmnd);
6444	if (!sqcp) {
6445		pr_err("%s no alloc\n", __func__);
6446		return SCSI_MLQUEUE_HOST_BUSY;
6447	}
6448	sd_dp = &sqcp->sd_dp;
6449
6450	if (polled || (ndelay > 0 && ndelay < INCLUSIVE_TIMING_MAX_NS))
6451		ns_from_boot = ktime_get_boottime_ns();
6452
6453	/* one of the resp_*() response functions is called here */
6454	cmnd->result = pfp ? pfp(cmnd, devip) : 0;
6455	if (cmnd->result & SDEG_RES_IMMED_MASK) {
6456		cmnd->result &= ~SDEG_RES_IMMED_MASK;
6457		delta_jiff = ndelay = 0;
6458	}
6459	if (cmnd->result == 0 && scsi_result != 0)
6460		cmnd->result = scsi_result;
6461	if (cmnd->result == 0 && unlikely(sdebug_opts & SDEBUG_OPT_TRANSPORT_ERR)) {
6462		if (atomic_read(&sdeb_inject_pending)) {
6463			mk_sense_buffer(cmnd, ABORTED_COMMAND, TRANSPORT_PROBLEM, ACK_NAK_TO);
6464			atomic_set(&sdeb_inject_pending, 0);
6465			cmnd->result = check_condition_result;
6466		}
6467	}
6468
6469	if (unlikely(sdebug_verbose && cmnd->result))
6470		sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
6471			    __func__, cmnd->result);
6472
6473	if (delta_jiff > 0 || ndelay > 0) {
 
 
 
 
 
6474		ktime_t kt;
6475
6476		if (delta_jiff > 0) {
6477			u64 ns = jiffies_to_nsecs(delta_jiff);
6478
6479			if (sdebug_random && ns < U32_MAX) {
6480				ns = get_random_u32_below((u32)ns);
6481			} else if (sdebug_random) {
6482				ns >>= 12;	/* scale to 4 usec precision */
6483				if (ns < U32_MAX)	/* over 4 hours max */
6484					ns = get_random_u32_below((u32)ns);
6485				ns <<= 12;
6486			}
6487			kt = ns_to_ktime(ns);
6488		} else {	/* ndelay has a 4.2 second max */
6489			kt = sdebug_random ? get_random_u32_below((u32)ndelay) :
6490					     (u32)ndelay;
6491			if (ndelay < INCLUSIVE_TIMING_MAX_NS) {
6492				u64 d = ktime_get_boottime_ns() - ns_from_boot;
6493
6494				if (kt <= d) {	/* elapsed duration >= kt */
6495					/* call scsi_done() from this thread */
6496					sdebug_free_queued_cmd(sqcp);
6497					scsi_done(cmnd);
6498					return 0;
6499				}
6500				/* otherwise reduce kt by elapsed time */
6501				kt -= d;
6502			}
6503		}
6504		if (sdebug_statistics)
6505			sd_dp->issuing_cpu = raw_smp_processor_id();
6506		if (polled) {
6507			spin_lock_irqsave(&sdsc->lock, flags);
6508			sd_dp->cmpl_ts = ktime_add(ns_to_ktime(ns_from_boot), kt);
6509			ASSIGN_QUEUED_CMD(cmnd, sqcp);
6510			WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_POLL);
6511			spin_unlock_irqrestore(&sdsc->lock, flags);
6512		} else {
6513			/* schedule the invocation of scsi_done() for a later time */
6514			spin_lock_irqsave(&sdsc->lock, flags);
6515			ASSIGN_QUEUED_CMD(cmnd, sqcp);
6516			WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_HRT);
6517			hrtimer_start(&sd_dp->hrt, kt, HRTIMER_MODE_REL_PINNED);
6518			/*
6519			 * The completion handler will try to grab sqcp->lock,
6520			 * so there is no chance that the completion handler
6521			 * will call scsi_done() until we release the lock
6522			 * here (so ok to keep referencing sdsc).
6523			 */
6524			spin_unlock_irqrestore(&sdsc->lock, flags);
6525		}
6526	} else {	/* jdelay < 0, use work queue */
6527		if (unlikely((sdebug_opts & SDEBUG_OPT_CMD_ABORT) &&
6528			     atomic_read(&sdeb_inject_pending))) {
6529			sd_dp->aborted = true;
6530			atomic_set(&sdeb_inject_pending, 0);
6531			sdev_printk(KERN_INFO, sdp, "abort request tag=%#x\n",
6532				    blk_mq_unique_tag_to_tag(get_tag(cmnd)));
 
 
6533		}
6534
6535		if (sdebug_statistics)
6536			sd_dp->issuing_cpu = raw_smp_processor_id();
6537		if (polled) {
6538			spin_lock_irqsave(&sdsc->lock, flags);
6539			ASSIGN_QUEUED_CMD(cmnd, sqcp);
6540			sd_dp->cmpl_ts = ns_to_ktime(ns_from_boot);
6541			WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_POLL);
6542			spin_unlock_irqrestore(&sdsc->lock, flags);
6543		} else {
6544			spin_lock_irqsave(&sdsc->lock, flags);
6545			ASSIGN_QUEUED_CMD(cmnd, sqcp);
6546			WRITE_ONCE(sd_dp->defer_t, SDEB_DEFER_WQ);
6547			schedule_work(&sd_dp->ew.work);
6548			spin_unlock_irqrestore(&sdsc->lock, flags);
6549		}
6550	}
6551
 
 
 
 
 
6552	return 0;
6553
6554respond_in_thread:	/* call back to mid-layer using invocation thread */
6555	cmnd->result = pfp != NULL ? pfp(cmnd, devip) : 0;
6556	cmnd->result &= ~SDEG_RES_IMMED_MASK;
6557	if (cmnd->result == 0 && scsi_result != 0)
6558		cmnd->result = scsi_result;
6559	scsi_done(cmnd);
6560	return 0;
6561}
6562
6563/* Note: The following macros create attribute files in the
6564   /sys/module/scsi_debug/parameters directory. Unfortunately this
6565   driver is unaware of a change and cannot trigger auxiliary actions
6566   as it can when the corresponding attribute in the
6567   /sys/bus/pseudo/drivers/scsi_debug directory is changed.
6568 */
6569module_param_named(add_host, sdebug_add_host, int, S_IRUGO | S_IWUSR);
6570module_param_named(ato, sdebug_ato, int, S_IRUGO);
6571module_param_named(cdb_len, sdebug_cdb_len, int, 0644);
6572module_param_named(clustering, sdebug_clustering, bool, S_IRUGO | S_IWUSR);
6573module_param_named(delay, sdebug_jdelay, int, S_IRUGO | S_IWUSR);
6574module_param_named(dev_size_mb, sdebug_dev_size_mb, int, S_IRUGO);
6575module_param_named(dif, sdebug_dif, int, S_IRUGO);
6576module_param_named(dix, sdebug_dix, int, S_IRUGO);
6577module_param_named(dsense, sdebug_dsense, int, S_IRUGO | S_IWUSR);
6578module_param_named(every_nth, sdebug_every_nth, int, S_IRUGO | S_IWUSR);
6579module_param_named(fake_rw, sdebug_fake_rw, int, S_IRUGO | S_IWUSR);
6580module_param_named(guard, sdebug_guard, uint, S_IRUGO);
6581module_param_named(host_lock, sdebug_host_lock, bool, S_IRUGO | S_IWUSR);
6582module_param_named(host_max_queue, sdebug_host_max_queue, int, S_IRUGO);
6583module_param_string(inq_product, sdebug_inq_product_id,
6584		    sizeof(sdebug_inq_product_id), S_IRUGO | S_IWUSR);
6585module_param_string(inq_rev, sdebug_inq_product_rev,
6586		    sizeof(sdebug_inq_product_rev), S_IRUGO | S_IWUSR);
6587module_param_string(inq_vendor, sdebug_inq_vendor_id,
6588		    sizeof(sdebug_inq_vendor_id), S_IRUGO | S_IWUSR);
6589module_param_named(lbprz, sdebug_lbprz, int, S_IRUGO);
6590module_param_named(lbpu, sdebug_lbpu, int, S_IRUGO);
6591module_param_named(lbpws, sdebug_lbpws, int, S_IRUGO);
6592module_param_named(lbpws10, sdebug_lbpws10, int, S_IRUGO);
6593module_param_named(atomic_wr, sdebug_atomic_wr, int, S_IRUGO);
6594module_param_named(lowest_aligned, sdebug_lowest_aligned, int, S_IRUGO);
6595module_param_named(lun_format, sdebug_lun_am_i, int, S_IRUGO | S_IWUSR);
6596module_param_named(max_luns, sdebug_max_luns, int, S_IRUGO | S_IWUSR);
6597module_param_named(max_queue, sdebug_max_queue, int, S_IRUGO | S_IWUSR);
6598module_param_named(medium_error_count, sdebug_medium_error_count, int,
6599		   S_IRUGO | S_IWUSR);
6600module_param_named(medium_error_start, sdebug_medium_error_start, int,
6601		   S_IRUGO | S_IWUSR);
6602module_param_named(ndelay, sdebug_ndelay, int, S_IRUGO | S_IWUSR);
6603module_param_named(no_lun_0, sdebug_no_lun_0, int, S_IRUGO | S_IWUSR);
6604module_param_named(no_rwlock, sdebug_no_rwlock, bool, S_IRUGO | S_IWUSR);
6605module_param_named(no_uld, sdebug_no_uld, int, S_IRUGO);
6606module_param_named(num_parts, sdebug_num_parts, int, S_IRUGO);
6607module_param_named(num_tgts, sdebug_num_tgts, int, S_IRUGO | S_IWUSR);
6608module_param_named(opt_blks, sdebug_opt_blks, int, S_IRUGO);
6609module_param_named(opt_xferlen_exp, sdebug_opt_xferlen_exp, int, S_IRUGO);
6610module_param_named(opts, sdebug_opts, int, S_IRUGO | S_IWUSR);
6611module_param_named(per_host_store, sdebug_per_host_store, bool,
6612		   S_IRUGO | S_IWUSR);
6613module_param_named(physblk_exp, sdebug_physblk_exp, int, S_IRUGO);
6614module_param_named(ptype, sdebug_ptype, int, S_IRUGO | S_IWUSR);
6615module_param_named(random, sdebug_random, bool, S_IRUGO | S_IWUSR);
6616module_param_named(removable, sdebug_removable, bool, S_IRUGO | S_IWUSR);
6617module_param_named(scsi_level, sdebug_scsi_level, int, S_IRUGO);
6618module_param_named(sector_size, sdebug_sector_size, int, S_IRUGO);
6619module_param_named(statistics, sdebug_statistics, bool, S_IRUGO | S_IWUSR);
6620module_param_named(strict, sdebug_strict, bool, S_IRUGO | S_IWUSR);
6621module_param_named(submit_queues, submit_queues, int, S_IRUGO);
6622module_param_named(poll_queues, poll_queues, int, S_IRUGO);
6623module_param_named(tur_ms_to_ready, sdeb_tur_ms_to_ready, int, S_IRUGO);
6624module_param_named(unmap_alignment, sdebug_unmap_alignment, int, S_IRUGO);
6625module_param_named(unmap_granularity, sdebug_unmap_granularity, int, S_IRUGO);
6626module_param_named(unmap_max_blocks, sdebug_unmap_max_blocks, int, S_IRUGO);
6627module_param_named(unmap_max_desc, sdebug_unmap_max_desc, int, S_IRUGO);
6628module_param_named(atomic_wr_max_length, sdebug_atomic_wr_max_length, int, S_IRUGO);
6629module_param_named(atomic_wr_align, sdebug_atomic_wr_align, int, S_IRUGO);
6630module_param_named(atomic_wr_gran, sdebug_atomic_wr_gran, int, S_IRUGO);
6631module_param_named(atomic_wr_max_length_bndry, sdebug_atomic_wr_max_length_bndry, int, S_IRUGO);
6632module_param_named(atomic_wr_max_bndry, sdebug_atomic_wr_max_bndry, int, S_IRUGO);
6633module_param_named(uuid_ctl, sdebug_uuid_ctl, int, S_IRUGO);
6634module_param_named(virtual_gb, sdebug_virtual_gb, int, S_IRUGO | S_IWUSR);
 
6635module_param_named(vpd_use_hostno, sdebug_vpd_use_hostno, int,
6636		   S_IRUGO | S_IWUSR);
6637module_param_named(wp, sdebug_wp, bool, S_IRUGO | S_IWUSR);
6638module_param_named(write_same_length, sdebug_write_same_length, int,
6639		   S_IRUGO | S_IWUSR);
6640module_param_named(zbc, sdeb_zbc_model_s, charp, S_IRUGO);
6641module_param_named(zone_cap_mb, sdeb_zbc_zone_cap_mb, int, S_IRUGO);
6642module_param_named(zone_max_open, sdeb_zbc_max_open, int, S_IRUGO);
6643module_param_named(zone_nr_conv, sdeb_zbc_nr_conv, int, S_IRUGO);
6644module_param_named(zone_size_mb, sdeb_zbc_zone_size_mb, int, S_IRUGO);
6645module_param_named(allow_restart, sdebug_allow_restart, bool, S_IRUGO | S_IWUSR);
6646
6647MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
6648MODULE_DESCRIPTION("SCSI debug adapter driver");
6649MODULE_LICENSE("GPL");
6650MODULE_VERSION(SDEBUG_VERSION);
6651
6652MODULE_PARM_DESC(add_host, "add n hosts, in sysfs if negative remove host(s) (def=1)");
6653MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
6654MODULE_PARM_DESC(cdb_len, "suggest CDB lengths to drivers (def=10)");
6655MODULE_PARM_DESC(clustering, "when set enables larger transfers (def=0)");
6656MODULE_PARM_DESC(delay, "response delay (def=1 jiffy); 0:imm, -1,-2:tiny");
6657MODULE_PARM_DESC(dev_size_mb, "size in MiB of ram shared by devs(def=8)");
6658MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
6659MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
6660MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
6661MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
6662MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
6663MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
6664MODULE_PARM_DESC(host_lock, "host_lock is ignored (def=0)");
6665MODULE_PARM_DESC(host_max_queue,
6666		 "host max # of queued cmds (0 to max(def) [max_queue fixed equal for !0])");
6667MODULE_PARM_DESC(inq_product, "SCSI INQUIRY product string (def=\"scsi_debug\")");
6668MODULE_PARM_DESC(inq_rev, "SCSI INQUIRY revision string (def=\""
6669		 SDEBUG_VERSION "\")");
6670MODULE_PARM_DESC(inq_vendor, "SCSI INQUIRY vendor string (def=\"Linux\")");
6671MODULE_PARM_DESC(lbprz,
6672		 "on read unmapped LBs return 0 when 1 (def), return 0xff when 2");
6673MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
6674MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
6675MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
6676MODULE_PARM_DESC(atomic_write, "enable ATOMIC WRITE support, support WRITE ATOMIC(16) (def=0)");
 
6677MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
6678MODULE_PARM_DESC(lun_format, "LUN format: 0->peripheral (def); 1 --> flat address method");
6679MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
6680MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
6681MODULE_PARM_DESC(medium_error_count, "count of sectors to return follow on MEDIUM error");
6682MODULE_PARM_DESC(medium_error_start, "starting sector number to return MEDIUM error");
6683MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
6684MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
6685MODULE_PARM_DESC(no_rwlock, "don't protect user data reads+writes (def=0)");
6686MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
6687MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
6688MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
6689MODULE_PARM_DESC(opt_blks, "optimal transfer length in blocks (def=1024)");
6690MODULE_PARM_DESC(opt_xferlen_exp, "optimal transfer length granularity exponent (def=physblk_exp)");
6691MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
6692MODULE_PARM_DESC(per_host_store, "If set, next positive add_host will get new store (def=0)");
6693MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
6694MODULE_PARM_DESC(poll_queues, "support for iouring iopoll queues (1 to max(submit_queues - 1))");
6695MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
6696MODULE_PARM_DESC(random, "If set, uniformly randomize command duration between 0 and delay_in_ns");
6697MODULE_PARM_DESC(removable, "claim to have removable media (def=0)");
6698MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=7[SPC-5])");
6699MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
6700MODULE_PARM_DESC(statistics, "collect statistics on commands, queues (def=0)");
6701MODULE_PARM_DESC(strict, "stricter checks: reserved field in cdb (def=0)");
6702MODULE_PARM_DESC(submit_queues, "support for block multi-queue (def=1)");
6703MODULE_PARM_DESC(tur_ms_to_ready, "TEST UNIT READY millisecs before initial good status (def=0)");
6704MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
6705MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
6706MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
6707MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
6708MODULE_PARM_DESC(atomic_wr_max_length, "max # of blocks can be atomically written in one cmd (def=8192)");
6709MODULE_PARM_DESC(atomic_wr_align, "minimum alignment of atomic write in blocks (def=2)");
6710MODULE_PARM_DESC(atomic_wr_gran, "minimum granularity of atomic write in blocks (def=2)");
6711MODULE_PARM_DESC(atomic_wr_max_length_bndry, "max # of blocks can be atomically written in one cmd with boundary set (def=8192)");
6712MODULE_PARM_DESC(atomic_wr_max_bndry, "max # boundaries per atomic write (def=128)");
6713MODULE_PARM_DESC(uuid_ctl,
6714		 "1->use uuid for lu name, 0->don't, 2->all use same (def=0)");
6715MODULE_PARM_DESC(virtual_gb, "virtual gigabyte (GiB) size (def=0 -> use dev_size_mb)");
6716MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
6717MODULE_PARM_DESC(wp, "Write Protect (def=0)");
6718MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
6719MODULE_PARM_DESC(zbc, "'none' [0]; 'aware' [1]; 'managed' [2] (def=0). Can have 'host-' prefix");
6720MODULE_PARM_DESC(zone_cap_mb, "Zone capacity in MiB (def=zone size)");
6721MODULE_PARM_DESC(zone_max_open, "Maximum number of open zones; [0] for no limit (def=auto)");
6722MODULE_PARM_DESC(zone_nr_conv, "Number of conventional zones (def=1)");
6723MODULE_PARM_DESC(zone_size_mb, "Zone size in MiB (def=auto)");
6724MODULE_PARM_DESC(allow_restart, "Set scsi_device's allow_restart flag(def=0)");
6725
6726#define SDEBUG_INFO_LEN 256
6727static char sdebug_info[SDEBUG_INFO_LEN];
6728
6729static const char *scsi_debug_info(struct Scsi_Host *shp)
6730{
6731	int k;
6732
6733	k = scnprintf(sdebug_info, SDEBUG_INFO_LEN, "%s: version %s [%s]\n",
6734		      my_name, SDEBUG_VERSION, sdebug_version_date);
6735	if (k >= (SDEBUG_INFO_LEN - 1))
6736		return sdebug_info;
6737	scnprintf(sdebug_info + k, SDEBUG_INFO_LEN - k,
6738		  "  dev_size_mb=%d, opts=0x%x, submit_queues=%d, %s=%d",
6739		  sdebug_dev_size_mb, sdebug_opts, submit_queues,
6740		  "statistics", (int)sdebug_statistics);
6741	return sdebug_info;
6742}
6743
6744/* 'echo <val> > /proc/scsi/scsi_debug/<host_id>' writes to opts */
6745static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer,
6746				 int length)
6747{
6748	char arr[16];
6749	int opts;
6750	int minLen = length > 15 ? 15 : length;
6751
6752	if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
6753		return -EACCES;
6754	memcpy(arr, buffer, minLen);
6755	arr[minLen] = '\0';
6756	if (1 != sscanf(arr, "%d", &opts))
6757		return -EINVAL;
6758	sdebug_opts = opts;
6759	sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
6760	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
6761	if (sdebug_every_nth != 0)
6762		tweak_cmnd_count();
6763	return length;
6764}
6765
6766struct sdebug_submit_queue_data {
6767	int *first;
6768	int *last;
6769	int queue_num;
6770};
6771
6772static bool sdebug_submit_queue_iter(struct request *rq, void *opaque)
6773{
6774	struct sdebug_submit_queue_data *data = opaque;
6775	u32 unique_tag = blk_mq_unique_tag(rq);
6776	u16 hwq = blk_mq_unique_tag_to_hwq(unique_tag);
6777	u16 tag = blk_mq_unique_tag_to_tag(unique_tag);
6778	int queue_num = data->queue_num;
6779
6780	if (hwq != queue_num)
6781		return true;
6782
6783	/* Rely on iter'ing in ascending tag order */
6784	if (*data->first == -1)
6785		*data->first = *data->last = tag;
6786	else
6787		*data->last = tag;
6788
6789	return true;
6790}
6791
6792/* Output seen with 'cat /proc/scsi/scsi_debug/<host_id>'. It will be the
6793 * same for each scsi_debug host (if more than one). Some of the counters
6794 * output are not atomics so might be inaccurate in a busy system. */
6795static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
6796{
6797	struct sdebug_host_info *sdhp;
6798	int j;
6799
6800	seq_printf(m, "scsi_debug adapter driver, version %s [%s]\n",
6801		   SDEBUG_VERSION, sdebug_version_date);
6802	seq_printf(m, "num_tgts=%d, %ssize=%d MB, opts=0x%x, every_nth=%d\n",
6803		   sdebug_num_tgts, "shared (ram) ", sdebug_dev_size_mb,
6804		   sdebug_opts, sdebug_every_nth);
6805	seq_printf(m, "delay=%d, ndelay=%d, max_luns=%d, sector_size=%d %s\n",
6806		   sdebug_jdelay, sdebug_ndelay, sdebug_max_luns,
6807		   sdebug_sector_size, "bytes");
6808	seq_printf(m, "cylinders=%d, heads=%d, sectors=%d, command aborts=%d\n",
6809		   sdebug_cylinders_per, sdebug_heads, sdebug_sectors_per,
6810		   num_aborts);
6811	seq_printf(m, "RESETs: device=%d, target=%d, bus=%d, host=%d\n",
6812		   num_dev_resets, num_target_resets, num_bus_resets,
6813		   num_host_resets);
6814	seq_printf(m, "dix_reads=%d, dix_writes=%d, dif_errors=%d\n",
6815		   dix_reads, dix_writes, dif_errors);
6816	seq_printf(m, "usec_in_jiffy=%lu, statistics=%d\n", TICK_NSEC / 1000,
6817		   sdebug_statistics);
6818	seq_printf(m, "cmnd_count=%d, completions=%d, %s=%d, a_tsf=%d, mq_polls=%d\n",
 
6819		   atomic_read(&sdebug_cmnd_count),
6820		   atomic_read(&sdebug_completions),
6821		   "miss_cpus", atomic_read(&sdebug_miss_cpus),
6822		   atomic_read(&sdebug_a_tsf),
6823		   atomic_read(&sdeb_mq_poll_count));
6824
6825	seq_printf(m, "submit_queues=%d\n", submit_queues);
6826	for (j = 0; j < submit_queues; ++j) {
6827		int f = -1, l = -1;
6828		struct sdebug_submit_queue_data data = {
6829			.queue_num = j,
6830			.first = &f,
6831			.last = &l,
6832		};
6833		seq_printf(m, "  queue %d:\n", j);
6834		blk_mq_tagset_busy_iter(&host->tag_set, sdebug_submit_queue_iter,
6835					&data);
6836		if (f >= 0) {
6837			seq_printf(m, "    in_use_bm BUSY: %s: %d,%d\n",
6838				   "first,last bits", f, l);
6839		}
6840	}
6841
6842	seq_printf(m, "this host_no=%d\n", host->host_no);
6843	if (!xa_empty(per_store_ap)) {
6844		bool niu;
6845		int idx;
6846		unsigned long l_idx;
6847		struct sdeb_store_info *sip;
6848
6849		seq_puts(m, "\nhost list:\n");
6850		j = 0;
6851		list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6852			idx = sdhp->si_idx;
6853			seq_printf(m, "  %d: host_no=%d, si_idx=%d\n", j,
6854				   sdhp->shost->host_no, idx);
6855			++j;
6856		}
6857		seq_printf(m, "\nper_store array [most_recent_idx=%d]:\n",
6858			   sdeb_most_recent_idx);
6859		j = 0;
6860		xa_for_each(per_store_ap, l_idx, sip) {
6861			niu = xa_get_mark(per_store_ap, l_idx,
6862					  SDEB_XA_NOT_IN_USE);
6863			idx = (int)l_idx;
6864			seq_printf(m, "  %d: idx=%d%s\n", j, idx,
6865				   (niu ? "  not_in_use" : ""));
6866			++j;
6867		}
6868	}
6869	return 0;
6870}
6871
6872static ssize_t delay_show(struct device_driver *ddp, char *buf)
6873{
6874	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_jdelay);
6875}
6876/* Returns -EBUSY if jdelay is being changed and commands are queued. The unit
6877 * of delay is jiffies.
6878 */
6879static ssize_t delay_store(struct device_driver *ddp, const char *buf,
6880			   size_t count)
6881{
6882	int jdelay, res;
6883
6884	if (count > 0 && sscanf(buf, "%d", &jdelay) == 1) {
6885		res = count;
6886		if (sdebug_jdelay != jdelay) {
6887			struct sdebug_host_info *sdhp;
 
6888
6889			mutex_lock(&sdebug_host_list_mutex);
6890			block_unblock_all_queues(true);
6891
6892			list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6893				struct Scsi_Host *shost = sdhp->shost;
6894
6895				if (scsi_host_busy(shost)) {
6896					res = -EBUSY;   /* queued commands */
6897					break;
6898				}
6899			}
6900			if (res > 0) {
 
 
 
6901				sdebug_jdelay = jdelay;
6902				sdebug_ndelay = 0;
6903			}
6904			block_unblock_all_queues(false);
6905			mutex_unlock(&sdebug_host_list_mutex);
6906		}
6907		return res;
6908	}
6909	return -EINVAL;
6910}
6911static DRIVER_ATTR_RW(delay);
6912
6913static ssize_t ndelay_show(struct device_driver *ddp, char *buf)
6914{
6915	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ndelay);
6916}
6917/* Returns -EBUSY if ndelay is being changed and commands are queued */
6918/* If > 0 and accepted then sdebug_jdelay is set to JDELAY_OVERRIDDEN */
6919static ssize_t ndelay_store(struct device_driver *ddp, const char *buf,
6920			    size_t count)
6921{
6922	int ndelay, res;
6923
6924	if ((count > 0) && (1 == sscanf(buf, "%d", &ndelay)) &&
6925	    (ndelay >= 0) && (ndelay < (1000 * 1000 * 1000))) {
6926		res = count;
6927		if (sdebug_ndelay != ndelay) {
6928			struct sdebug_host_info *sdhp;
 
6929
6930			mutex_lock(&sdebug_host_list_mutex);
6931			block_unblock_all_queues(true);
6932
6933			list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
6934				struct Scsi_Host *shost = sdhp->shost;
6935
6936				if (scsi_host_busy(shost)) {
6937					res = -EBUSY;   /* queued commands */
6938					break;
6939				}
6940			}
6941
6942			if (res > 0) {
 
 
 
6943				sdebug_ndelay = ndelay;
6944				sdebug_jdelay = ndelay  ? JDELAY_OVERRIDDEN
6945							: DEF_JDELAY;
6946			}
6947			block_unblock_all_queues(false);
6948			mutex_unlock(&sdebug_host_list_mutex);
6949		}
6950		return res;
6951	}
6952	return -EINVAL;
6953}
6954static DRIVER_ATTR_RW(ndelay);
6955
6956static ssize_t opts_show(struct device_driver *ddp, char *buf)
6957{
6958	return scnprintf(buf, PAGE_SIZE, "0x%x\n", sdebug_opts);
6959}
6960
6961static ssize_t opts_store(struct device_driver *ddp, const char *buf,
6962			  size_t count)
6963{
6964	int opts;
6965	char work[20];
6966
6967	if (sscanf(buf, "%10s", work) == 1) {
6968		if (strncasecmp(work, "0x", 2) == 0) {
6969			if (kstrtoint(work + 2, 16, &opts) == 0)
6970				goto opts_done;
6971		} else {
6972			if (kstrtoint(work, 10, &opts) == 0)
6973				goto opts_done;
6974		}
6975	}
6976	return -EINVAL;
6977opts_done:
6978	sdebug_opts = opts;
6979	sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
6980	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
6981	tweak_cmnd_count();
6982	return count;
6983}
6984static DRIVER_ATTR_RW(opts);
6985
6986static ssize_t ptype_show(struct device_driver *ddp, char *buf)
6987{
6988	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ptype);
6989}
6990static ssize_t ptype_store(struct device_driver *ddp, const char *buf,
6991			   size_t count)
6992{
6993	int n;
6994
6995	/* Cannot change from or to TYPE_ZBC with sysfs */
6996	if (sdebug_ptype == TYPE_ZBC)
6997		return -EINVAL;
6998
6999	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7000		if (n == TYPE_ZBC)
7001			return -EINVAL;
7002		sdebug_ptype = n;
7003		return count;
7004	}
7005	return -EINVAL;
7006}
7007static DRIVER_ATTR_RW(ptype);
7008
7009static ssize_t dsense_show(struct device_driver *ddp, char *buf)
7010{
7011	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dsense);
7012}
7013static ssize_t dsense_store(struct device_driver *ddp, const char *buf,
7014			    size_t count)
7015{
7016	int n;
7017
7018	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7019		sdebug_dsense = n;
7020		return count;
7021	}
7022	return -EINVAL;
7023}
7024static DRIVER_ATTR_RW(dsense);
7025
7026static ssize_t fake_rw_show(struct device_driver *ddp, char *buf)
7027{
7028	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_fake_rw);
7029}
7030static ssize_t fake_rw_store(struct device_driver *ddp, const char *buf,
7031			     size_t count)
7032{
7033	int n, idx;
7034
7035	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7036		bool want_store = (n == 0);
7037		struct sdebug_host_info *sdhp;
7038
7039		n = (n > 0);
7040		sdebug_fake_rw = (sdebug_fake_rw > 0);
7041		if (sdebug_fake_rw == n)
7042			return count;	/* not transitioning so do nothing */
7043
7044		if (want_store) {	/* 1 --> 0 transition, set up store */
7045			if (sdeb_first_idx < 0) {
7046				idx = sdebug_add_store();
7047				if (idx < 0)
7048					return idx;
7049			} else {
7050				idx = sdeb_first_idx;
7051				xa_clear_mark(per_store_ap, idx,
7052					      SDEB_XA_NOT_IN_USE);
7053			}
7054			/* make all hosts use same store */
7055			list_for_each_entry(sdhp, &sdebug_host_list,
7056					    host_list) {
7057				if (sdhp->si_idx != idx) {
7058					xa_set_mark(per_store_ap, sdhp->si_idx,
7059						    SDEB_XA_NOT_IN_USE);
7060					sdhp->si_idx = idx;
7061				}
 
7062			}
7063			sdeb_most_recent_idx = idx;
7064		} else {	/* 0 --> 1 transition is trigger for shrink */
7065			sdebug_erase_all_stores(true /* apart from first */);
7066		}
7067		sdebug_fake_rw = n;
7068		return count;
7069	}
7070	return -EINVAL;
7071}
7072static DRIVER_ATTR_RW(fake_rw);
7073
7074static ssize_t no_lun_0_show(struct device_driver *ddp, char *buf)
7075{
7076	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_lun_0);
7077}
7078static ssize_t no_lun_0_store(struct device_driver *ddp, const char *buf,
7079			      size_t count)
7080{
7081	int n;
7082
7083	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7084		sdebug_no_lun_0 = n;
7085		return count;
7086	}
7087	return -EINVAL;
7088}
7089static DRIVER_ATTR_RW(no_lun_0);
7090
7091static ssize_t num_tgts_show(struct device_driver *ddp, char *buf)
7092{
7093	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_tgts);
7094}
7095static ssize_t num_tgts_store(struct device_driver *ddp, const char *buf,
7096			      size_t count)
7097{
7098	int n;
7099
7100	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7101		sdebug_num_tgts = n;
7102		sdebug_max_tgts_luns();
7103		return count;
7104	}
7105	return -EINVAL;
7106}
7107static DRIVER_ATTR_RW(num_tgts);
7108
7109static ssize_t dev_size_mb_show(struct device_driver *ddp, char *buf)
7110{
7111	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dev_size_mb);
7112}
7113static DRIVER_ATTR_RO(dev_size_mb);
7114
7115static ssize_t per_host_store_show(struct device_driver *ddp, char *buf)
7116{
7117	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_per_host_store);
7118}
7119
7120static ssize_t per_host_store_store(struct device_driver *ddp, const char *buf,
7121				    size_t count)
7122{
7123	bool v;
7124
7125	if (kstrtobool(buf, &v))
7126		return -EINVAL;
7127
7128	sdebug_per_host_store = v;
7129	return count;
7130}
7131static DRIVER_ATTR_RW(per_host_store);
7132
7133static ssize_t num_parts_show(struct device_driver *ddp, char *buf)
7134{
7135	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_parts);
7136}
7137static DRIVER_ATTR_RO(num_parts);
7138
7139static ssize_t every_nth_show(struct device_driver *ddp, char *buf)
7140{
7141	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_every_nth);
7142}
7143static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
7144			       size_t count)
7145{
7146	int nth;
7147	char work[20];
7148
7149	if (sscanf(buf, "%10s", work) == 1) {
7150		if (strncasecmp(work, "0x", 2) == 0) {
7151			if (kstrtoint(work + 2, 16, &nth) == 0)
7152				goto every_nth_done;
7153		} else {
7154			if (kstrtoint(work, 10, &nth) == 0)
7155				goto every_nth_done;
7156		}
7157	}
7158	return -EINVAL;
7159
7160every_nth_done:
7161	sdebug_every_nth = nth;
7162	if (nth && !sdebug_statistics) {
7163		pr_info("every_nth needs statistics=1, set it\n");
7164		sdebug_statistics = true;
7165	}
7166	tweak_cmnd_count();
7167	return count;
7168}
7169static DRIVER_ATTR_RW(every_nth);
7170
7171static ssize_t lun_format_show(struct device_driver *ddp, char *buf)
7172{
7173	return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_lun_am);
7174}
7175static ssize_t lun_format_store(struct device_driver *ddp, const char *buf,
7176				size_t count)
7177{
7178	int n;
7179	bool changed;
7180
7181	if (kstrtoint(buf, 0, &n))
7182		return -EINVAL;
7183	if (n >= 0) {
7184		if (n > (int)SAM_LUN_AM_FLAT) {
7185			pr_warn("only LUN address methods 0 and 1 are supported\n");
7186			return -EINVAL;
7187		}
7188		changed = ((int)sdebug_lun_am != n);
7189		sdebug_lun_am = n;
7190		if (changed && sdebug_scsi_level >= 5) {	/* >= SPC-3 */
7191			struct sdebug_host_info *sdhp;
7192			struct sdebug_dev_info *dp;
7193
7194			mutex_lock(&sdebug_host_list_mutex);
7195			list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
7196				list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
7197					set_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
7198				}
7199			}
7200			mutex_unlock(&sdebug_host_list_mutex);
7201		}
 
7202		return count;
7203	}
7204	return -EINVAL;
7205}
7206static DRIVER_ATTR_RW(lun_format);
7207
7208static ssize_t max_luns_show(struct device_driver *ddp, char *buf)
7209{
7210	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_luns);
7211}
7212static ssize_t max_luns_store(struct device_driver *ddp, const char *buf,
7213			      size_t count)
7214{
7215	int n;
7216	bool changed;
7217
7218	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7219		if (n > 256) {
7220			pr_warn("max_luns can be no more than 256\n");
7221			return -EINVAL;
7222		}
7223		changed = (sdebug_max_luns != n);
7224		sdebug_max_luns = n;
7225		sdebug_max_tgts_luns();
7226		if (changed && (sdebug_scsi_level >= 5)) {	/* >= SPC-3 */
7227			struct sdebug_host_info *sdhp;
7228			struct sdebug_dev_info *dp;
7229
7230			mutex_lock(&sdebug_host_list_mutex);
7231			list_for_each_entry(sdhp, &sdebug_host_list,
7232					    host_list) {
7233				list_for_each_entry(dp, &sdhp->dev_info_list,
7234						    dev_list) {
7235					set_bit(SDEBUG_UA_LUNS_CHANGED,
7236						dp->uas_bm);
7237				}
7238			}
7239			mutex_unlock(&sdebug_host_list_mutex);
7240		}
7241		return count;
7242	}
7243	return -EINVAL;
7244}
7245static DRIVER_ATTR_RW(max_luns);
7246
7247static ssize_t max_queue_show(struct device_driver *ddp, char *buf)
7248{
7249	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_queue);
7250}
7251/* N.B. max_queue can be changed while there are queued commands. In flight
7252 * commands beyond the new max_queue will be completed. */
7253static ssize_t max_queue_store(struct device_driver *ddp, const char *buf,
7254			       size_t count)
7255{
7256	int n;
 
7257
7258	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
7259	    (n <= SDEBUG_CANQUEUE) &&
7260	    (sdebug_host_max_queue == 0)) {
7261		mutex_lock(&sdebug_host_list_mutex);
7262
7263		/* We may only change sdebug_max_queue when we have no shosts */
7264		if (list_empty(&sdebug_host_list))
7265			sdebug_max_queue = n;
 
 
 
 
 
 
 
7266		else
7267			count = -EBUSY;
7268		mutex_unlock(&sdebug_host_list_mutex);
7269		return count;
7270	}
7271	return -EINVAL;
7272}
7273static DRIVER_ATTR_RW(max_queue);
7274
7275static ssize_t host_max_queue_show(struct device_driver *ddp, char *buf)
7276{
7277	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_host_max_queue);
7278}
7279
7280static ssize_t no_rwlock_show(struct device_driver *ddp, char *buf)
7281{
7282	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_rwlock);
7283}
7284
7285static ssize_t no_rwlock_store(struct device_driver *ddp, const char *buf, size_t count)
7286{
7287	bool v;
7288
7289	if (kstrtobool(buf, &v))
7290		return -EINVAL;
7291
7292	sdebug_no_rwlock = v;
7293	return count;
7294}
7295static DRIVER_ATTR_RW(no_rwlock);
7296
7297/*
7298 * Since this is used for .can_queue, and we get the hc_idx tag from the bitmap
7299 * in range [0, sdebug_host_max_queue), we can't change it.
7300 */
7301static DRIVER_ATTR_RO(host_max_queue);
7302
7303static ssize_t no_uld_show(struct device_driver *ddp, char *buf)
7304{
7305	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_uld);
7306}
7307static DRIVER_ATTR_RO(no_uld);
7308
7309static ssize_t scsi_level_show(struct device_driver *ddp, char *buf)
7310{
7311	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_scsi_level);
7312}
7313static DRIVER_ATTR_RO(scsi_level);
7314
7315static ssize_t virtual_gb_show(struct device_driver *ddp, char *buf)
7316{
7317	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_virtual_gb);
7318}
7319static ssize_t virtual_gb_store(struct device_driver *ddp, const char *buf,
7320				size_t count)
7321{
7322	int n;
7323	bool changed;
7324
7325	/* Ignore capacity change for ZBC drives for now */
7326	if (sdeb_zbc_in_use)
7327		return -ENOTSUPP;
7328
7329	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7330		changed = (sdebug_virtual_gb != n);
7331		sdebug_virtual_gb = n;
7332		sdebug_capacity = get_sdebug_capacity();
7333		if (changed) {
7334			struct sdebug_host_info *sdhp;
7335			struct sdebug_dev_info *dp;
7336
7337			mutex_lock(&sdebug_host_list_mutex);
7338			list_for_each_entry(sdhp, &sdebug_host_list,
7339					    host_list) {
7340				list_for_each_entry(dp, &sdhp->dev_info_list,
7341						    dev_list) {
7342					set_bit(SDEBUG_UA_CAPACITY_CHANGED,
7343						dp->uas_bm);
7344				}
7345			}
7346			mutex_unlock(&sdebug_host_list_mutex);
7347		}
7348		return count;
7349	}
7350	return -EINVAL;
7351}
7352static DRIVER_ATTR_RW(virtual_gb);
7353
7354static ssize_t add_host_show(struct device_driver *ddp, char *buf)
7355{
7356	/* absolute number of hosts currently active is what is shown */
7357	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_hosts);
7358}
7359
 
 
 
7360static ssize_t add_host_store(struct device_driver *ddp, const char *buf,
7361			      size_t count)
7362{
7363	bool found;
7364	unsigned long idx;
7365	struct sdeb_store_info *sip;
7366	bool want_phs = (sdebug_fake_rw == 0) && sdebug_per_host_store;
7367	int delta_hosts;
7368
7369	if (sscanf(buf, "%d", &delta_hosts) != 1)
7370		return -EINVAL;
7371	if (delta_hosts > 0) {
7372		do {
7373			found = false;
7374			if (want_phs) {
7375				xa_for_each_marked(per_store_ap, idx, sip,
7376						   SDEB_XA_NOT_IN_USE) {
7377					sdeb_most_recent_idx = (int)idx;
7378					found = true;
7379					break;
7380				}
7381				if (found)	/* re-use case */
7382					sdebug_add_host_helper((int)idx);
7383				else
7384					sdebug_do_add_host(true);
7385			} else {
7386				sdebug_do_add_host(false);
7387			}
7388		} while (--delta_hosts);
7389	} else if (delta_hosts < 0) {
7390		do {
7391			sdebug_do_remove_host(false);
7392		} while (++delta_hosts);
7393	}
7394	return count;
7395}
7396static DRIVER_ATTR_RW(add_host);
7397
7398static ssize_t vpd_use_hostno_show(struct device_driver *ddp, char *buf)
7399{
7400	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_vpd_use_hostno);
7401}
7402static ssize_t vpd_use_hostno_store(struct device_driver *ddp, const char *buf,
7403				    size_t count)
7404{
7405	int n;
7406
7407	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7408		sdebug_vpd_use_hostno = n;
7409		return count;
7410	}
7411	return -EINVAL;
7412}
7413static DRIVER_ATTR_RW(vpd_use_hostno);
7414
7415static ssize_t statistics_show(struct device_driver *ddp, char *buf)
7416{
7417	return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_statistics);
7418}
7419static ssize_t statistics_store(struct device_driver *ddp, const char *buf,
7420				size_t count)
7421{
7422	int n;
7423
7424	if ((count > 0) && (sscanf(buf, "%d", &n) == 1) && (n >= 0)) {
7425		if (n > 0)
7426			sdebug_statistics = true;
7427		else {
7428			clear_queue_stats();
7429			sdebug_statistics = false;
7430		}
7431		return count;
7432	}
7433	return -EINVAL;
7434}
7435static DRIVER_ATTR_RW(statistics);
7436
7437static ssize_t sector_size_show(struct device_driver *ddp, char *buf)
7438{
7439	return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_sector_size);
7440}
7441static DRIVER_ATTR_RO(sector_size);
7442
7443static ssize_t submit_queues_show(struct device_driver *ddp, char *buf)
7444{
7445	return scnprintf(buf, PAGE_SIZE, "%d\n", submit_queues);
7446}
7447static DRIVER_ATTR_RO(submit_queues);
7448
7449static ssize_t dix_show(struct device_driver *ddp, char *buf)
7450{
7451	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dix);
7452}
7453static DRIVER_ATTR_RO(dix);
7454
7455static ssize_t dif_show(struct device_driver *ddp, char *buf)
7456{
7457	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dif);
7458}
7459static DRIVER_ATTR_RO(dif);
7460
7461static ssize_t guard_show(struct device_driver *ddp, char *buf)
7462{
7463	return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_guard);
7464}
7465static DRIVER_ATTR_RO(guard);
7466
7467static ssize_t ato_show(struct device_driver *ddp, char *buf)
7468{
7469	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ato);
7470}
7471static DRIVER_ATTR_RO(ato);
7472
7473static ssize_t map_show(struct device_driver *ddp, char *buf)
7474{
7475	ssize_t count = 0;
7476
7477	if (!scsi_debug_lbp())
7478		return scnprintf(buf, PAGE_SIZE, "0-%u\n",
7479				 sdebug_store_sectors);
7480
7481	if (sdebug_fake_rw == 0 && !xa_empty(per_store_ap)) {
7482		struct sdeb_store_info *sip = xa_load(per_store_ap, 0);
7483
7484		if (sip)
7485			count = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
7486					  (int)map_size, sip->map_storep);
7487	}
7488	buf[count++] = '\n';
7489	buf[count] = '\0';
7490
7491	return count;
7492}
7493static DRIVER_ATTR_RO(map);
7494
7495static ssize_t random_show(struct device_driver *ddp, char *buf)
7496{
7497	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_random);
7498}
7499
7500static ssize_t random_store(struct device_driver *ddp, const char *buf,
7501			    size_t count)
7502{
7503	bool v;
7504
7505	if (kstrtobool(buf, &v))
7506		return -EINVAL;
7507
7508	sdebug_random = v;
7509	return count;
7510}
7511static DRIVER_ATTR_RW(random);
7512
7513static ssize_t removable_show(struct device_driver *ddp, char *buf)
7514{
7515	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_removable ? 1 : 0);
7516}
7517static ssize_t removable_store(struct device_driver *ddp, const char *buf,
7518			       size_t count)
7519{
7520	int n;
7521
7522	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7523		sdebug_removable = (n > 0);
7524		return count;
7525	}
7526	return -EINVAL;
7527}
7528static DRIVER_ATTR_RW(removable);
7529
7530static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
7531{
7532	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_host_lock);
7533}
7534/* N.B. sdebug_host_lock does nothing, kept for backward compatibility */
7535static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
7536			       size_t count)
7537{
7538	int n;
7539
7540	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7541		sdebug_host_lock = (n > 0);
7542		return count;
7543	}
7544	return -EINVAL;
7545}
7546static DRIVER_ATTR_RW(host_lock);
7547
7548static ssize_t strict_show(struct device_driver *ddp, char *buf)
7549{
7550	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_strict);
7551}
7552static ssize_t strict_store(struct device_driver *ddp, const char *buf,
7553			    size_t count)
7554{
7555	int n;
7556
7557	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
7558		sdebug_strict = (n > 0);
7559		return count;
7560	}
7561	return -EINVAL;
7562}
7563static DRIVER_ATTR_RW(strict);
7564
7565static ssize_t uuid_ctl_show(struct device_driver *ddp, char *buf)
7566{
7567	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_uuid_ctl);
7568}
7569static DRIVER_ATTR_RO(uuid_ctl);
7570
7571static ssize_t cdb_len_show(struct device_driver *ddp, char *buf)
7572{
7573	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_cdb_len);
7574}
7575static ssize_t cdb_len_store(struct device_driver *ddp, const char *buf,
7576			     size_t count)
7577{
7578	int ret, n;
7579
7580	ret = kstrtoint(buf, 0, &n);
7581	if (ret)
7582		return ret;
7583	sdebug_cdb_len = n;
7584	all_config_cdb_len();
7585	return count;
7586}
7587static DRIVER_ATTR_RW(cdb_len);
7588
7589static const char * const zbc_model_strs_a[] = {
7590	[BLK_ZONED_NONE] = "none",
7591	[BLK_ZONED_HA]   = "host-aware",
7592	[BLK_ZONED_HM]   = "host-managed",
7593};
7594
7595static const char * const zbc_model_strs_b[] = {
7596	[BLK_ZONED_NONE] = "no",
7597	[BLK_ZONED_HA]   = "aware",
7598	[BLK_ZONED_HM]   = "managed",
7599};
7600
7601static const char * const zbc_model_strs_c[] = {
7602	[BLK_ZONED_NONE] = "0",
7603	[BLK_ZONED_HA]   = "1",
7604	[BLK_ZONED_HM]   = "2",
7605};
7606
7607static int sdeb_zbc_model_str(const char *cp)
7608{
7609	int res = sysfs_match_string(zbc_model_strs_a, cp);
7610
7611	if (res < 0) {
7612		res = sysfs_match_string(zbc_model_strs_b, cp);
7613		if (res < 0) {
7614			res = sysfs_match_string(zbc_model_strs_c, cp);
7615			if (res < 0)
7616				return -EINVAL;
7617		}
7618	}
7619	return res;
7620}
7621
7622static ssize_t zbc_show(struct device_driver *ddp, char *buf)
7623{
7624	return scnprintf(buf, PAGE_SIZE, "%s\n",
7625			 zbc_model_strs_a[sdeb_zbc_model]);
7626}
7627static DRIVER_ATTR_RO(zbc);
7628
7629static ssize_t tur_ms_to_ready_show(struct device_driver *ddp, char *buf)
7630{
7631	return scnprintf(buf, PAGE_SIZE, "%d\n", sdeb_tur_ms_to_ready);
7632}
7633static DRIVER_ATTR_RO(tur_ms_to_ready);
7634
7635static ssize_t group_number_stats_show(struct device_driver *ddp, char *buf)
7636{
7637	char *p = buf, *end = buf + PAGE_SIZE;
7638	int i;
7639
7640	for (i = 0; i < ARRAY_SIZE(writes_by_group_number); i++)
7641		p += scnprintf(p, end - p, "%d %ld\n", i,
7642			       atomic_long_read(&writes_by_group_number[i]));
7643
7644	return p - buf;
7645}
7646
7647static ssize_t group_number_stats_store(struct device_driver *ddp,
7648					const char *buf, size_t count)
7649{
7650	int i;
7651
7652	for (i = 0; i < ARRAY_SIZE(writes_by_group_number); i++)
7653		atomic_long_set(&writes_by_group_number[i], 0);
7654
7655	return count;
7656}
7657static DRIVER_ATTR_RW(group_number_stats);
7658
7659/* Note: The following array creates attribute files in the
7660   /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
7661   files (over those found in the /sys/module/scsi_debug/parameters
7662   directory) is that auxiliary actions can be triggered when an attribute
7663   is changed. For example see: add_host_store() above.
7664 */
7665
7666static struct attribute *sdebug_drv_attrs[] = {
7667	&driver_attr_delay.attr,
7668	&driver_attr_opts.attr,
7669	&driver_attr_ptype.attr,
7670	&driver_attr_dsense.attr,
7671	&driver_attr_fake_rw.attr,
7672	&driver_attr_host_max_queue.attr,
7673	&driver_attr_no_lun_0.attr,
7674	&driver_attr_num_tgts.attr,
7675	&driver_attr_dev_size_mb.attr,
7676	&driver_attr_num_parts.attr,
7677	&driver_attr_every_nth.attr,
7678	&driver_attr_lun_format.attr,
7679	&driver_attr_max_luns.attr,
7680	&driver_attr_max_queue.attr,
7681	&driver_attr_no_rwlock.attr,
7682	&driver_attr_no_uld.attr,
7683	&driver_attr_scsi_level.attr,
7684	&driver_attr_virtual_gb.attr,
7685	&driver_attr_add_host.attr,
7686	&driver_attr_per_host_store.attr,
7687	&driver_attr_vpd_use_hostno.attr,
7688	&driver_attr_sector_size.attr,
7689	&driver_attr_statistics.attr,
7690	&driver_attr_submit_queues.attr,
7691	&driver_attr_dix.attr,
7692	&driver_attr_dif.attr,
7693	&driver_attr_guard.attr,
7694	&driver_attr_ato.attr,
7695	&driver_attr_map.attr,
7696	&driver_attr_random.attr,
7697	&driver_attr_removable.attr,
7698	&driver_attr_host_lock.attr,
7699	&driver_attr_ndelay.attr,
7700	&driver_attr_strict.attr,
7701	&driver_attr_uuid_ctl.attr,
7702	&driver_attr_cdb_len.attr,
7703	&driver_attr_tur_ms_to_ready.attr,
7704	&driver_attr_zbc.attr,
7705	&driver_attr_group_number_stats.attr,
7706	NULL,
7707};
7708ATTRIBUTE_GROUPS(sdebug_drv);
7709
7710static struct device *pseudo_primary;
7711
7712static int __init scsi_debug_init(void)
7713{
7714	bool want_store = (sdebug_fake_rw == 0);
7715	unsigned long sz;
7716	int k, ret, hosts_to_add;
7717	int idx = -1;
 
 
 
7718
7719	if (sdebug_ndelay >= 1000 * 1000 * 1000) {
7720		pr_warn("ndelay must be less than 1 second, ignored\n");
7721		sdebug_ndelay = 0;
7722	} else if (sdebug_ndelay > 0)
7723		sdebug_jdelay = JDELAY_OVERRIDDEN;
7724
7725	switch (sdebug_sector_size) {
7726	case  512:
7727	case 1024:
7728	case 2048:
7729	case 4096:
7730		break;
7731	default:
7732		pr_err("invalid sector_size %d\n", sdebug_sector_size);
7733		return -EINVAL;
7734	}
7735
7736	switch (sdebug_dif) {
7737	case T10_PI_TYPE0_PROTECTION:
7738		break;
7739	case T10_PI_TYPE1_PROTECTION:
7740	case T10_PI_TYPE2_PROTECTION:
7741	case T10_PI_TYPE3_PROTECTION:
7742		have_dif_prot = true;
7743		break;
7744
7745	default:
7746		pr_err("dif must be 0, 1, 2 or 3\n");
7747		return -EINVAL;
7748	}
7749
7750	if (sdebug_num_tgts < 0) {
7751		pr_err("num_tgts must be >= 0\n");
7752		return -EINVAL;
7753	}
7754
7755	if (sdebug_guard > 1) {
7756		pr_err("guard must be 0 or 1\n");
7757		return -EINVAL;
7758	}
7759
7760	if (sdebug_ato > 1) {
7761		pr_err("ato must be 0 or 1\n");
7762		return -EINVAL;
7763	}
7764
7765	if (sdebug_physblk_exp > 15) {
7766		pr_err("invalid physblk_exp %u\n", sdebug_physblk_exp);
7767		return -EINVAL;
7768	}
7769
7770	sdebug_lun_am = sdebug_lun_am_i;
7771	if (sdebug_lun_am > SAM_LUN_AM_FLAT) {
7772		pr_warn("Invalid LUN format %u, using default\n", (int)sdebug_lun_am);
7773		sdebug_lun_am = SAM_LUN_AM_PERIPHERAL;
7774	}
7775
7776	if (sdebug_max_luns > 256) {
7777		if (sdebug_max_luns > 16384) {
7778			pr_warn("max_luns can be no more than 16384, use default\n");
7779			sdebug_max_luns = DEF_MAX_LUNS;
7780		}
7781		sdebug_lun_am = SAM_LUN_AM_FLAT;
7782	}
7783
7784	if (sdebug_lowest_aligned > 0x3fff) {
7785		pr_err("lowest_aligned too big: %u\n", sdebug_lowest_aligned);
7786		return -EINVAL;
7787	}
7788
7789	if (submit_queues < 1) {
7790		pr_err("submit_queues must be 1 or more\n");
7791		return -EINVAL;
7792	}
 
 
 
 
 
 
7793
7794	if ((sdebug_max_queue > SDEBUG_CANQUEUE) || (sdebug_max_queue < 1)) {
7795		pr_err("max_queue must be in range [1, %d]\n", SDEBUG_CANQUEUE);
7796		return -EINVAL;
7797	}
7798
7799	if ((sdebug_host_max_queue > SDEBUG_CANQUEUE) ||
7800	    (sdebug_host_max_queue < 0)) {
7801		pr_err("host_max_queue must be in range [0 %d]\n",
7802		       SDEBUG_CANQUEUE);
7803		return -EINVAL;
7804	}
7805
7806	if (sdebug_host_max_queue &&
7807	    (sdebug_max_queue != sdebug_host_max_queue)) {
7808		sdebug_max_queue = sdebug_host_max_queue;
7809		pr_warn("fixing max submit queue depth to host max queue depth, %d\n",
7810			sdebug_max_queue);
7811	}
7812
7813	/*
7814	 * check for host managed zoned block device specified with
7815	 * ptype=0x14 or zbc=XXX.
7816	 */
7817	if (sdebug_ptype == TYPE_ZBC) {
7818		sdeb_zbc_model = BLK_ZONED_HM;
7819	} else if (sdeb_zbc_model_s && *sdeb_zbc_model_s) {
7820		k = sdeb_zbc_model_str(sdeb_zbc_model_s);
7821		if (k < 0)
7822			return k;
7823		sdeb_zbc_model = k;
7824		switch (sdeb_zbc_model) {
7825		case BLK_ZONED_NONE:
7826		case BLK_ZONED_HA:
7827			sdebug_ptype = TYPE_DISK;
7828			break;
7829		case BLK_ZONED_HM:
7830			sdebug_ptype = TYPE_ZBC;
7831			break;
7832		default:
7833			pr_err("Invalid ZBC model\n");
7834			return -EINVAL;
7835		}
7836	}
7837	if (sdeb_zbc_model != BLK_ZONED_NONE) {
7838		sdeb_zbc_in_use = true;
7839		if (sdebug_dev_size_mb == DEF_DEV_SIZE_PRE_INIT)
7840			sdebug_dev_size_mb = DEF_ZBC_DEV_SIZE_MB;
7841	}
7842
7843	if (sdebug_dev_size_mb == DEF_DEV_SIZE_PRE_INIT)
7844		sdebug_dev_size_mb = DEF_DEV_SIZE_MB;
7845	if (sdebug_dev_size_mb < 1)
7846		sdebug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
7847	sz = (unsigned long)sdebug_dev_size_mb * 1048576;
7848	sdebug_store_sectors = sz / sdebug_sector_size;
7849	sdebug_capacity = get_sdebug_capacity();
7850
7851	/* play around with geometry, don't waste too much on track 0 */
7852	sdebug_heads = 8;
7853	sdebug_sectors_per = 32;
7854	if (sdebug_dev_size_mb >= 256)
7855		sdebug_heads = 64;
7856	else if (sdebug_dev_size_mb >= 16)
7857		sdebug_heads = 32;
7858	sdebug_cylinders_per = (unsigned long)sdebug_capacity /
7859			       (sdebug_sectors_per * sdebug_heads);
7860	if (sdebug_cylinders_per >= 1024) {
7861		/* other LLDs do this; implies >= 1GB ram disk ... */
7862		sdebug_heads = 255;
7863		sdebug_sectors_per = 63;
7864		sdebug_cylinders_per = (unsigned long)sdebug_capacity /
7865			       (sdebug_sectors_per * sdebug_heads);
7866	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7867	if (scsi_debug_lbp()) {
7868		sdebug_unmap_max_blocks =
7869			clamp(sdebug_unmap_max_blocks, 0U, 0xffffffffU);
7870
7871		sdebug_unmap_max_desc =
7872			clamp(sdebug_unmap_max_desc, 0U, 256U);
7873
7874		sdebug_unmap_granularity =
7875			clamp(sdebug_unmap_granularity, 1U, 0xffffffffU);
7876
7877		if (sdebug_unmap_alignment &&
7878		    sdebug_unmap_granularity <=
7879		    sdebug_unmap_alignment) {
7880			pr_err("ERR: unmap_granularity <= unmap_alignment\n");
7881			return -EINVAL;
 
7882		}
7883	}
7884
7885	xa_init_flags(per_store_ap, XA_FLAGS_ALLOC | XA_FLAGS_LOCK_IRQ);
7886	if (want_store) {
7887		idx = sdebug_add_store();
7888		if (idx < 0)
7889			return idx;
 
 
 
 
 
 
 
 
 
 
 
7890	}
7891
7892	pseudo_primary = root_device_register("pseudo_0");
7893	if (IS_ERR(pseudo_primary)) {
7894		pr_warn("root_device_register() error\n");
7895		ret = PTR_ERR(pseudo_primary);
7896		goto free_vm;
7897	}
7898	ret = bus_register(&pseudo_lld_bus);
7899	if (ret < 0) {
7900		pr_warn("bus_register error: %d\n", ret);
7901		goto dev_unreg;
7902	}
7903	ret = driver_register(&sdebug_driverfs_driver);
7904	if (ret < 0) {
7905		pr_warn("driver_register error: %d\n", ret);
7906		goto bus_unreg;
7907	}
7908
7909	hosts_to_add = sdebug_add_host;
7910	sdebug_add_host = 0;
7911
7912	queued_cmd_cache = KMEM_CACHE(sdebug_queued_cmd, SLAB_HWCACHE_ALIGN);
7913	if (!queued_cmd_cache) {
7914		ret = -ENOMEM;
7915		goto driver_unreg;
7916	}
7917
7918	sdebug_debugfs_root = debugfs_create_dir("scsi_debug", NULL);
7919	if (IS_ERR_OR_NULL(sdebug_debugfs_root))
7920		pr_info("%s: failed to create initial debugfs directory\n", __func__);
7921
7922	for (k = 0; k < hosts_to_add; k++) {
7923		if (want_store && k == 0) {
7924			ret = sdebug_add_host_helper(idx);
7925			if (ret < 0) {
7926				pr_err("add_host_helper k=%d, error=%d\n",
7927				       k, -ret);
7928				break;
7929			}
7930		} else {
7931			ret = sdebug_do_add_host(want_store &&
7932						 sdebug_per_host_store);
7933			if (ret < 0) {
7934				pr_err("add_host k=%d error=%d\n", k, -ret);
7935				break;
7936			}
7937		}
7938	}
7939	if (sdebug_verbose)
7940		pr_info("built %d host(s)\n", sdebug_num_hosts);
7941
7942	return 0;
7943
7944driver_unreg:
7945	driver_unregister(&sdebug_driverfs_driver);
7946bus_unreg:
7947	bus_unregister(&pseudo_lld_bus);
7948dev_unreg:
7949	root_device_unregister(pseudo_primary);
7950free_vm:
7951	sdebug_erase_store(idx, NULL);
 
 
 
 
7952	return ret;
7953}
7954
7955static void __exit scsi_debug_exit(void)
7956{
7957	int k = sdebug_num_hosts;
7958
 
 
7959	for (; k; k--)
7960		sdebug_do_remove_host(true);
7961	kmem_cache_destroy(queued_cmd_cache);
7962	driver_unregister(&sdebug_driverfs_driver);
7963	bus_unregister(&pseudo_lld_bus);
7964	root_device_unregister(pseudo_primary);
7965
7966	sdebug_erase_all_stores(false);
7967	xa_destroy(per_store_ap);
7968	debugfs_remove(sdebug_debugfs_root);
 
7969}
7970
7971device_initcall(scsi_debug_init);
7972module_exit(scsi_debug_exit);
7973
7974static void sdebug_release_adapter(struct device *dev)
7975{
7976	struct sdebug_host_info *sdbg_host;
7977
7978	sdbg_host = dev_to_sdebug_host(dev);
7979	kfree(sdbg_host);
7980}
7981
7982/* idx must be valid, if sip is NULL then it will be obtained using idx */
7983static void sdebug_erase_store(int idx, struct sdeb_store_info *sip)
7984{
7985	if (idx < 0)
7986		return;
7987	if (!sip) {
7988		if (xa_empty(per_store_ap))
7989			return;
7990		sip = xa_load(per_store_ap, idx);
7991		if (!sip)
7992			return;
7993	}
7994	vfree(sip->map_storep);
7995	vfree(sip->dif_storep);
7996	vfree(sip->storep);
7997	xa_erase(per_store_ap, idx);
7998	kfree(sip);
7999}
8000
8001/* Assume apart_from_first==false only in shutdown case. */
8002static void sdebug_erase_all_stores(bool apart_from_first)
8003{
8004	unsigned long idx;
8005	struct sdeb_store_info *sip = NULL;
8006
8007	xa_for_each(per_store_ap, idx, sip) {
8008		if (apart_from_first)
8009			apart_from_first = false;
8010		else
8011			sdebug_erase_store(idx, sip);
8012	}
8013	if (apart_from_first)
8014		sdeb_most_recent_idx = sdeb_first_idx;
8015}
8016
8017/*
8018 * Returns store xarray new element index (idx) if >=0 else negated errno.
8019 * Limit the number of stores to 65536.
8020 */
8021static int sdebug_add_store(void)
8022{
8023	int res;
8024	u32 n_idx;
8025	unsigned long iflags;
8026	unsigned long sz = (unsigned long)sdebug_dev_size_mb * 1048576;
8027	struct sdeb_store_info *sip = NULL;
8028	struct xa_limit xal = { .max = 1 << 16, .min = 0 };
8029
8030	sip = kzalloc(sizeof(*sip), GFP_KERNEL);
8031	if (!sip)
8032		return -ENOMEM;
8033
8034	xa_lock_irqsave(per_store_ap, iflags);
8035	res = __xa_alloc(per_store_ap, &n_idx, sip, xal, GFP_ATOMIC);
8036	if (unlikely(res < 0)) {
8037		xa_unlock_irqrestore(per_store_ap, iflags);
8038		kfree(sip);
8039		pr_warn("%s: xa_alloc() errno=%d\n", __func__, -res);
8040		return res;
8041	}
8042	sdeb_most_recent_idx = n_idx;
8043	if (sdeb_first_idx < 0)
8044		sdeb_first_idx = n_idx;
8045	xa_unlock_irqrestore(per_store_ap, iflags);
8046
8047	res = -ENOMEM;
8048	sip->storep = vzalloc(sz);
8049	if (!sip->storep) {
8050		pr_err("user data oom\n");
8051		goto err;
8052	}
8053	if (sdebug_num_parts > 0)
8054		sdebug_build_parts(sip->storep, sz);
8055
8056	/* DIF/DIX: what T10 calls Protection Information (PI) */
8057	if (sdebug_dix) {
8058		int dif_size;
8059
8060		dif_size = sdebug_store_sectors * sizeof(struct t10_pi_tuple);
8061		sip->dif_storep = vmalloc(dif_size);
8062
8063		pr_info("dif_storep %u bytes @ %pK\n", dif_size,
8064			sip->dif_storep);
8065
8066		if (!sip->dif_storep) {
8067			pr_err("DIX oom\n");
8068			goto err;
8069		}
8070		memset(sip->dif_storep, 0xff, dif_size);
8071	}
8072	/* Logical Block Provisioning */
8073	if (scsi_debug_lbp()) {
8074		map_size = lba_to_map_index(sdebug_store_sectors - 1) + 1;
8075		sip->map_storep = vmalloc(array_size(sizeof(long),
8076						     BITS_TO_LONGS(map_size)));
8077
8078		pr_info("%lu provisioning blocks\n", map_size);
8079
8080		if (!sip->map_storep) {
8081			pr_err("LBP map oom\n");
8082			goto err;
8083		}
8084
8085		bitmap_zero(sip->map_storep, map_size);
8086
8087		/* Map first 1KB for partition table */
8088		if (sdebug_num_parts)
8089			map_region(sip, 0, 2);
8090	}
8091
8092	rwlock_init(&sip->macc_data_lck);
8093	rwlock_init(&sip->macc_meta_lck);
8094	rwlock_init(&sip->macc_sector_lck);
8095	return (int)n_idx;
8096err:
8097	sdebug_erase_store((int)n_idx, sip);
8098	pr_warn("%s: failed, errno=%d\n", __func__, -res);
8099	return res;
8100}
8101
8102static int sdebug_add_host_helper(int per_host_idx)
8103{
8104	int k, devs_per_host, idx;
8105	int error = -ENOMEM;
8106	struct sdebug_host_info *sdbg_host;
8107	struct sdebug_dev_info *sdbg_devinfo, *tmp;
8108
8109	sdbg_host = kzalloc(sizeof(*sdbg_host), GFP_KERNEL);
8110	if (!sdbg_host)
8111		return -ENOMEM;
8112	idx = (per_host_idx < 0) ? sdeb_first_idx : per_host_idx;
8113	if (xa_get_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE))
8114		xa_clear_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE);
8115	sdbg_host->si_idx = idx;
8116
8117	INIT_LIST_HEAD(&sdbg_host->dev_info_list);
8118
8119	devs_per_host = sdebug_num_tgts * sdebug_max_luns;
8120	for (k = 0; k < devs_per_host; k++) {
8121		sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
8122		if (!sdbg_devinfo)
 
 
8123			goto clean;
8124	}
 
8125
8126	mutex_lock(&sdebug_host_list_mutex);
8127	list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
8128	mutex_unlock(&sdebug_host_list_mutex);
8129
8130	sdbg_host->dev.bus = &pseudo_lld_bus;
8131	sdbg_host->dev.parent = pseudo_primary;
8132	sdbg_host->dev.release = &sdebug_release_adapter;
8133	dev_set_name(&sdbg_host->dev, "adapter%d", sdebug_num_hosts);
8134
8135	error = device_register(&sdbg_host->dev);
8136	if (error) {
8137		mutex_lock(&sdebug_host_list_mutex);
8138		list_del(&sdbg_host->host_list);
8139		mutex_unlock(&sdebug_host_list_mutex);
8140		goto clean;
8141	}
8142
8143	++sdebug_num_hosts;
8144	return 0;
8145
8146clean:
8147	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
8148				 dev_list) {
8149		list_del(&sdbg_devinfo->dev_list);
8150		kfree(sdbg_devinfo->zstate);
8151		kfree(sdbg_devinfo);
8152	}
8153	if (sdbg_host->dev.release)
8154		put_device(&sdbg_host->dev);
8155	else
8156		kfree(sdbg_host);
8157	pr_warn("%s: failed, errno=%d\n", __func__, -error);
8158	return error;
8159}
8160
8161static int sdebug_do_add_host(bool mk_new_store)
8162{
8163	int ph_idx = sdeb_most_recent_idx;
8164
8165	if (mk_new_store) {
8166		ph_idx = sdebug_add_store();
8167		if (ph_idx < 0)
8168			return ph_idx;
8169	}
8170	return sdebug_add_host_helper(ph_idx);
8171}
8172
8173static void sdebug_do_remove_host(bool the_end)
8174{
8175	int idx = -1;
8176	struct sdebug_host_info *sdbg_host = NULL;
8177	struct sdebug_host_info *sdbg_host2;
8178
8179	mutex_lock(&sdebug_host_list_mutex);
8180	if (!list_empty(&sdebug_host_list)) {
8181		sdbg_host = list_entry(sdebug_host_list.prev,
8182				       struct sdebug_host_info, host_list);
8183		idx = sdbg_host->si_idx;
8184	}
8185	if (!the_end && idx >= 0) {
8186		bool unique = true;
8187
8188		list_for_each_entry(sdbg_host2, &sdebug_host_list, host_list) {
8189			if (sdbg_host2 == sdbg_host)
8190				continue;
8191			if (idx == sdbg_host2->si_idx) {
8192				unique = false;
8193				break;
8194			}
8195		}
8196		if (unique) {
8197			xa_set_mark(per_store_ap, idx, SDEB_XA_NOT_IN_USE);
8198			if (idx == sdeb_most_recent_idx)
8199				--sdeb_most_recent_idx;
8200		}
8201	}
8202	if (sdbg_host)
8203		list_del(&sdbg_host->host_list);
8204	mutex_unlock(&sdebug_host_list_mutex);
 
8205
8206	if (!sdbg_host)
8207		return;
8208
8209	device_unregister(&sdbg_host->dev);
8210	--sdebug_num_hosts;
8211}
8212
8213static int sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
8214{
8215	struct sdebug_dev_info *devip = sdev->hostdata;
8216
8217	if (!devip)
8218		return	-ENODEV;
8219
8220	mutex_lock(&sdebug_host_list_mutex);
8221	block_unblock_all_queues(true);
8222
8223	if (qdepth > SDEBUG_CANQUEUE) {
8224		qdepth = SDEBUG_CANQUEUE;
8225		pr_warn("%s: requested qdepth [%d] exceeds canqueue [%d], trim\n", __func__,
8226			qdepth, SDEBUG_CANQUEUE);
8227	}
 
 
8228	if (qdepth < 1)
8229		qdepth = 1;
8230	if (qdepth != sdev->queue_depth)
8231		scsi_change_queue_depth(sdev, qdepth);
8232
 
 
 
 
 
 
8233	block_unblock_all_queues(false);
8234	mutex_unlock(&sdebug_host_list_mutex);
8235
8236	if (SDEBUG_OPT_Q_NOISE & sdebug_opts)
8237		sdev_printk(KERN_INFO, sdev, "%s: qdepth=%d\n", __func__, qdepth);
8238
8239	return sdev->queue_depth;
8240}
8241
8242static bool fake_timeout(struct scsi_cmnd *scp)
8243{
8244	if (0 == (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth))) {
8245		if (sdebug_every_nth < -1)
8246			sdebug_every_nth = -1;
8247		if (SDEBUG_OPT_TIMEOUT & sdebug_opts)
8248			return true; /* ignore command causing timeout */
8249		else if (SDEBUG_OPT_MAC_TIMEOUT & sdebug_opts &&
8250			 scsi_medium_access_command(scp))
8251			return true; /* time out reads and writes */
8252	}
8253	return false;
8254}
8255
8256/* Response to TUR or media access command when device stopped */
8257static int resp_not_ready(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
8258{
8259	int stopped_state;
8260	u64 diff_ns = 0;
8261	ktime_t now_ts = ktime_get_boottime();
8262	struct scsi_device *sdp = scp->device;
8263
8264	stopped_state = atomic_read(&devip->stopped);
8265	if (stopped_state == 2) {
8266		if (ktime_to_ns(now_ts) > ktime_to_ns(devip->create_ts)) {
8267			diff_ns = ktime_to_ns(ktime_sub(now_ts, devip->create_ts));
8268			if (diff_ns >= ((u64)sdeb_tur_ms_to_ready * 1000000)) {
8269				/* tur_ms_to_ready timer extinguished */
8270				atomic_set(&devip->stopped, 0);
8271				return 0;
8272			}
8273		}
8274		mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x1);
8275		if (sdebug_verbose)
8276			sdev_printk(KERN_INFO, sdp,
8277				    "%s: Not ready: in process of becoming ready\n", my_name);
8278		if (scp->cmnd[0] == TEST_UNIT_READY) {
8279			u64 tur_nanosecs_to_ready = (u64)sdeb_tur_ms_to_ready * 1000000;
8280
8281			if (diff_ns <= tur_nanosecs_to_ready)
8282				diff_ns = tur_nanosecs_to_ready - diff_ns;
8283			else
8284				diff_ns = tur_nanosecs_to_ready;
8285			/* As per 20-061r2 approved for spc6 by T10 on 20200716 */
8286			do_div(diff_ns, 1000000);	/* diff_ns becomes milliseconds */
8287			scsi_set_sense_information(scp->sense_buffer, SCSI_SENSE_BUFFERSIZE,
8288						   diff_ns);
8289			return check_condition_result;
8290		}
8291	}
8292	mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
8293	if (sdebug_verbose)
8294		sdev_printk(KERN_INFO, sdp, "%s: Not ready: initializing command required\n",
8295			    my_name);
8296	return check_condition_result;
8297}
8298
8299static void sdebug_map_queues(struct Scsi_Host *shost)
8300{
8301	int i, qoff;
8302
8303	if (shost->nr_hw_queues == 1)
8304		return;
8305
8306	for (i = 0, qoff = 0; i < HCTX_MAX_TYPES; i++) {
8307		struct blk_mq_queue_map *map = &shost->tag_set.map[i];
8308
8309		map->nr_queues  = 0;
8310
8311		if (i == HCTX_TYPE_DEFAULT)
8312			map->nr_queues = submit_queues - poll_queues;
8313		else if (i == HCTX_TYPE_POLL)
8314			map->nr_queues = poll_queues;
8315
8316		if (!map->nr_queues) {
8317			BUG_ON(i == HCTX_TYPE_DEFAULT);
8318			continue;
8319		}
8320
8321		map->queue_offset = qoff;
8322		blk_mq_map_queues(map);
8323
8324		qoff += map->nr_queues;
8325	}
8326}
8327
8328struct sdebug_blk_mq_poll_data {
8329	unsigned int queue_num;
8330	int *num_entries;
8331};
8332
8333/*
8334 * We don't handle aborted commands here, but it does not seem possible to have
8335 * aborted polled commands from schedule_resp()
8336 */
8337static bool sdebug_blk_mq_poll_iter(struct request *rq, void *opaque)
8338{
8339	struct sdebug_blk_mq_poll_data *data = opaque;
8340	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
8341	struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmd);
8342	struct sdebug_defer *sd_dp;
8343	u32 unique_tag = blk_mq_unique_tag(rq);
8344	u16 hwq = blk_mq_unique_tag_to_hwq(unique_tag);
8345	struct sdebug_queued_cmd *sqcp;
8346	unsigned long flags;
8347	int queue_num = data->queue_num;
8348	ktime_t time;
8349
8350	/* We're only interested in one queue for this iteration */
8351	if (hwq != queue_num)
8352		return true;
8353
8354	/* Subsequent checks would fail if this failed, but check anyway */
8355	if (!test_bit(SCMD_STATE_INFLIGHT, &cmd->state))
8356		return true;
8357
8358	time = ktime_get_boottime();
8359
8360	spin_lock_irqsave(&sdsc->lock, flags);
8361	sqcp = TO_QUEUED_CMD(cmd);
8362	if (!sqcp) {
8363		spin_unlock_irqrestore(&sdsc->lock, flags);
8364		return true;
8365	}
8366
8367	sd_dp = &sqcp->sd_dp;
8368	if (READ_ONCE(sd_dp->defer_t) != SDEB_DEFER_POLL) {
8369		spin_unlock_irqrestore(&sdsc->lock, flags);
8370		return true;
8371	}
8372
8373	if (time < sd_dp->cmpl_ts) {
8374		spin_unlock_irqrestore(&sdsc->lock, flags);
8375		return true;
8376	}
8377
8378	ASSIGN_QUEUED_CMD(cmd, NULL);
8379	spin_unlock_irqrestore(&sdsc->lock, flags);
8380
8381	if (sdebug_statistics) {
8382		atomic_inc(&sdebug_completions);
8383		if (raw_smp_processor_id() != sd_dp->issuing_cpu)
8384			atomic_inc(&sdebug_miss_cpus);
8385	}
8386
8387	sdebug_free_queued_cmd(sqcp);
8388
8389	scsi_done(cmd); /* callback to mid level */
8390	(*data->num_entries)++;
8391	return true;
8392}
8393
8394static int sdebug_blk_mq_poll(struct Scsi_Host *shost, unsigned int queue_num)
8395{
8396	int num_entries = 0;
8397	struct sdebug_blk_mq_poll_data data = {
8398		.queue_num = queue_num,
8399		.num_entries = &num_entries,
8400	};
8401
8402	blk_mq_tagset_busy_iter(&shost->tag_set, sdebug_blk_mq_poll_iter,
8403				&data);
8404
8405	if (num_entries > 0)
8406		atomic_add(num_entries, &sdeb_mq_poll_count);
8407	return num_entries;
8408}
8409
8410static int sdebug_timeout_cmd(struct scsi_cmnd *cmnd)
8411{
8412	struct scsi_device *sdp = cmnd->device;
8413	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
8414	struct sdebug_err_inject *err;
8415	unsigned char *cmd = cmnd->cmnd;
8416	int ret = 0;
8417
8418	if (devip == NULL)
8419		return 0;
8420
8421	rcu_read_lock();
8422	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
8423		if (err->type == ERR_TMOUT_CMD &&
8424		    (err->cmd == cmd[0] || err->cmd == 0xff)) {
8425			ret = !!err->cnt;
8426			if (err->cnt < 0)
8427				err->cnt++;
8428
8429			rcu_read_unlock();
8430			return ret;
8431		}
8432	}
8433	rcu_read_unlock();
8434
8435	return 0;
8436}
8437
8438static int sdebug_fail_queue_cmd(struct scsi_cmnd *cmnd)
8439{
8440	struct scsi_device *sdp = cmnd->device;
8441	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
8442	struct sdebug_err_inject *err;
8443	unsigned char *cmd = cmnd->cmnd;
8444	int ret = 0;
8445
8446	if (devip == NULL)
8447		return 0;
8448
8449	rcu_read_lock();
8450	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
8451		if (err->type == ERR_FAIL_QUEUE_CMD &&
8452		    (err->cmd == cmd[0] || err->cmd == 0xff)) {
8453			ret = err->cnt ? err->queuecmd_ret : 0;
8454			if (err->cnt < 0)
8455				err->cnt++;
8456
8457			rcu_read_unlock();
8458			return ret;
8459		}
8460	}
8461	rcu_read_unlock();
8462
8463	return 0;
8464}
8465
8466static int sdebug_fail_cmd(struct scsi_cmnd *cmnd, int *retval,
8467			   struct sdebug_err_inject *info)
8468{
8469	struct scsi_device *sdp = cmnd->device;
8470	struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;
8471	struct sdebug_err_inject *err;
8472	unsigned char *cmd = cmnd->cmnd;
8473	int ret = 0;
8474	int result;
8475
8476	if (devip == NULL)
8477		return 0;
8478
8479	rcu_read_lock();
8480	list_for_each_entry_rcu(err, &devip->inject_err_list, list) {
8481		if (err->type == ERR_FAIL_CMD &&
8482		    (err->cmd == cmd[0] || err->cmd == 0xff)) {
8483			if (!err->cnt) {
8484				rcu_read_unlock();
8485				return 0;
8486			}
8487
8488			ret = !!err->cnt;
8489			rcu_read_unlock();
8490			goto out_handle;
8491		}
8492	}
8493	rcu_read_unlock();
8494
8495	return 0;
8496
8497out_handle:
8498	if (err->cnt < 0)
8499		err->cnt++;
8500	mk_sense_buffer(cmnd, err->sense_key, err->asc, err->asq);
8501	result = err->status_byte | err->host_byte << 16 | err->driver_byte << 24;
8502	*info = *err;
8503	*retval = schedule_resp(cmnd, devip, result, NULL, 0, 0);
8504
8505	return ret;
8506}
8507
8508static int scsi_debug_queuecommand(struct Scsi_Host *shost,
8509				   struct scsi_cmnd *scp)
8510{
8511	u8 sdeb_i;
8512	struct scsi_device *sdp = scp->device;
8513	const struct opcode_info_t *oip;
8514	const struct opcode_info_t *r_oip;
8515	struct sdebug_dev_info *devip;
8516	u8 *cmd = scp->cmnd;
8517	int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
8518	int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *) = NULL;
8519	int k, na;
8520	int errsts = 0;
8521	u64 lun_index = sdp->lun & 0x3FFF;
8522	u32 flags;
8523	u16 sa;
8524	u8 opcode = cmd[0];
8525	bool has_wlun_rl;
8526	bool inject_now;
8527	int ret = 0;
8528	struct sdebug_err_inject err;
8529
8530	scsi_set_resid(scp, 0);
8531	if (sdebug_statistics) {
8532		atomic_inc(&sdebug_cmnd_count);
8533		inject_now = inject_on_this_cmd();
8534	} else {
8535		inject_now = false;
8536	}
8537	if (unlikely(sdebug_verbose &&
8538		     !(SDEBUG_OPT_NO_CDB_NOISE & sdebug_opts))) {
8539		char b[120];
8540		int n, len, sb;
8541
8542		len = scp->cmd_len;
8543		sb = (int)sizeof(b);
8544		if (len > 32)
8545			strcpy(b, "too long, over 32 bytes");
8546		else {
8547			for (k = 0, n = 0; k < len && n < sb; ++k)
8548				n += scnprintf(b + n, sb - n, "%02x ",
8549					       (u32)cmd[k]);
8550		}
8551		sdev_printk(KERN_INFO, sdp, "%s: tag=%#x, cmd %s\n", my_name,
8552			    blk_mq_unique_tag(scsi_cmd_to_rq(scp)), b);
 
 
 
 
 
8553	}
8554	if (unlikely(inject_now && (sdebug_opts & SDEBUG_OPT_HOST_BUSY)))
8555		return SCSI_MLQUEUE_HOST_BUSY;
8556	has_wlun_rl = (sdp->lun == SCSI_W_LUN_REPORT_LUNS);
8557	if (unlikely(lun_index >= sdebug_max_luns && !has_wlun_rl))
8558		goto err_out;
8559
8560	sdeb_i = opcode_ind_arr[opcode];	/* fully mapped */
8561	oip = &opcode_info_arr[sdeb_i];		/* safe if table consistent */
8562	devip = (struct sdebug_dev_info *)sdp->hostdata;
8563	if (unlikely(!devip)) {
8564		devip = find_build_dev_info(sdp);
8565		if (NULL == devip)
8566			goto err_out;
8567	}
8568
8569	if (sdebug_timeout_cmd(scp)) {
8570		scmd_printk(KERN_INFO, scp, "timeout command 0x%x\n", opcode);
8571		return 0;
8572	}
8573
8574	ret = sdebug_fail_queue_cmd(scp);
8575	if (ret) {
8576		scmd_printk(KERN_INFO, scp, "fail queue command 0x%x with 0x%x\n",
8577				opcode, ret);
8578		return ret;
8579	}
8580
8581	if (sdebug_fail_cmd(scp, &ret, &err)) {
8582		scmd_printk(KERN_INFO, scp,
8583			"fail command 0x%x with hostbyte=0x%x, "
8584			"driverbyte=0x%x, statusbyte=0x%x, "
8585			"sense_key=0x%x, asc=0x%x, asq=0x%x\n",
8586			opcode, err.host_byte, err.driver_byte,
8587			err.status_byte, err.sense_key, err.asc, err.asq);
8588		return ret;
8589	}
8590
8591	if (unlikely(inject_now && !atomic_read(&sdeb_inject_pending)))
8592		atomic_set(&sdeb_inject_pending, 1);
8593
8594	na = oip->num_attached;
8595	r_pfp = oip->pfp;
8596	if (na) {	/* multiple commands with this opcode */
8597		r_oip = oip;
8598		if (FF_SA & r_oip->flags) {
8599			if (F_SA_LOW & oip->flags)
8600				sa = 0x1f & cmd[1];
8601			else
8602				sa = get_unaligned_be16(cmd + 8);
8603			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
8604				if (opcode == oip->opcode && sa == oip->sa)
8605					break;
8606			}
8607		} else {   /* since no service action only check opcode */
8608			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
8609				if (opcode == oip->opcode)
8610					break;
8611			}
8612		}
8613		if (k > na) {
8614			if (F_SA_LOW & r_oip->flags)
8615				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 4);
8616			else if (F_SA_HIGH & r_oip->flags)
8617				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 8, 7);
8618			else
8619				mk_sense_invalid_opcode(scp);
8620			goto check_cond;
8621		}
8622	}	/* else (when na==0) we assume the oip is a match */
8623	flags = oip->flags;
8624	if (unlikely(F_INV_OP & flags)) {
8625		mk_sense_invalid_opcode(scp);
8626		goto check_cond;
8627	}
8628	if (unlikely(has_wlun_rl && !(F_RL_WLUN_OK & flags))) {
8629		if (sdebug_verbose)
8630			sdev_printk(KERN_INFO, sdp, "%s: Opcode 0x%x not%s\n",
8631				    my_name, opcode, " supported for wlun");
8632		mk_sense_invalid_opcode(scp);
8633		goto check_cond;
8634	}
8635	if (unlikely(sdebug_strict)) {	/* check cdb against mask */
8636		u8 rem;
8637		int j;
8638
8639		for (k = 1; k < oip->len_mask[0] && k < 16; ++k) {
8640			rem = ~oip->len_mask[k] & cmd[k];
8641			if (rem) {
8642				for (j = 7; j >= 0; --j, rem <<= 1) {
8643					if (0x80 & rem)
8644						break;
8645				}
8646				mk_sense_invalid_fld(scp, SDEB_IN_CDB, k, j);
8647				goto check_cond;
8648			}
8649		}
8650	}
8651	if (unlikely(!(F_SKIP_UA & flags) &&
8652		     find_first_bit(devip->uas_bm,
8653				    SDEBUG_NUM_UAS) != SDEBUG_NUM_UAS)) {
8654		errsts = make_ua(scp, devip);
8655		if (errsts)
8656			goto check_cond;
8657	}
8658	if (unlikely(((F_M_ACCESS & flags) || scp->cmnd[0] == TEST_UNIT_READY) &&
8659		     atomic_read(&devip->stopped))) {
8660		errsts = resp_not_ready(scp, devip);
8661		if (errsts)
8662			goto fini;
 
 
 
8663	}
8664	if (sdebug_fake_rw && (F_FAKE_RW & flags))
8665		goto fini;
8666	if (unlikely(sdebug_every_nth)) {
8667		if (fake_timeout(scp))
8668			return 0;	/* ignore command: make trouble */
8669	}
8670	if (likely(oip->pfp))
8671		pfp = oip->pfp;	/* calls a resp_* function */
8672	else
8673		pfp = r_pfp;    /* if leaf function ptr NULL, try the root's */
8674
8675fini:
8676	if (F_DELAY_OVERR & flags)	/* cmds like INQUIRY respond asap */
8677		return schedule_resp(scp, devip, errsts, pfp, 0, 0);
8678	else if ((flags & F_LONG_DELAY) && (sdebug_jdelay > 0 ||
8679					    sdebug_ndelay > 10000)) {
8680		/*
8681		 * Skip long delays if ndelay <= 10 microseconds. Otherwise
8682		 * for Start Stop Unit (SSU) want at least 1 second delay and
8683		 * if sdebug_jdelay>1 want a long delay of that many seconds.
8684		 * For Synchronize Cache want 1/20 of SSU's delay.
8685		 */
8686		int jdelay = (sdebug_jdelay < 2) ? 1 : sdebug_jdelay;
8687		int denom = (flags & F_SYNC_DELAY) ? 20 : 1;
8688
8689		jdelay = mult_frac(USER_HZ * jdelay, HZ, denom * USER_HZ);
8690		return schedule_resp(scp, devip, errsts, pfp, jdelay, 0);
8691	} else
8692		return schedule_resp(scp, devip, errsts, pfp, sdebug_jdelay,
8693				     sdebug_ndelay);
8694check_cond:
8695	return schedule_resp(scp, devip, check_condition_result, NULL, 0, 0);
8696err_out:
8697	return schedule_resp(scp, NULL, DID_NO_CONNECT << 16, NULL, 0, 0);
8698}
8699
8700static int sdebug_init_cmd_priv(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
8701{
8702	struct sdebug_scsi_cmd *sdsc = scsi_cmd_priv(cmd);
8703
8704	spin_lock_init(&sdsc->lock);
8705
8706	return 0;
8707}
8708
8709static struct scsi_host_template sdebug_driver_template = {
8710	.show_info =		scsi_debug_show_info,
8711	.write_info =		scsi_debug_write_info,
8712	.proc_name =		sdebug_proc_name,
8713	.name =			"SCSI DEBUG",
8714	.info =			scsi_debug_info,
8715	.slave_alloc =		scsi_debug_slave_alloc,
8716	.slave_configure =	scsi_debug_slave_configure,
8717	.slave_destroy =	scsi_debug_slave_destroy,
8718	.ioctl =		scsi_debug_ioctl,
8719	.queuecommand =		scsi_debug_queuecommand,
8720	.change_queue_depth =	sdebug_change_qdepth,
8721	.map_queues =		sdebug_map_queues,
8722	.mq_poll =		sdebug_blk_mq_poll,
8723	.eh_abort_handler =	scsi_debug_abort,
8724	.eh_device_reset_handler = scsi_debug_device_reset,
8725	.eh_target_reset_handler = scsi_debug_target_reset,
8726	.eh_bus_reset_handler = scsi_debug_bus_reset,
8727	.eh_host_reset_handler = scsi_debug_host_reset,
8728	.can_queue =		SDEBUG_CANQUEUE,
8729	.this_id =		7,
8730	.sg_tablesize =		SG_MAX_SEGMENTS,
8731	.cmd_per_lun =		DEF_CMD_PER_LUN,
8732	.max_sectors =		-1U,
8733	.max_segment_size =	-1U,
8734	.module =		THIS_MODULE,
8735	.track_queue_depth =	1,
8736	.cmd_size = sizeof(struct sdebug_scsi_cmd),
8737	.init_cmd_priv = sdebug_init_cmd_priv,
8738	.target_alloc =		sdebug_target_alloc,
8739	.target_destroy =	sdebug_target_destroy,
8740};
8741
8742static int sdebug_driver_probe(struct device *dev)
8743{
8744	int error = 0;
8745	struct sdebug_host_info *sdbg_host;
8746	struct Scsi_Host *hpnt;
8747	int hprot;
8748
8749	sdbg_host = dev_to_sdebug_host(dev);
8750
8751	sdebug_driver_template.can_queue = sdebug_max_queue;
8752	sdebug_driver_template.cmd_per_lun = sdebug_max_queue;
8753	if (!sdebug_clustering)
8754		sdebug_driver_template.dma_boundary = PAGE_SIZE - 1;
8755
8756	hpnt = scsi_host_alloc(&sdebug_driver_template, 0);
8757	if (NULL == hpnt) {
8758		pr_err("scsi_host_alloc failed\n");
8759		error = -ENODEV;
8760		return error;
8761	}
8762	if (submit_queues > nr_cpu_ids) {
8763		pr_warn("%s: trim submit_queues (was %d) to nr_cpu_ids=%u\n",
8764			my_name, submit_queues, nr_cpu_ids);
8765		submit_queues = nr_cpu_ids;
8766	}
8767	/*
8768	 * Decide whether to tell scsi subsystem that we want mq. The
8769	 * following should give the same answer for each host.
8770	 */
8771	hpnt->nr_hw_queues = submit_queues;
8772	if (sdebug_host_max_queue)
8773		hpnt->host_tagset = 1;
8774
8775	/* poll queues are possible for nr_hw_queues > 1 */
8776	if (hpnt->nr_hw_queues == 1 || (poll_queues < 1)) {
8777		pr_warn("%s: trim poll_queues to 0. poll_q/nr_hw = (%d/%d)\n",
8778			 my_name, poll_queues, hpnt->nr_hw_queues);
8779		poll_queues = 0;
8780	}
8781
8782	/*
8783	 * Poll queues don't need interrupts, but we need at least one I/O queue
8784	 * left over for non-polled I/O.
8785	 * If condition not met, trim poll_queues to 1 (just for simplicity).
8786	 */
8787	if (poll_queues >= submit_queues) {
8788		if (submit_queues < 3)
8789			pr_warn("%s: trim poll_queues to 1\n", my_name);
8790		else
8791			pr_warn("%s: trim poll_queues to 1. Perhaps try poll_queues=%d\n",
8792				my_name, submit_queues - 1);
8793		poll_queues = 1;
8794	}
8795	if (poll_queues)
8796		hpnt->nr_maps = 3;
8797
8798	sdbg_host->shost = hpnt;
8799	if ((hpnt->this_id >= 0) && (sdebug_num_tgts > hpnt->this_id))
8800		hpnt->max_id = sdebug_num_tgts + 1;
8801	else
8802		hpnt->max_id = sdebug_num_tgts;
8803	/* = sdebug_max_luns; */
8804	hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
8805
8806	hprot = 0;
8807
8808	switch (sdebug_dif) {
8809
8810	case T10_PI_TYPE1_PROTECTION:
8811		hprot = SHOST_DIF_TYPE1_PROTECTION;
8812		if (sdebug_dix)
8813			hprot |= SHOST_DIX_TYPE1_PROTECTION;
8814		break;
8815
8816	case T10_PI_TYPE2_PROTECTION:
8817		hprot = SHOST_DIF_TYPE2_PROTECTION;
8818		if (sdebug_dix)
8819			hprot |= SHOST_DIX_TYPE2_PROTECTION;
8820		break;
8821
8822	case T10_PI_TYPE3_PROTECTION:
8823		hprot = SHOST_DIF_TYPE3_PROTECTION;
8824		if (sdebug_dix)
8825			hprot |= SHOST_DIX_TYPE3_PROTECTION;
8826		break;
8827
8828	default:
8829		if (sdebug_dix)
8830			hprot |= SHOST_DIX_TYPE0_PROTECTION;
8831		break;
8832	}
8833
8834	scsi_host_set_prot(hpnt, hprot);
8835
8836	if (have_dif_prot || sdebug_dix)
8837		pr_info("host protection%s%s%s%s%s%s%s\n",
8838			(hprot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
8839			(hprot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
8840			(hprot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
8841			(hprot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
8842			(hprot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
8843			(hprot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
8844			(hprot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
8845
8846	if (sdebug_guard == 1)
8847		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
8848	else
8849		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
8850
8851	sdebug_verbose = !!(SDEBUG_OPT_NOISE & sdebug_opts);
8852	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & sdebug_opts);
8853	if (sdebug_every_nth)	/* need stats counters for every_nth */
8854		sdebug_statistics = true;
8855	error = scsi_add_host(hpnt, &sdbg_host->dev);
8856	if (error) {
8857		pr_err("scsi_add_host failed\n");
8858		error = -ENODEV;
8859		scsi_host_put(hpnt);
8860	} else {
8861		scsi_scan_host(hpnt);
8862	}
8863
8864	return error;
8865}
8866
8867static void sdebug_driver_remove(struct device *dev)
8868{
8869	struct sdebug_host_info *sdbg_host;
8870	struct sdebug_dev_info *sdbg_devinfo, *tmp;
8871
8872	sdbg_host = dev_to_sdebug_host(dev);
 
 
 
 
 
8873
8874	scsi_remove_host(sdbg_host->shost);
8875
8876	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
8877				 dev_list) {
8878		list_del(&sdbg_devinfo->dev_list);
8879		kfree(sdbg_devinfo->zstate);
8880		kfree(sdbg_devinfo);
8881	}
8882
8883	scsi_host_put(sdbg_host->shost);
 
 
 
 
 
 
 
8884}
8885
8886static const struct bus_type pseudo_lld_bus = {
8887	.name = "pseudo",
 
8888	.probe = sdebug_driver_probe,
8889	.remove = sdebug_driver_remove,
8890	.drv_groups = sdebug_drv_groups,
8891};
v4.10.11
 
   1/*
   2 * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
   3 *  Copyright (C) 1992  Eric Youngdale
   4 *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
   5 *  to make sure that we are not getting blocks mixed up, and PANIC if
   6 *  anything out of the ordinary is seen.
   7 * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8 *
   9 * Copyright (C) 2001 - 2016 Douglas Gilbert
  10 *
  11 * This program is free software; you can redistribute it and/or modify
  12 * it under the terms of the GNU General Public License as published by
  13 * the Free Software Foundation; either version 2, or (at your option)
  14 * any later version.
  15 *
  16 *  For documentation see http://sg.danny.cz/sg/sdebug26.html
  17 *
 
  18 */
  19
  20
  21#define pr_fmt(fmt) KBUILD_MODNAME ":%s: " fmt, __func__
  22
  23#include <linux/module.h>
  24
  25#include <linux/kernel.h>
  26#include <linux/errno.h>
  27#include <linux/jiffies.h>
  28#include <linux/slab.h>
  29#include <linux/types.h>
  30#include <linux/string.h>
  31#include <linux/genhd.h>
  32#include <linux/fs.h>
  33#include <linux/init.h>
  34#include <linux/proc_fs.h>
  35#include <linux/vmalloc.h>
  36#include <linux/moduleparam.h>
  37#include <linux/scatterlist.h>
  38#include <linux/blkdev.h>
  39#include <linux/crc-t10dif.h>
  40#include <linux/spinlock.h>
  41#include <linux/interrupt.h>
  42#include <linux/atomic.h>
  43#include <linux/hrtimer.h>
  44#include <linux/uuid.h>
  45#include <linux/t10-pi.h>
 
 
 
 
 
 
 
  46
  47#include <net/checksum.h>
  48
  49#include <asm/unaligned.h>
  50
  51#include <scsi/scsi.h>
  52#include <scsi/scsi_cmnd.h>
  53#include <scsi/scsi_device.h>
  54#include <scsi/scsi_host.h>
  55#include <scsi/scsicam.h>
  56#include <scsi/scsi_eh.h>
  57#include <scsi/scsi_tcq.h>
  58#include <scsi/scsi_dbg.h>
  59
  60#include "sd.h"
  61#include "scsi_logging.h"
  62
  63/* make sure inq_product_rev string corresponds to this version */
  64#define SDEBUG_VERSION "1.86"
  65static const char *sdebug_version_date = "20160430";
  66
  67#define MY_NAME "scsi_debug"
  68
  69/* Additional Sense Code (ASC) */
  70#define NO_ADDITIONAL_SENSE 0x0
 
 
  71#define LOGICAL_UNIT_NOT_READY 0x4
  72#define LOGICAL_UNIT_COMMUNICATION_FAILURE 0x8
  73#define UNRECOVERED_READ_ERR 0x11
  74#define PARAMETER_LIST_LENGTH_ERR 0x1a
  75#define INVALID_OPCODE 0x20
  76#define LBA_OUT_OF_RANGE 0x21
  77#define INVALID_FIELD_IN_CDB 0x24
  78#define INVALID_FIELD_IN_PARAM_LIST 0x26
 
  79#define UA_RESET_ASC 0x29
  80#define UA_CHANGED_ASC 0x2a
  81#define TARGET_CHANGED_ASC 0x3f
  82#define LUNS_CHANGED_ASCQ 0x0e
  83#define INSUFF_RES_ASC 0x55
  84#define INSUFF_RES_ASCQ 0x3
  85#define POWER_ON_RESET_ASCQ 0x0
 
  86#define BUS_RESET_ASCQ 0x2	/* scsi bus reset occurred */
  87#define MODE_CHANGED_ASCQ 0x1	/* mode parameters changed */
  88#define CAPACITY_CHANGED_ASCQ 0x9
  89#define SAVING_PARAMS_UNSUP 0x39
  90#define TRANSPORT_PROBLEM 0x4b
  91#define THRESHOLD_EXCEEDED 0x5d
  92#define LOW_POWER_COND_ON 0x5e
  93#define MISCOMPARE_VERIFY_ASC 0x1d
  94#define MICROCODE_CHANGED_ASCQ 0x1	/* with TARGET_CHANGED_ASC */
  95#define MICROCODE_CHANGED_WO_RESET_ASCQ 0x16
 
 
 
 
 
 
 
 
  96
  97/* Additional Sense Code Qualifier (ASCQ) */
  98#define ACK_NAK_TO 0x3
  99
 100/* Default values for driver parameters */
 101#define DEF_NUM_HOST   1
 102#define DEF_NUM_TGTS   1
 103#define DEF_MAX_LUNS   1
 104/* With these defaults, this driver will make 1 host with 1 target
 105 * (id 0) containing 1 logical unit (lun 0). That is 1 device.
 106 */
 107#define DEF_ATO 1
 
 108#define DEF_JDELAY   1		/* if > 0 unit is a jiffy */
 
 109#define DEF_DEV_SIZE_MB   8
 
 110#define DEF_DIF 0
 111#define DEF_DIX 0
 
 112#define DEF_D_SENSE   0
 113#define DEF_EVERY_NTH   0
 114#define DEF_FAKE_RW	0
 115#define DEF_GUARD 0
 116#define DEF_HOST_LOCK 0
 117#define DEF_LBPU 0
 118#define DEF_LBPWS 0
 119#define DEF_LBPWS10 0
 120#define DEF_LBPRZ 1
 121#define DEF_LOWEST_ALIGNED 0
 122#define DEF_NDELAY   0		/* if > 0 unit is a nanosecond */
 123#define DEF_NO_LUN_0   0
 124#define DEF_NUM_PARTS   0
 125#define DEF_OPTS   0
 126#define DEF_OPT_BLKS 1024
 127#define DEF_PHYSBLK_EXP 0
 
 128#define DEF_PTYPE   TYPE_DISK
 
 129#define DEF_REMOVABLE false
 130#define DEF_SCSI_LEVEL   7    /* INQUIRY, byte2 [6->SPC-4; 7->SPC-5] */
 131#define DEF_SECTOR_SIZE 512
 132#define DEF_UNMAP_ALIGNMENT 0
 133#define DEF_UNMAP_GRANULARITY 1
 134#define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
 135#define DEF_UNMAP_MAX_DESC 256
 136#define DEF_VIRTUAL_GB   0
 137#define DEF_VPD_USE_HOSTNO 1
 138#define DEF_WRITESAME_LENGTH 0xFFFF
 
 
 
 
 
 
 139#define DEF_STRICT 0
 140#define DEF_STATISTICS false
 141#define DEF_SUBMIT_QUEUES 1
 
 142#define DEF_UUID_CTL 0
 143#define JDELAY_OVERRIDDEN -9999
 144
 
 
 
 
 
 145#define SDEBUG_LUN_0_VAL 0
 146
 147/* bit mask values for sdebug_opts */
 148#define SDEBUG_OPT_NOISE		1
 149#define SDEBUG_OPT_MEDIUM_ERR		2
 150#define SDEBUG_OPT_TIMEOUT		4
 151#define SDEBUG_OPT_RECOVERED_ERR	8
 152#define SDEBUG_OPT_TRANSPORT_ERR	16
 153#define SDEBUG_OPT_DIF_ERR		32
 154#define SDEBUG_OPT_DIX_ERR		64
 155#define SDEBUG_OPT_MAC_TIMEOUT		128
 156#define SDEBUG_OPT_SHORT_TRANSFER	0x100
 157#define SDEBUG_OPT_Q_NOISE		0x200
 158#define SDEBUG_OPT_ALL_TSF		0x400
 159#define SDEBUG_OPT_RARE_TSF		0x800
 160#define SDEBUG_OPT_N_WCE		0x1000
 161#define SDEBUG_OPT_RESET_NOISE		0x2000
 162#define SDEBUG_OPT_NO_CDB_NOISE		0x4000
 
 
 163#define SDEBUG_OPT_ALL_NOISE (SDEBUG_OPT_NOISE | SDEBUG_OPT_Q_NOISE | \
 164			      SDEBUG_OPT_RESET_NOISE)
 165#define SDEBUG_OPT_ALL_INJECTING (SDEBUG_OPT_RECOVERED_ERR | \
 166				  SDEBUG_OPT_TRANSPORT_ERR | \
 167				  SDEBUG_OPT_DIF_ERR | SDEBUG_OPT_DIX_ERR | \
 168				  SDEBUG_OPT_SHORT_TRANSFER)
 169/* When "every_nth" > 0 then modulo "every_nth" commands:
 170 *   - a missing response is simulated if SDEBUG_OPT_TIMEOUT is set
 171 *   - a RECOVERED_ERROR is simulated on successful read and write
 172 *     commands if SDEBUG_OPT_RECOVERED_ERR is set.
 173 *   - a TRANSPORT_ERROR is simulated on successful read and write
 174 *     commands if SDEBUG_OPT_TRANSPORT_ERR is set.
 175 *
 176 * When "every_nth" < 0 then after "- every_nth" commands:
 177 *   - a missing response is simulated if SDEBUG_OPT_TIMEOUT is set
 178 *   - a RECOVERED_ERROR is simulated on successful read and write
 179 *     commands if SDEBUG_OPT_RECOVERED_ERR is set.
 180 *   - a TRANSPORT_ERROR is simulated on successful read and write
 181 *     commands if _DEBUG_OPT_TRANSPORT_ERR is set.
 182 * This will continue on every subsequent command until some other action
 183 * occurs (e.g. the user * writing a new value (other than -1 or 1) to
 184 * every_nth via sysfs).
 185 */
 186
 187/* As indicated in SAM-5 and SPC-4 Unit Attentions (UAs) are returned in
 188 * priority order. In the subset implemented here lower numbers have higher
 189 * priority. The UA numbers should be a sequence starting from 0 with
 190 * SDEBUG_NUM_UAS being 1 higher than the highest numbered UA. */
 191#define SDEBUG_UA_POR 0		/* Power on, reset, or bus device reset */
 192#define SDEBUG_UA_BUS_RESET 1
 193#define SDEBUG_UA_MODE_CHANGED 2
 194#define SDEBUG_UA_CAPACITY_CHANGED 3
 195#define SDEBUG_UA_LUNS_CHANGED 4
 196#define SDEBUG_UA_MICROCODE_CHANGED 5	/* simulate firmware change */
 197#define SDEBUG_UA_MICROCODE_CHANGED_WO_RESET 6
 198#define SDEBUG_NUM_UAS 7
 
 199
 200/* when 1==SDEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
 201 * sector on read commands: */
 202#define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
 203#define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
 204
 205/* If REPORT LUNS has luns >= 256 it can choose "flat space" (value 1)
 206 * or "peripheral device" addressing (value 0) */
 207#define SAM2_LUN_ADDRESS_METHOD 0
 208
 209/* SDEBUG_CANQUEUE is the maximum number of commands that can be queued
 210 * (for response) per submit queue at one time. Can be reduced by max_queue
 211 * option. Command responses are not queued when jdelay=0 and ndelay=0. The
 212 * per-device DEF_CMD_PER_LUN can be changed via sysfs:
 213 * /sys/class/scsi_device/<h:c:t:l>/device/queue_depth
 214 * but cannot exceed SDEBUG_CANQUEUE .
 215 */
 216#define SDEBUG_CANQUEUE_WORDS  3	/* a WORD is bits in a long */
 217#define SDEBUG_CANQUEUE  (SDEBUG_CANQUEUE_WORDS * BITS_PER_LONG)
 218#define DEF_CMD_PER_LUN  255
 219
 220#define F_D_IN			1
 221#define F_D_OUT			2
 
 222#define F_D_OUT_MAYBE		4	/* WRITE SAME, NDOB bit */
 223#define F_D_UNKN		8
 224#define F_RL_WLUN_OK		0x10
 225#define F_SKIP_UA		0x20
 226#define F_DELAY_OVERR		0x40
 227#define F_SA_LOW		0x80	/* cdb byte 1, bits 4 to 0 */
 228#define F_SA_HIGH		0x100	/* as used by variable length cdbs */
 229#define F_INV_OP		0x200
 230#define F_FAKE_RW		0x400
 231#define F_M_ACCESS		0x800	/* media access */
 
 
 232
 
 233#define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
 234#define FF_DIRECT_IO (F_M_ACCESS | F_FAKE_RW)
 235#define FF_SA (F_SA_HIGH | F_SA_LOW)
 
 236
 237#define SDEBUG_MAX_PARTS 4
 238
 239#define SDEBUG_MAX_CMD_LEN 32
 240
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 241
 242struct sdebug_dev_info {
 243	struct list_head dev_list;
 244	unsigned int channel;
 245	unsigned int target;
 246	u64 lun;
 247	uuid_be lu_name;
 248	struct sdebug_host_info *sdbg_host;
 249	unsigned long uas_bm[1];
 250	atomic_t num_in_q;
 251	atomic_t stopped;
 252	bool used;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 253};
 254
 255struct sdebug_host_info {
 256	struct list_head host_list;
 
 257	struct Scsi_Host *shost;
 258	struct device dev;
 259	struct list_head dev_info_list;
 260};
 261
 262#define to_sdebug_host(d)	\
 
 
 
 
 
 
 
 
 
 
 263	container_of(d, struct sdebug_host_info, dev)
 264
 
 
 
 
 
 
 265struct sdebug_defer {
 266	struct hrtimer hrt;
 267	struct execute_work ew;
 268	int sqa_idx;	/* index of sdebug_queue array */
 269	int qc_idx;	/* index of sdebug_queued_cmd array within sqa_idx */
 270	int issuing_cpu;
 
 
 
 
 
 
 
 
 
 271};
 272
 273struct sdebug_queued_cmd {
 274	/* corresponding bit set in in_use_bm[] in owning struct sdebug_queue
 275	 * instance indicates this slot is in use.
 276	 */
 277	struct sdebug_defer *sd_dp;
 278	struct scsi_cmnd *a_cmnd;
 279	unsigned int inj_recovered:1;
 280	unsigned int inj_transport:1;
 281	unsigned int inj_dif:1;
 282	unsigned int inj_dix:1;
 283	unsigned int inj_short:1;
 284};
 285
 286struct sdebug_queue {
 287	struct sdebug_queued_cmd qc_arr[SDEBUG_CANQUEUE];
 288	unsigned long in_use_bm[SDEBUG_CANQUEUE_WORDS];
 289	spinlock_t qc_lock;
 290	atomic_t blocked;	/* to temporarily stop more being queued */
 291};
 292
 293static atomic_t sdebug_cmnd_count;   /* number of incoming commands */
 294static atomic_t sdebug_completions;  /* count of deferred completions */
 295static atomic_t sdebug_miss_cpus;    /* submission + completion cpus differ */
 296static atomic_t sdebug_a_tsf;	     /* 'almost task set full' counter */
 
 
 297
 298struct opcode_info_t {
 299	u8 num_attached;	/* 0 if this is it (i.e. a leaf); use 0xff */
 300				/* for terminating element */
 301	u8 opcode;		/* if num_attached > 0, preferred */
 302	u16 sa;			/* service action */
 303	u32 flags;		/* OR-ed set of SDEB_F_* */
 304	int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
 305	const struct opcode_info_t *arrp;  /* num_attached elements or NULL */
 306	u8 len_mask[16];	/* len=len_mask[0], then mask for cdb[1]... */
 307				/* ignore cdb bytes after position 15 */
 308};
 309
 310/* SCSI opcodes (first byte of cdb) of interest mapped onto these indexes */
 311enum sdeb_opcode_index {
 312	SDEB_I_INVALID_OPCODE =	0,
 313	SDEB_I_INQUIRY = 1,
 314	SDEB_I_REPORT_LUNS = 2,
 315	SDEB_I_REQUEST_SENSE = 3,
 316	SDEB_I_TEST_UNIT_READY = 4,
 317	SDEB_I_MODE_SENSE = 5,		/* 6, 10 */
 318	SDEB_I_MODE_SELECT = 6,		/* 6, 10 */
 319	SDEB_I_LOG_SENSE = 7,
 320	SDEB_I_READ_CAPACITY = 8,	/* 10; 16 is in SA_IN(16) */
 321	SDEB_I_READ = 9,		/* 6, 10, 12, 16 */
 322	SDEB_I_WRITE = 10,		/* 6, 10, 12, 16 */
 323	SDEB_I_START_STOP = 11,
 324	SDEB_I_SERV_ACT_IN = 12,	/* 12, 16 */
 325	SDEB_I_SERV_ACT_OUT = 13,	/* 12, 16 */
 326	SDEB_I_MAINT_IN = 14,
 327	SDEB_I_MAINT_OUT = 15,
 328	SDEB_I_VERIFY = 16,		/* 10 only */
 329	SDEB_I_VARIABLE_LEN = 17,
 330	SDEB_I_RESERVE = 18,		/* 6, 10 */
 331	SDEB_I_RELEASE = 19,		/* 6, 10 */
 332	SDEB_I_ALLOW_REMOVAL = 20,	/* PREVENT ALLOW MEDIUM REMOVAL */
 333	SDEB_I_REZERO_UNIT = 21,	/* REWIND in SSC */
 334	SDEB_I_ATA_PT = 22,		/* 12, 16 */
 335	SDEB_I_SEND_DIAG = 23,
 336	SDEB_I_UNMAP = 24,
 337	SDEB_I_XDWRITEREAD = 25,	/* 10 only */
 338	SDEB_I_WRITE_BUFFER = 26,
 339	SDEB_I_WRITE_SAME = 27,		/* 10, 16 */
 340	SDEB_I_SYNC_CACHE = 28,		/* 10 only */
 341	SDEB_I_COMP_WRITE = 29,
 342	SDEB_I_LAST_ELEMENT = 30,	/* keep this last */
 
 
 
 343};
 344
 345
 346static const unsigned char opcode_ind_arr[256] = {
 347/* 0x0; 0x0->0x1f: 6 byte cdbs */
 348	SDEB_I_TEST_UNIT_READY, SDEB_I_REZERO_UNIT, 0, SDEB_I_REQUEST_SENSE,
 349	    0, 0, 0, 0,
 350	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, 0,
 351	0, 0, SDEB_I_INQUIRY, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
 352	    SDEB_I_RELEASE,
 353	0, 0, SDEB_I_MODE_SENSE, SDEB_I_START_STOP, 0, SDEB_I_SEND_DIAG,
 354	    SDEB_I_ALLOW_REMOVAL, 0,
 355/* 0x20; 0x20->0x3f: 10 byte cdbs */
 356	0, 0, 0, 0, 0, SDEB_I_READ_CAPACITY, 0, 0,
 357	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, SDEB_I_VERIFY,
 358	0, 0, 0, 0, 0, SDEB_I_SYNC_CACHE, 0, 0,
 359	0, 0, 0, SDEB_I_WRITE_BUFFER, 0, 0, 0, 0,
 360/* 0x40; 0x40->0x5f: 10 byte cdbs */
 361	0, SDEB_I_WRITE_SAME, SDEB_I_UNMAP, 0, 0, 0, 0, 0,
 362	0, 0, 0, 0, 0, SDEB_I_LOG_SENSE, 0, 0,
 363	0, 0, 0, SDEB_I_XDWRITEREAD, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
 364	    SDEB_I_RELEASE,
 365	0, 0, SDEB_I_MODE_SENSE, 0, 0, 0, 0, 0,
 366/* 0x60; 0x60->0x7d are reserved, 0x7e is "extended cdb" */
 367	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 368	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 369	0, SDEB_I_VARIABLE_LEN,
 370/* 0x80; 0x80->0x9f: 16 byte cdbs */
 371	0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
 372	SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0, 0, 0, 0, 0,
 373	0, 0, 0, SDEB_I_WRITE_SAME, 0, 0, 0, 0,
 374	0, 0, 0, 0, 0, 0, SDEB_I_SERV_ACT_IN, SDEB_I_SERV_ACT_OUT,
 
 
 
 375/* 0xa0; 0xa0->0xbf: 12 byte cdbs */
 376	SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
 377	     SDEB_I_MAINT_OUT, 0, 0, 0,
 378	SDEB_I_READ, SDEB_I_SERV_ACT_OUT, SDEB_I_WRITE, SDEB_I_SERV_ACT_IN,
 379	     0, 0, 0, 0,
 380	0, 0, 0, 0, 0, 0, 0, 0,
 381	0, 0, 0, 0, 0, 0, 0, 0,
 382/* 0xc0; 0xc0->0xff: vendor specific */
 383	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 384	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 385	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 386	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 387};
 388
 
 
 
 
 
 
 
 
 389static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
 390static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
 391static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
 392static int resp_mode_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
 393static int resp_mode_select(struct scsi_cmnd *, struct sdebug_dev_info *);
 394static int resp_log_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
 395static int resp_readcap(struct scsi_cmnd *, struct sdebug_dev_info *);
 396static int resp_read_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
 397static int resp_write_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
 
 398static int resp_start_stop(struct scsi_cmnd *, struct sdebug_dev_info *);
 399static int resp_readcap16(struct scsi_cmnd *, struct sdebug_dev_info *);
 400static int resp_get_lba_status(struct scsi_cmnd *, struct sdebug_dev_info *);
 
 
 401static int resp_report_tgtpgs(struct scsi_cmnd *, struct sdebug_dev_info *);
 402static int resp_unmap(struct scsi_cmnd *, struct sdebug_dev_info *);
 403static int resp_rsup_opcodes(struct scsi_cmnd *, struct sdebug_dev_info *);
 404static int resp_rsup_tmfs(struct scsi_cmnd *, struct sdebug_dev_info *);
 
 405static int resp_write_same_10(struct scsi_cmnd *, struct sdebug_dev_info *);
 406static int resp_write_same_16(struct scsi_cmnd *, struct sdebug_dev_info *);
 407static int resp_xdwriteread_10(struct scsi_cmnd *, struct sdebug_dev_info *);
 408static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
 409static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 410
 411static const struct opcode_info_t msense_iarr[1] = {
 
 
 
 
 
 412	{0, 0x1a, 0, F_D_IN, NULL, NULL,
 413	    {6,  0xe8, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 414};
 415
 416static const struct opcode_info_t mselect_iarr[1] = {
 417	{0, 0x15, 0, F_D_OUT, NULL, NULL,
 418	    {6,  0xf1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 419};
 420
 421static const struct opcode_info_t read_iarr[3] = {
 422	{0, 0x28, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(10) */
 423	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
 424	     0, 0, 0, 0} },
 425	{0, 0x8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL, /* READ(6) */
 426	    {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 427	{0, 0xa8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(12) */
 428	    {12,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
 429	     0xc7, 0, 0, 0, 0} },
 430};
 431
 432static const struct opcode_info_t write_iarr[3] = {
 433	{0, 0x2a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,   /* 10 */
 434	    {10,  0xfb, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
 435	     0, 0, 0, 0} },
 436	{0, 0xa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,    /* 6 */
 437	    {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 438	{0, 0xaa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,   /* 12 */
 439	    {12,  0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
 440	     0xc7, 0, 0, 0, 0} },
 
 
 
 
 
 
 
 441};
 442
 443static const struct opcode_info_t sa_in_iarr[1] = {
 444	{0, 0x9e, 0x12, F_SA_LOW | F_D_IN, resp_get_lba_status, NULL,
 445	    {16,  0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 446	     0xff, 0xff, 0xff, 0, 0xc7} },
 
 
 
 447};
 448
 449static const struct opcode_info_t vl_iarr[1] = {	/* VARIABLE LENGTH */
 450	{0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_DIRECT_IO, resp_write_dt0,
 451	    NULL, {32,  0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0xb, 0xfa,
 452		   0, 0xff, 0xff, 0xff, 0xff} },	/* WRITE(32) */
 
 
 
 453};
 454
 455static const struct opcode_info_t maint_in_iarr[2] = {
 456	{0, 0xa3, 0xc, F_SA_LOW | F_D_IN, resp_rsup_opcodes, NULL,
 457	    {12,  0xc, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
 458	     0xc7, 0, 0, 0, 0} },
 459	{0, 0xa3, 0xd, F_SA_LOW | F_D_IN, resp_rsup_tmfs, NULL,
 460	    {12,  0xd, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
 461	     0, 0} },
 462};
 463
 464static const struct opcode_info_t write_same_iarr[1] = {
 465	{0, 0x93, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_16, NULL,
 466	    {16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 467	     0xff, 0xff, 0xff, 0x1f, 0xc7} },
 468};
 469
 470static const struct opcode_info_t reserve_iarr[1] = {
 471	{0, 0x16, 0, F_D_OUT, NULL, NULL,	/* RESERVE(6) */
 472	    {6,  0x1f, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 473};
 474
 475static const struct opcode_info_t release_iarr[1] = {
 476	{0, 0x17, 0, F_D_OUT, NULL, NULL,	/* RELEASE(6) */
 477	    {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 478};
 479
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 480
 481/* This array is accessed via SDEB_I_* values. Make sure all are mapped,
 482 * plus the terminating elements for logic that scans this table such as
 483 * REPORT SUPPORTED OPERATION CODES. */
 484static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEMENT + 1] = {
 485/* 0 */
 486	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL,
 487	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 488	{0, 0x12, 0, FF_RESPOND | F_D_IN, resp_inquiry, NULL,
 489	    {6,  0xe3, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 490	{0, 0xa0, 0, FF_RESPOND | F_D_IN, resp_report_luns, NULL,
 491	    {12,  0xe3, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
 492	     0, 0} },
 493	{0, 0x3, 0, FF_RESPOND | F_D_IN, resp_requests, NULL,
 494	    {6,  0xe1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 495	{0, 0x0, 0, F_M_ACCESS | F_RL_WLUN_OK, NULL, NULL,/* TEST UNIT READY */
 496	    {6,  0, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 497	{1, 0x5a, 0, F_D_IN, resp_mode_sense, msense_iarr,
 498	    {10,  0xf8, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 499	     0} },
 500	{1, 0x55, 0, F_D_OUT, resp_mode_select, mselect_iarr,
 501	    {10,  0xf1, 0, 0, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 502	{0, 0x4d, 0, F_D_IN, resp_log_sense, NULL,
 
 
 503	    {10,  0xe3, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0,
 504	     0, 0, 0} },
 505	{0, 0x25, 0, F_D_IN, resp_readcap, NULL,
 506	    {10,  0xe1, 0xff, 0xff, 0xff, 0xff, 0, 0, 0x1, 0xc7, 0, 0, 0, 0,
 507	     0, 0} },
 508	{3, 0x88, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, read_iarr,
 509	    {16,  0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 510	     0xff, 0xff, 0xff, 0x9f, 0xc7} },		/* READ(16) */
 511/* 10 */
 512	{3, 0x8a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, write_iarr,
 513	    {16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 514	     0xff, 0xff, 0xff, 0x9f, 0xc7} },		/* WRITE(16) */
 515	{0, 0x1b, 0, 0, resp_start_stop, NULL,		/* START STOP UNIT */
 
 516	    {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 517	{1, 0x9e, 0x10, F_SA_LOW | F_D_IN, resp_readcap16, sa_in_iarr,
 518	    {16,  0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 519	     0xff, 0xff, 0xff, 0x1, 0xc7} },	/* READ CAPACITY(16) */
 520	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* SA OUT */
 521	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 522	{2, 0xa3, 0xa, F_SA_LOW | F_D_IN, resp_report_tgtpgs, maint_in_iarr,
 523	    {12,  0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0, 0,
 524	     0} },
 
 
 
 
 525	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* MAINT OUT */
 526	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 527	{0, 0x2f, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, NULL, NULL, /* VERIFY(10) */
 528	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7,
 529	     0, 0, 0, 0, 0, 0} },
 530	{1, 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_DIRECT_IO, resp_read_dt0,
 531	    vl_iarr, {32,  0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0x9, 0xfe, 0,
 532		      0xff, 0xff, 0xff, 0xff} },/* VARIABLE LENGTH, READ(32) */
 533	{1, 0x56, 0, F_D_OUT, NULL, reserve_iarr, /* RESERVE(10) */
 
 
 
 534	    {10,  0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 535	     0} },
 536	{1, 0x57, 0, F_D_OUT, NULL, release_iarr, /* RELEASE(10) */
 
 537	    {10,  0x13, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 538	     0} },
 539/* 20 */
 540	{0, 0x1e, 0, 0, NULL, NULL, /* ALLOW REMOVAL */
 541	    {6,  0, 0, 0, 0x3, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 542	{0, 0x1, 0, 0, resp_start_stop, NULL, /* REWIND ?? */
 543	    {6,  0x1, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 544	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ATA_PT */
 545	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 546	{0, 0x1d, F_D_OUT, 0, NULL, NULL,	/* SEND DIAGNOSTIC */
 547	    {6,  0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 548	{0, 0x42, 0, F_D_OUT | FF_DIRECT_IO, resp_unmap, NULL, /* UNMAP */
 549	    {10,  0x1, 0, 0, 0, 0, 0x1f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 550	{0, 0x53, 0, F_D_IN | F_D_OUT | FF_DIRECT_IO, resp_xdwriteread_10,
 551	    NULL, {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7,
 552		   0, 0, 0, 0, 0, 0} },
 553	{0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
 554	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
 555	     0, 0, 0, 0} },			/* WRITE_BUFFER */
 556	{1, 0x41, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_10,
 557	    write_same_iarr, {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff,
 558			      0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 559	{0, 0x35, 0, F_DELAY_OVERR | FF_DIRECT_IO, NULL, NULL, /* SYNC_CACHE */
 560	    {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
 561	     0, 0, 0, 0} },
 562	{0, 0x89, 0, F_D_OUT | FF_DIRECT_IO, resp_comp_write, NULL,
 
 
 563	    {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
 564	     0, 0xff, 0x1f, 0xc7} },		/* COMPARE AND WRITE */
 
 
 
 
 565
 566/* 30 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 567	{0xff, 0, 0, 0, NULL, NULL,		/* terminating element */
 568	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 569};
 570
 571static int sdebug_add_host = DEF_NUM_HOST;
 
 572static int sdebug_ato = DEF_ATO;
 
 573static int sdebug_jdelay = DEF_JDELAY;	/* if > 0 then unit is jiffies */
 574static int sdebug_dev_size_mb = DEF_DEV_SIZE_MB;
 575static int sdebug_dif = DEF_DIF;
 576static int sdebug_dix = DEF_DIX;
 577static int sdebug_dsense = DEF_D_SENSE;
 578static int sdebug_every_nth = DEF_EVERY_NTH;
 579static int sdebug_fake_rw = DEF_FAKE_RW;
 580static unsigned int sdebug_guard = DEF_GUARD;
 
 581static int sdebug_lowest_aligned = DEF_LOWEST_ALIGNED;
 582static int sdebug_max_luns = DEF_MAX_LUNS;
 583static int sdebug_max_queue = SDEBUG_CANQUEUE;	/* per submit queue */
 584static atomic_t retired_max_queue;	/* if > 0 then was prior max_queue */
 
 585static int sdebug_ndelay = DEF_NDELAY;	/* if > 0 then unit is nanoseconds */
 586static int sdebug_no_lun_0 = DEF_NO_LUN_0;
 587static int sdebug_no_uld;
 588static int sdebug_num_parts = DEF_NUM_PARTS;
 589static int sdebug_num_tgts = DEF_NUM_TGTS; /* targets per host */
 590static int sdebug_opt_blks = DEF_OPT_BLKS;
 591static int sdebug_opts = DEF_OPTS;
 592static int sdebug_physblk_exp = DEF_PHYSBLK_EXP;
 
 593static int sdebug_ptype = DEF_PTYPE; /* SCSI peripheral device type */
 594static int sdebug_scsi_level = DEF_SCSI_LEVEL;
 595static int sdebug_sector_size = DEF_SECTOR_SIZE;
 
 596static int sdebug_virtual_gb = DEF_VIRTUAL_GB;
 597static int sdebug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
 598static unsigned int sdebug_lbpu = DEF_LBPU;
 599static unsigned int sdebug_lbpws = DEF_LBPWS;
 600static unsigned int sdebug_lbpws10 = DEF_LBPWS10;
 601static unsigned int sdebug_lbprz = DEF_LBPRZ;
 602static unsigned int sdebug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
 603static unsigned int sdebug_unmap_granularity = DEF_UNMAP_GRANULARITY;
 604static unsigned int sdebug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
 605static unsigned int sdebug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
 606static unsigned int sdebug_write_same_length = DEF_WRITESAME_LENGTH;
 
 
 
 
 
 
 
 607static int sdebug_uuid_ctl = DEF_UUID_CTL;
 
 
 608static bool sdebug_removable = DEF_REMOVABLE;
 609static bool sdebug_clustering;
 610static bool sdebug_host_lock = DEF_HOST_LOCK;
 611static bool sdebug_strict = DEF_STRICT;
 612static bool sdebug_any_injecting_opt;
 
 613static bool sdebug_verbose;
 614static bool have_dif_prot;
 
 615static bool sdebug_statistics = DEF_STATISTICS;
 616static bool sdebug_mq_active;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 617
 618static unsigned int sdebug_store_sectors;
 619static sector_t sdebug_capacity;	/* in sectors */
 620
 621/* old BIOS stuff, kernel may get rid of them but some mode sense pages
 622   may still need them */
 623static int sdebug_heads;		/* heads per disk */
 624static int sdebug_cylinders_per;	/* cylinders per surface */
 625static int sdebug_sectors_per;		/* sectors per cylinder */
 626
 627static LIST_HEAD(sdebug_host_list);
 628static DEFINE_SPINLOCK(sdebug_host_list_lock);
 629
 630static unsigned char *fake_storep;	/* ramdisk storage */
 631static struct t10_pi_tuple *dif_storep;	/* protection info */
 632static void *map_storep;		/* provisioning map */
 
 
 633
 634static unsigned long map_size;
 635static int num_aborts;
 636static int num_dev_resets;
 637static int num_target_resets;
 638static int num_bus_resets;
 639static int num_host_resets;
 640static int dix_writes;
 641static int dix_reads;
 642static int dif_errors;
 643
 
 
 
 
 
 
 
 644static int submit_queues = DEF_SUBMIT_QUEUES;  /* > 1 for multi-queue (mq) */
 645static struct sdebug_queue *sdebug_q_arr;  /* ptr to array of submit queues */
 646
 647static DEFINE_RWLOCK(atomic_rw);
 648
 649static char sdebug_proc_name[] = MY_NAME;
 650static const char *my_name = MY_NAME;
 651
 652static struct bus_type pseudo_lld_bus;
 653
 654static struct device_driver sdebug_driverfs_driver = {
 655	.name 		= sdebug_proc_name,
 656	.bus		= &pseudo_lld_bus,
 657};
 658
 659static const int check_condition_result =
 660		(DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
 661
 662static const int illegal_condition_result =
 663	(DRIVER_SENSE << 24) | (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
 664
 665static const int device_qfull_result =
 666	(DID_OK << 16) | (COMMAND_COMPLETE << 8) | SAM_STAT_TASK_SET_FULL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 667
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 668
 669/* Only do the extra work involved in logical block provisioning if one or
 670 * more of the lbpu, lbpws or lbpws10 parameters are given and we are doing
 671 * real reads and writes (i.e. not skipping them for speed).
 672 */
 673static inline bool scsi_debug_lbp(void)
 674{
 675	return 0 == sdebug_fake_rw &&
 676		(sdebug_lbpu || sdebug_lbpws || sdebug_lbpws10);
 677}
 678
 679static void *fake_store(unsigned long long lba)
 680{
 
 
 
 
 
 
 
 
 681	lba = do_div(lba, sdebug_store_sectors);
 682
 683	return fake_storep + lba * sdebug_sector_size;
 
 
 
 684}
 685
 686static struct t10_pi_tuple *dif_store(sector_t sector)
 
 687{
 688	sector = sector_div(sector, sdebug_store_sectors);
 689
 690	return dif_storep + sector;
 691}
 692
 693static void sdebug_max_tgts_luns(void)
 694{
 695	struct sdebug_host_info *sdbg_host;
 696	struct Scsi_Host *hpnt;
 697
 698	spin_lock(&sdebug_host_list_lock);
 699	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
 700		hpnt = sdbg_host->shost;
 701		if ((hpnt->this_id >= 0) &&
 702		    (sdebug_num_tgts > hpnt->this_id))
 703			hpnt->max_id = sdebug_num_tgts + 1;
 704		else
 705			hpnt->max_id = sdebug_num_tgts;
 706		/* sdebug_max_luns; */
 707		hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
 708	}
 709	spin_unlock(&sdebug_host_list_lock);
 710}
 711
 712enum sdeb_cmd_data {SDEB_IN_DATA = 0, SDEB_IN_CDB = 1};
 713
 714/* Set in_bit to -1 to indicate no bit position of invalid field */
 715static void mk_sense_invalid_fld(struct scsi_cmnd *scp,
 716				 enum sdeb_cmd_data c_d,
 717				 int in_byte, int in_bit)
 718{
 719	unsigned char *sbuff;
 720	u8 sks[4];
 721	int sl, asc;
 722
 723	sbuff = scp->sense_buffer;
 724	if (!sbuff) {
 725		sdev_printk(KERN_ERR, scp->device,
 726			    "%s: sense_buffer is NULL\n", __func__);
 727		return;
 728	}
 729	asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
 730	memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
 731	scsi_build_sense_buffer(sdebug_dsense, sbuff, ILLEGAL_REQUEST, asc, 0);
 732	memset(sks, 0, sizeof(sks));
 733	sks[0] = 0x80;
 734	if (c_d)
 735		sks[0] |= 0x40;
 736	if (in_bit >= 0) {
 737		sks[0] |= 0x8;
 738		sks[0] |= 0x7 & in_bit;
 739	}
 740	put_unaligned_be16(in_byte, sks + 1);
 741	if (sdebug_dsense) {
 742		sl = sbuff[7] + 8;
 743		sbuff[7] = sl;
 744		sbuff[sl] = 0x2;
 745		sbuff[sl + 1] = 0x6;
 746		memcpy(sbuff + sl + 4, sks, 3);
 747	} else
 748		memcpy(sbuff + 15, sks, 3);
 749	if (sdebug_verbose)
 750		sdev_printk(KERN_INFO, scp->device, "%s:  [sense_key,asc,ascq"
 751			    "]: [0x5,0x%x,0x0] %c byte=%d, bit=%d\n",
 752			    my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
 753}
 754
 755static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
 756{
 757	unsigned char *sbuff;
 758
 759	sbuff = scp->sense_buffer;
 760	if (!sbuff) {
 761		sdev_printk(KERN_ERR, scp->device,
 762			    "%s: sense_buffer is NULL\n", __func__);
 763		return;
 764	}
 765	memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
 766
 767	scsi_build_sense_buffer(sdebug_dsense, sbuff, key, asc, asq);
 768
 769	if (sdebug_verbose)
 770		sdev_printk(KERN_INFO, scp->device,
 771			    "%s:  [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
 772			    my_name, key, asc, asq);
 773}
 774
 775static void mk_sense_invalid_opcode(struct scsi_cmnd *scp)
 776{
 777	mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
 778}
 779
 780static int scsi_debug_ioctl(struct scsi_device *dev, int cmd, void __user *arg)
 
 781{
 782	if (sdebug_verbose) {
 783		if (0x1261 == cmd)
 784			sdev_printk(KERN_INFO, dev,
 785				    "%s: BLKFLSBUF [0x1261]\n", __func__);
 786		else if (0x5331 == cmd)
 787			sdev_printk(KERN_INFO, dev,
 788				    "%s: CDROM_GET_CAPABILITY [0x5331]\n",
 789				    __func__);
 790		else
 791			sdev_printk(KERN_INFO, dev, "%s: cmd=0x%x\n",
 792				    __func__, cmd);
 793	}
 794	return -EINVAL;
 795	/* return -ENOTTY; // correct return but upsets fdisk */
 796}
 797
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 798static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
 799{
 800	struct sdebug_host_info *sdhp;
 801	struct sdebug_dev_info *dp;
 802
 803	spin_lock(&sdebug_host_list_lock);
 804	list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
 805		list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
 806			if ((devip->sdbg_host == dp->sdbg_host) &&
 807			    (devip->target == dp->target))
 808				clear_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
 809		}
 810	}
 811	spin_unlock(&sdebug_host_list_lock);
 812}
 813
 814static int make_ua(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
 815{
 816	int k;
 817
 818	k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
 819	if (k != SDEBUG_NUM_UAS) {
 820		const char *cp = NULL;
 821
 822		switch (k) {
 823		case SDEBUG_UA_POR:
 824			mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
 825					POWER_ON_RESET_ASCQ);
 826			if (sdebug_verbose)
 827				cp = "power on reset";
 828			break;
 
 
 
 
 
 
 829		case SDEBUG_UA_BUS_RESET:
 830			mk_sense_buffer(scp, UNIT_ATTENTION, UA_RESET_ASC,
 831					BUS_RESET_ASCQ);
 832			if (sdebug_verbose)
 833				cp = "bus reset";
 834			break;
 835		case SDEBUG_UA_MODE_CHANGED:
 836			mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
 837					MODE_CHANGED_ASCQ);
 838			if (sdebug_verbose)
 839				cp = "mode parameters changed";
 840			break;
 841		case SDEBUG_UA_CAPACITY_CHANGED:
 842			mk_sense_buffer(scp, UNIT_ATTENTION, UA_CHANGED_ASC,
 843					CAPACITY_CHANGED_ASCQ);
 844			if (sdebug_verbose)
 845				cp = "capacity data changed";
 846			break;
 847		case SDEBUG_UA_MICROCODE_CHANGED:
 848			mk_sense_buffer(scp, UNIT_ATTENTION,
 849					TARGET_CHANGED_ASC,
 850					MICROCODE_CHANGED_ASCQ);
 851			if (sdebug_verbose)
 852				cp = "microcode has been changed";
 853			break;
 854		case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
 855			mk_sense_buffer(scp, UNIT_ATTENTION,
 856					TARGET_CHANGED_ASC,
 857					MICROCODE_CHANGED_WO_RESET_ASCQ);
 858			if (sdebug_verbose)
 859				cp = "microcode has been changed without reset";
 860			break;
 861		case SDEBUG_UA_LUNS_CHANGED:
 862			/*
 863			 * SPC-3 behavior is to report a UNIT ATTENTION with
 864			 * ASC/ASCQ REPORTED LUNS DATA HAS CHANGED on every LUN
 865			 * on the target, until a REPORT LUNS command is
 866			 * received.  SPC-4 behavior is to report it only once.
 867			 * NOTE:  sdebug_scsi_level does not use the same
 868			 * values as struct scsi_device->scsi_level.
 869			 */
 870			if (sdebug_scsi_level >= 6)	/* SPC-4 and above */
 871				clear_luns_changed_on_target(devip);
 872			mk_sense_buffer(scp, UNIT_ATTENTION,
 873					TARGET_CHANGED_ASC,
 874					LUNS_CHANGED_ASCQ);
 875			if (sdebug_verbose)
 876				cp = "reported luns data has changed";
 877			break;
 878		default:
 879			pr_warn("unexpected unit attention code=%d\n", k);
 880			if (sdebug_verbose)
 881				cp = "unknown";
 882			break;
 883		}
 884		clear_bit(k, devip->uas_bm);
 885		if (sdebug_verbose)
 886			sdev_printk(KERN_INFO, scp->device,
 887				   "%s reports: Unit attention: %s\n",
 888				   my_name, cp);
 889		return check_condition_result;
 890	}
 891	return 0;
 892}
 893
 894/* Build SCSI "data-in" buffer. Returns 0 if ok else (DID_ERROR << 16). */
 895static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
 896				int arr_len)
 897{
 898	int act_len;
 899	struct scsi_data_buffer *sdb = scsi_in(scp);
 900
 901	if (!sdb->length)
 902		return 0;
 903	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_FROM_DEVICE))
 904		return DID_ERROR << 16;
 905
 906	act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
 907				      arr, arr_len);
 908	sdb->resid = scsi_bufflen(scp) - act_len;
 909
 910	return 0;
 911}
 912
 913/* Partial build of SCSI "data-in" buffer. Returns 0 if ok else
 914 * (DID_ERROR << 16). Can write to offset in data-in buffer. If multiple
 915 * calls, not required to write in ascending offset order. Assumes resid
 916 * set to scsi_bufflen() prior to any calls.
 917 */
 918static int p_fill_from_dev_buffer(struct scsi_cmnd *scp, const void *arr,
 919				  int arr_len, unsigned int off_dst)
 920{
 921	int act_len, n;
 922	struct scsi_data_buffer *sdb = scsi_in(scp);
 923	off_t skip = off_dst;
 924
 925	if (sdb->length <= off_dst)
 926		return 0;
 927	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_FROM_DEVICE))
 928		return DID_ERROR << 16;
 929
 930	act_len = sg_pcopy_from_buffer(sdb->table.sgl, sdb->table.nents,
 931				       arr, arr_len, skip);
 932	pr_debug("%s: off_dst=%u, scsi_bufflen=%u, act_len=%u, resid=%d\n",
 933		 __func__, off_dst, scsi_bufflen(scp), act_len, sdb->resid);
 934	n = (int)scsi_bufflen(scp) - ((int)off_dst + act_len);
 935	sdb->resid = min(sdb->resid, n);
 
 936	return 0;
 937}
 938
 939/* Fetches from SCSI "data-out" buffer. Returns number of bytes fetched into
 940 * 'arr' or -1 if error.
 941 */
 942static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
 943			       int arr_len)
 944{
 945	if (!scsi_bufflen(scp))
 946		return 0;
 947	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_TO_DEVICE))
 948		return -1;
 949
 950	return scsi_sg_copy_to_buffer(scp, arr, arr_len);
 951}
 952
 953
 954static const char * inq_vendor_id = "Linux   ";
 955static const char * inq_product_id = "scsi_debug      ";
 956static const char *inq_product_rev = "0186";	/* version less '.' */
 957/* Use some locally assigned NAAs for SAS addresses. */
 958static const u64 naa3_comp_a = 0x3222222000000000ULL;
 959static const u64 naa3_comp_b = 0x3333333000000000ULL;
 960static const u64 naa3_comp_c = 0x3111111000000000ULL;
 961
 962/* Device identification VPD page. Returns number of bytes placed in arr */
 963static int inquiry_vpd_83(unsigned char *arr, int port_group_id,
 964			  int target_dev_id, int dev_id_num,
 965			  const char *dev_id_str, int dev_id_str_len,
 966			  const uuid_be *lu_name)
 967{
 968	int num, port_a;
 969	char b[32];
 970
 971	port_a = target_dev_id + 1;
 972	/* T10 vendor identifier field format (faked) */
 973	arr[0] = 0x2;	/* ASCII */
 974	arr[1] = 0x1;
 975	arr[2] = 0x0;
 976	memcpy(&arr[4], inq_vendor_id, 8);
 977	memcpy(&arr[12], inq_product_id, 16);
 978	memcpy(&arr[28], dev_id_str, dev_id_str_len);
 979	num = 8 + 16 + dev_id_str_len;
 980	arr[3] = num;
 981	num += 4;
 982	if (dev_id_num >= 0) {
 983		if (sdebug_uuid_ctl) {
 984			/* Locally assigned UUID */
 985			arr[num++] = 0x1;  /* binary (not necessarily sas) */
 986			arr[num++] = 0xa;  /* PIV=0, lu, naa */
 987			arr[num++] = 0x0;
 988			arr[num++] = 0x12;
 989			arr[num++] = 0x10; /* uuid type=1, locally assigned */
 990			arr[num++] = 0x0;
 991			memcpy(arr + num, lu_name, 16);
 992			num += 16;
 993		} else {
 994			/* NAA-3, Logical unit identifier (binary) */
 995			arr[num++] = 0x1;  /* binary (not necessarily sas) */
 996			arr[num++] = 0x3;  /* PIV=0, lu, naa */
 997			arr[num++] = 0x0;
 998			arr[num++] = 0x8;
 999			put_unaligned_be64(naa3_comp_b + dev_id_num, arr + num);
1000			num += 8;
1001		}
1002		/* Target relative port number */
1003		arr[num++] = 0x61;	/* proto=sas, binary */
1004		arr[num++] = 0x94;	/* PIV=1, target port, rel port */
1005		arr[num++] = 0x0;	/* reserved */
1006		arr[num++] = 0x4;	/* length */
1007		arr[num++] = 0x0;	/* reserved */
1008		arr[num++] = 0x0;	/* reserved */
1009		arr[num++] = 0x0;
1010		arr[num++] = 0x1;	/* relative port A */
1011	}
1012	/* NAA-3, Target port identifier */
1013	arr[num++] = 0x61;	/* proto=sas, binary */
1014	arr[num++] = 0x93;	/* piv=1, target port, naa */
1015	arr[num++] = 0x0;
1016	arr[num++] = 0x8;
1017	put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1018	num += 8;
1019	/* NAA-3, Target port group identifier */
1020	arr[num++] = 0x61;	/* proto=sas, binary */
1021	arr[num++] = 0x95;	/* piv=1, target port group id */
1022	arr[num++] = 0x0;
1023	arr[num++] = 0x4;
1024	arr[num++] = 0;
1025	arr[num++] = 0;
1026	put_unaligned_be16(port_group_id, arr + num);
1027	num += 2;
1028	/* NAA-3, Target device identifier */
1029	arr[num++] = 0x61;	/* proto=sas, binary */
1030	arr[num++] = 0xa3;	/* piv=1, target device, naa */
1031	arr[num++] = 0x0;
1032	arr[num++] = 0x8;
1033	put_unaligned_be64(naa3_comp_a + target_dev_id, arr + num);
1034	num += 8;
1035	/* SCSI name string: Target device identifier */
1036	arr[num++] = 0x63;	/* proto=sas, UTF-8 */
1037	arr[num++] = 0xa8;	/* piv=1, target device, SCSI name string */
1038	arr[num++] = 0x0;
1039	arr[num++] = 24;
1040	memcpy(arr + num, "naa.32222220", 12);
1041	num += 12;
1042	snprintf(b, sizeof(b), "%08X", target_dev_id);
1043	memcpy(arr + num, b, 8);
1044	num += 8;
1045	memset(arr + num, 0, 4);
1046	num += 4;
1047	return num;
1048}
1049
1050static unsigned char vpd84_data[] = {
1051/* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
1052    0x22,0x22,0x22,0x0,0xbb,0x1,
1053    0x22,0x22,0x22,0x0,0xbb,0x2,
1054};
1055
1056/*  Software interface identification VPD page */
1057static int inquiry_vpd_84(unsigned char *arr)
1058{
1059	memcpy(arr, vpd84_data, sizeof(vpd84_data));
1060	return sizeof(vpd84_data);
1061}
1062
1063/* Management network addresses VPD page */
1064static int inquiry_vpd_85(unsigned char *arr)
1065{
1066	int num = 0;
1067	const char * na1 = "https://www.kernel.org/config";
1068	const char * na2 = "http://www.kernel.org/log";
1069	int plen, olen;
1070
1071	arr[num++] = 0x1;	/* lu, storage config */
1072	arr[num++] = 0x0;	/* reserved */
1073	arr[num++] = 0x0;
1074	olen = strlen(na1);
1075	plen = olen + 1;
1076	if (plen % 4)
1077		plen = ((plen / 4) + 1) * 4;
1078	arr[num++] = plen;	/* length, null termianted, padded */
1079	memcpy(arr + num, na1, olen);
1080	memset(arr + num + olen, 0, plen - olen);
1081	num += plen;
1082
1083	arr[num++] = 0x4;	/* lu, logging */
1084	arr[num++] = 0x0;	/* reserved */
1085	arr[num++] = 0x0;
1086	olen = strlen(na2);
1087	plen = olen + 1;
1088	if (plen % 4)
1089		plen = ((plen / 4) + 1) * 4;
1090	arr[num++] = plen;	/* length, null terminated, padded */
1091	memcpy(arr + num, na2, olen);
1092	memset(arr + num + olen, 0, plen - olen);
1093	num += plen;
1094
1095	return num;
1096}
1097
1098/* SCSI ports VPD page */
1099static int inquiry_vpd_88(unsigned char *arr, int target_dev_id)
1100{
1101	int num = 0;
1102	int port_a, port_b;
1103
1104	port_a = target_dev_id + 1;
1105	port_b = port_a + 1;
1106	arr[num++] = 0x0;	/* reserved */
1107	arr[num++] = 0x0;	/* reserved */
1108	arr[num++] = 0x0;
1109	arr[num++] = 0x1;	/* relative port 1 (primary) */
1110	memset(arr + num, 0, 6);
1111	num += 6;
1112	arr[num++] = 0x0;
1113	arr[num++] = 12;	/* length tp descriptor */
1114	/* naa-5 target port identifier (A) */
1115	arr[num++] = 0x61;	/* proto=sas, binary */
1116	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1117	arr[num++] = 0x0;	/* reserved */
1118	arr[num++] = 0x8;	/* length */
1119	put_unaligned_be64(naa3_comp_a + port_a, arr + num);
1120	num += 8;
1121	arr[num++] = 0x0;	/* reserved */
1122	arr[num++] = 0x0;	/* reserved */
1123	arr[num++] = 0x0;
1124	arr[num++] = 0x2;	/* relative port 2 (secondary) */
1125	memset(arr + num, 0, 6);
1126	num += 6;
1127	arr[num++] = 0x0;
1128	arr[num++] = 12;	/* length tp descriptor */
1129	/* naa-5 target port identifier (B) */
1130	arr[num++] = 0x61;	/* proto=sas, binary */
1131	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1132	arr[num++] = 0x0;	/* reserved */
1133	arr[num++] = 0x8;	/* length */
1134	put_unaligned_be64(naa3_comp_a + port_b, arr + num);
1135	num += 8;
1136
1137	return num;
1138}
1139
1140
1141static unsigned char vpd89_data[] = {
1142/* from 4th byte */ 0,0,0,0,
1143'l','i','n','u','x',' ',' ',' ',
1144'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
1145'1','2','3','4',
11460x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
11470xec,0,0,0,
11480x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
11490,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
11500x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
11510x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
11520x53,0x41,
11530x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
11540x20,0x20,
11550x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
11560x10,0x80,
11570,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
11580x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
11590x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
11600,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
11610x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
11620x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
11630,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
11640,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11650,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11670x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
11680,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
11690xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
11700,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
11710,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11740,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11770,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11780,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11800,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11810,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11820,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
1183};
1184
1185/* ATA Information VPD page */
1186static int inquiry_vpd_89(unsigned char *arr)
1187{
1188	memcpy(arr, vpd89_data, sizeof(vpd89_data));
1189	return sizeof(vpd89_data);
1190}
1191
1192
1193static unsigned char vpdb0_data[] = {
1194	/* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
1195	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1196	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1197	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1198};
1199
1200/* Block limits VPD page (SBC-3) */
1201static int inquiry_vpd_b0(unsigned char *arr)
1202{
1203	unsigned int gran;
1204
1205	memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
1206
1207	/* Optimal transfer length granularity */
1208	gran = 1 << sdebug_physblk_exp;
 
 
 
 
1209	put_unaligned_be16(gran, arr + 2);
1210
1211	/* Maximum Transfer Length */
1212	if (sdebug_store_sectors > 0x400)
1213		put_unaligned_be32(sdebug_store_sectors, arr + 4);
1214
1215	/* Optimal Transfer Length */
1216	put_unaligned_be32(sdebug_opt_blks, &arr[8]);
1217
1218	if (sdebug_lbpu) {
1219		/* Maximum Unmap LBA Count */
1220		put_unaligned_be32(sdebug_unmap_max_blocks, &arr[16]);
1221
1222		/* Maximum Unmap Block Descriptor Count */
1223		put_unaligned_be32(sdebug_unmap_max_desc, &arr[20]);
1224	}
1225
1226	/* Unmap Granularity Alignment */
1227	if (sdebug_unmap_alignment) {
1228		put_unaligned_be32(sdebug_unmap_alignment, &arr[28]);
1229		arr[28] |= 0x80; /* UGAVALID */
1230	}
1231
1232	/* Optimal Unmap Granularity */
1233	put_unaligned_be32(sdebug_unmap_granularity, &arr[24]);
1234
1235	/* Maximum WRITE SAME Length */
1236	put_unaligned_be64(sdebug_write_same_length, &arr[32]);
1237
 
 
 
 
 
 
 
 
1238	return 0x3c; /* Mandatory page length for Logical Block Provisioning */
1239
1240	return sizeof(vpdb0_data);
1241}
1242
1243/* Block device characteristics VPD page (SBC-3) */
1244static int inquiry_vpd_b1(unsigned char *arr)
1245{
1246	memset(arr, 0, 0x3c);
1247	arr[0] = 0;
1248	arr[1] = 1;	/* non rotating medium (e.g. solid state) */
1249	arr[2] = 0;
1250	arr[3] = 5;	/* less than 1.8" */
1251
1252	return 0x3c;
1253}
1254
1255/* Logical block provisioning VPD page (SBC-4) */
1256static int inquiry_vpd_b2(unsigned char *arr)
1257{
1258	memset(arr, 0, 0x4);
1259	arr[0] = 0;			/* threshold exponent */
1260	if (sdebug_lbpu)
1261		arr[1] = 1 << 7;
1262	if (sdebug_lbpws)
1263		arr[1] |= 1 << 6;
1264	if (sdebug_lbpws10)
1265		arr[1] |= 1 << 5;
1266	if (sdebug_lbprz && scsi_debug_lbp())
1267		arr[1] |= (sdebug_lbprz & 0x7) << 2;  /* sbc4r07 and later */
1268	/* anc_sup=0; dp=0 (no provisioning group descriptor) */
1269	/* minimum_percentage=0; provisioning_type=0 (unknown) */
1270	/* threshold_percentage=0 */
1271	return 0x4;
1272}
1273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1274#define SDEBUG_LONG_INQ_SZ 96
1275#define SDEBUG_MAX_INQ_ARR_SZ 584
1276
1277static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1278{
1279	unsigned char pq_pdt;
1280	unsigned char * arr;
1281	unsigned char *cmd = scp->cmnd;
1282	int alloc_len, n, ret;
1283	bool have_wlun, is_disk;
 
1284
1285	alloc_len = get_unaligned_be16(cmd + 3);
1286	arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
1287	if (! arr)
1288		return DID_REQUEUE << 16;
1289	is_disk = (sdebug_ptype == TYPE_DISK);
 
 
1290	have_wlun = scsi_is_wlun(scp->device->lun);
1291	if (have_wlun)
1292		pq_pdt = TYPE_WLUN;	/* present, wlun */
1293	else if (sdebug_no_lun_0 && (devip->lun == SDEBUG_LUN_0_VAL))
1294		pq_pdt = 0x7f;	/* not present, PQ=3, PDT=0x1f */
1295	else
1296		pq_pdt = (sdebug_ptype & 0x1f);
1297	arr[0] = pq_pdt;
1298	if (0x2 & cmd[1]) {  /* CMDDT bit set */
1299		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 1);
1300		kfree(arr);
1301		return check_condition_result;
1302	} else if (0x1 & cmd[1]) {  /* EVPD bit set */
1303		int lu_id_num, port_group_id, target_dev_id, len;
 
1304		char lu_id_str[6];
1305		int host_no = devip->sdbg_host->shost->host_no;
1306		
 
1307		port_group_id = (((host_no + 1) & 0x7f) << 8) +
1308		    (devip->channel & 0x7f);
1309		if (sdebug_vpd_use_hostno == 0)
1310			host_no = 0;
1311		lu_id_num = have_wlun ? -1 : (((host_no + 1) * 2000) +
1312			    (devip->target * 1000) + devip->lun);
1313		target_dev_id = ((host_no + 1) * 2000) +
1314				 (devip->target * 1000) - 3;
1315		len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
1316		if (0 == cmd[2]) { /* supported vital product data pages */
1317			arr[1] = cmd[2];	/*sanity */
1318			n = 4;
1319			arr[n++] = 0x0;   /* this page */
1320			arr[n++] = 0x80;  /* unit serial number */
1321			arr[n++] = 0x83;  /* device identification */
1322			arr[n++] = 0x84;  /* software interface ident. */
1323			arr[n++] = 0x85;  /* management network addresses */
1324			arr[n++] = 0x86;  /* extended inquiry */
1325			arr[n++] = 0x87;  /* mode page policy */
1326			arr[n++] = 0x88;  /* SCSI ports */
1327			if (is_disk) {	  /* SBC only */
1328				arr[n++] = 0x89;  /* ATA information */
1329				arr[n++] = 0xb0;  /* Block limits */
1330				arr[n++] = 0xb1;  /* Block characteristics */
1331				arr[n++] = 0xb2;  /* Logical Block Prov */
 
 
 
 
1332			}
1333			arr[3] = n - 4;	  /* number of supported VPD pages */
1334		} else if (0x80 == cmd[2]) { /* unit serial number */
1335			arr[1] = cmd[2];	/*sanity */
1336			arr[3] = len;
1337			memcpy(&arr[4], lu_id_str, len);
1338		} else if (0x83 == cmd[2]) { /* device identification */
1339			arr[1] = cmd[2];	/*sanity */
1340			arr[3] = inquiry_vpd_83(&arr[4], port_group_id,
1341						target_dev_id, lu_id_num,
1342						lu_id_str, len,
1343						&devip->lu_name);
1344		} else if (0x84 == cmd[2]) { /* Software interface ident. */
1345			arr[1] = cmd[2];	/*sanity */
1346			arr[3] = inquiry_vpd_84(&arr[4]);
1347		} else if (0x85 == cmd[2]) { /* Management network addresses */
1348			arr[1] = cmd[2];	/*sanity */
1349			arr[3] = inquiry_vpd_85(&arr[4]);
1350		} else if (0x86 == cmd[2]) { /* extended inquiry */
1351			arr[1] = cmd[2];	/*sanity */
1352			arr[3] = 0x3c;	/* number of following entries */
1353			if (sdebug_dif == T10_PI_TYPE3_PROTECTION)
1354				arr[4] = 0x4;	/* SPT: GRD_CHK:1 */
1355			else if (have_dif_prot)
1356				arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
1357			else
1358				arr[4] = 0x0;   /* no protection stuff */
1359			arr[5] = 0x7;   /* head of q, ordered + simple q's */
 
 
 
 
1360		} else if (0x87 == cmd[2]) { /* mode page policy */
1361			arr[1] = cmd[2];	/*sanity */
1362			arr[3] = 0x8;	/* number of following entries */
1363			arr[4] = 0x2;	/* disconnect-reconnect mp */
1364			arr[6] = 0x80;	/* mlus, shared */
1365			arr[8] = 0x18;	 /* protocol specific lu */
1366			arr[10] = 0x82;	 /* mlus, per initiator port */
1367		} else if (0x88 == cmd[2]) { /* SCSI Ports */
1368			arr[1] = cmd[2];	/*sanity */
1369			arr[3] = inquiry_vpd_88(&arr[4], target_dev_id);
1370		} else if (is_disk && 0x89 == cmd[2]) { /* ATA information */
1371			arr[1] = cmd[2];        /*sanity */
1372			n = inquiry_vpd_89(&arr[4]);
1373			put_unaligned_be16(n, arr + 2);
1374		} else if (is_disk && 0xb0 == cmd[2]) { /* Block limits */
1375			arr[1] = cmd[2];        /*sanity */
1376			arr[3] = inquiry_vpd_b0(&arr[4]);
1377		} else if (is_disk && 0xb1 == cmd[2]) { /* Block char. */
1378			arr[1] = cmd[2];        /*sanity */
1379			arr[3] = inquiry_vpd_b1(&arr[4]);
1380		} else if (is_disk && 0xb2 == cmd[2]) { /* LB Prov. */
1381			arr[1] = cmd[2];        /*sanity */
1382			arr[3] = inquiry_vpd_b2(&arr[4]);
 
 
 
 
1383		} else {
1384			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
1385			kfree(arr);
1386			return check_condition_result;
1387		}
1388		len = min(get_unaligned_be16(arr + 2) + 4, alloc_len);
1389		ret = fill_from_dev_buffer(scp, arr,
1390			    min(len, SDEBUG_MAX_INQ_ARR_SZ));
1391		kfree(arr);
1392		return ret;
1393	}
1394	/* drops through here for a standard inquiry */
1395	arr[1] = sdebug_removable ? 0x80 : 0;	/* Removable disk */
1396	arr[2] = sdebug_scsi_level;
1397	arr[3] = 2;    /* response_data_format==2 */
1398	arr[4] = SDEBUG_LONG_INQ_SZ - 5;
1399	arr[5] = (int)have_dif_prot;	/* PROTECT bit */
1400	if (sdebug_vpd_use_hostno == 0)
1401		arr[5] = 0x10; /* claim: implicit TGPS */
1402	arr[6] = 0x10; /* claim: MultiP */
1403	/* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
1404	arr[7] = 0xa; /* claim: LINKED + CMDQUE */
1405	memcpy(&arr[8], inq_vendor_id, 8);
1406	memcpy(&arr[16], inq_product_id, 16);
1407	memcpy(&arr[32], inq_product_rev, 4);
 
 
1408	/* version descriptors (2 bytes each) follow */
1409	put_unaligned_be16(0xc0, arr + 58);   /* SAM-6 no version claimed */
1410	put_unaligned_be16(0x5c0, arr + 60);  /* SPC-5 no version claimed */
1411	n = 62;
1412	if (is_disk) {		/* SBC-4 no version claimed */
1413		put_unaligned_be16(0x600, arr + n);
1414		n += 2;
1415	} else if (sdebug_ptype == TYPE_TAPE) {	/* SSC-4 rev 3 */
1416		put_unaligned_be16(0x525, arr + n);
1417		n += 2;
 
 
 
1418	}
1419	put_unaligned_be16(0x2100, arr + n);	/* SPL-4 no version claimed */
1420	ret = fill_from_dev_buffer(scp, arr,
1421			    min(alloc_len, SDEBUG_LONG_INQ_SZ));
1422	kfree(arr);
1423	return ret;
1424}
1425
 
1426static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1427				   0, 0, 0x0, 0x0};
1428
1429static int resp_requests(struct scsi_cmnd * scp,
1430			 struct sdebug_dev_info * devip)
1431{
1432	unsigned char * sbuff;
1433	unsigned char *cmd = scp->cmnd;
1434	unsigned char arr[SCSI_SENSE_BUFFERSIZE];
1435	bool dsense;
1436	int len = 18;
 
 
1437
1438	memset(arr, 0, sizeof(arr));
1439	dsense = !!(cmd[1] & 1);
1440	sbuff = scp->sense_buffer;
1441	if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
 
 
 
 
 
 
 
 
 
 
 
 
 
1442		if (dsense) {
1443			arr[0] = 0x72;
1444			arr[1] = 0x0;		/* NO_SENSE in sense_key */
1445			arr[2] = THRESHOLD_EXCEEDED;
1446			arr[3] = 0xff;		/* TEST set and MRIE==6 */
1447			len = 8;
1448		} else {
1449			arr[0] = 0x70;
1450			arr[2] = 0x0;		/* NO_SENSE in sense_key */
1451			arr[7] = 0xa;   	/* 18 byte sense buffer */
1452			arr[12] = THRESHOLD_EXCEEDED;
1453			arr[13] = 0xff;		/* TEST set and MRIE==6 */
1454		}
1455	} else {
1456		memcpy(arr, sbuff, SCSI_SENSE_BUFFERSIZE);
1457		if (arr[0] >= 0x70 && dsense == sdebug_dsense)
1458			;	/* have sense and formats match */
1459		else if (arr[0] <= 0x70) {
1460			if (dsense) {
1461				memset(arr, 0, 8);
1462				arr[0] = 0x72;
1463				len = 8;
1464			} else {
1465				memset(arr, 0, 18);
1466				arr[0] = 0x70;
1467				arr[7] = 0xa;
1468			}
1469		} else if (dsense) {
1470			memset(arr, 0, 8);
1471			arr[0] = 0x72;
1472			arr[1] = sbuff[2];     /* sense key */
1473			arr[2] = sbuff[12];    /* asc */
1474			arr[3] = sbuff[13];    /* ascq */
1475			len = 8;
1476		} else {
1477			memset(arr, 0, 18);
1478			arr[0] = 0x70;
1479			arr[2] = sbuff[1];
1480			arr[7] = 0xa;
1481			arr[12] = sbuff[1];
1482			arr[13] = sbuff[3];
1483		}
1484
1485	}
1486	mk_sense_buffer(scp, 0, NO_ADDITIONAL_SENSE, 0);
1487	return fill_from_dev_buffer(scp, arr, len);
1488}
1489
1490static int resp_start_stop(struct scsi_cmnd * scp,
1491			   struct sdebug_dev_info * devip)
1492{
1493	unsigned char *cmd = scp->cmnd;
1494	int power_cond, stop;
 
1495
1496	power_cond = (cmd[4] & 0xf0) >> 4;
1497	if (power_cond) {
1498		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 7);
1499		return check_condition_result;
1500	}
1501	stop = !(cmd[4] & 1);
1502	atomic_xchg(&devip->stopped, stop);
1503	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1504}
1505
1506static sector_t get_sdebug_capacity(void)
1507{
1508	static const unsigned int gibibyte = 1073741824;
1509
1510	if (sdebug_virtual_gb > 0)
1511		return (sector_t)sdebug_virtual_gb *
1512			(gibibyte / sdebug_sector_size);
1513	else
1514		return sdebug_store_sectors;
1515}
1516
1517#define SDEBUG_READCAP_ARR_SZ 8
1518static int resp_readcap(struct scsi_cmnd * scp,
1519			struct sdebug_dev_info * devip)
1520{
1521	unsigned char arr[SDEBUG_READCAP_ARR_SZ];
1522	unsigned int capac;
1523
1524	/* following just in case virtual_gb changed */
1525	sdebug_capacity = get_sdebug_capacity();
1526	memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
1527	if (sdebug_capacity < 0xffffffff) {
1528		capac = (unsigned int)sdebug_capacity - 1;
1529		put_unaligned_be32(capac, arr + 0);
1530	} else
1531		put_unaligned_be32(0xffffffff, arr + 0);
1532	put_unaligned_be16(sdebug_sector_size, arr + 6);
1533	return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
1534}
1535
1536#define SDEBUG_READCAP16_ARR_SZ 32
1537static int resp_readcap16(struct scsi_cmnd * scp,
1538			  struct sdebug_dev_info * devip)
1539{
1540	unsigned char *cmd = scp->cmnd;
1541	unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
1542	int alloc_len;
1543
1544	alloc_len = get_unaligned_be32(cmd + 10);
1545	/* following just in case virtual_gb changed */
1546	sdebug_capacity = get_sdebug_capacity();
1547	memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
1548	put_unaligned_be64((u64)(sdebug_capacity - 1), arr + 0);
1549	put_unaligned_be32(sdebug_sector_size, arr + 8);
1550	arr[13] = sdebug_physblk_exp & 0xf;
1551	arr[14] = (sdebug_lowest_aligned >> 8) & 0x3f;
1552
1553	if (scsi_debug_lbp()) {
1554		arr[14] |= 0x80; /* LBPME */
1555		/* from sbc4r07, this LBPRZ field is 1 bit, but the LBPRZ in
1556		 * the LB Provisioning VPD page is 3 bits. Note that lbprz=2
1557		 * in the wider field maps to 0 in this field.
1558		 */
1559		if (sdebug_lbprz & 1)	/* precisely what the draft requires */
1560			arr[14] |= 0x40;
1561	}
1562
 
 
 
 
 
 
 
1563	arr[15] = sdebug_lowest_aligned & 0xff;
1564
1565	if (have_dif_prot) {
1566		arr[12] = (sdebug_dif - 1) << 1; /* P_TYPE */
1567		arr[12] |= 1; /* PROT_EN */
1568	}
1569
1570	return fill_from_dev_buffer(scp, arr,
1571				    min(alloc_len, SDEBUG_READCAP16_ARR_SZ));
1572}
1573
1574#define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
1575
1576static int resp_report_tgtpgs(struct scsi_cmnd * scp,
1577			      struct sdebug_dev_info * devip)
1578{
1579	unsigned char *cmd = scp->cmnd;
1580	unsigned char * arr;
1581	int host_no = devip->sdbg_host->shost->host_no;
1582	int n, ret, alen, rlen;
1583	int port_group_a, port_group_b, port_a, port_b;
 
 
1584
1585	alen = get_unaligned_be32(cmd + 6);
1586	arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
1587	if (! arr)
1588		return DID_REQUEUE << 16;
1589	/*
1590	 * EVPD page 0x88 states we have two ports, one
1591	 * real and a fake port with no device connected.
1592	 * So we create two port groups with one port each
1593	 * and set the group with port B to unavailable.
1594	 */
1595	port_a = 0x1; /* relative port A */
1596	port_b = 0x2; /* relative port B */
1597	port_group_a = (((host_no + 1) & 0x7f) << 8) +
1598			(devip->channel & 0x7f);
1599	port_group_b = (((host_no + 1) & 0x7f) << 8) +
1600			(devip->channel & 0x7f) + 0x80;
1601
1602	/*
1603	 * The asymmetric access state is cycled according to the host_id.
1604	 */
1605	n = 4;
1606	if (sdebug_vpd_use_hostno == 0) {
1607		arr[n++] = host_no % 3; /* Asymm access state */
1608		arr[n++] = 0x0F; /* claim: all states are supported */
1609	} else {
1610		arr[n++] = 0x0; /* Active/Optimized path */
1611		arr[n++] = 0x01; /* only support active/optimized paths */
1612	}
1613	put_unaligned_be16(port_group_a, arr + n);
1614	n += 2;
1615	arr[n++] = 0;    /* Reserved */
1616	arr[n++] = 0;    /* Status code */
1617	arr[n++] = 0;    /* Vendor unique */
1618	arr[n++] = 0x1;  /* One port per group */
1619	arr[n++] = 0;    /* Reserved */
1620	arr[n++] = 0;    /* Reserved */
1621	put_unaligned_be16(port_a, arr + n);
1622	n += 2;
1623	arr[n++] = 3;    /* Port unavailable */
1624	arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
1625	put_unaligned_be16(port_group_b, arr + n);
1626	n += 2;
1627	arr[n++] = 0;    /* Reserved */
1628	arr[n++] = 0;    /* Status code */
1629	arr[n++] = 0;    /* Vendor unique */
1630	arr[n++] = 0x1;  /* One port per group */
1631	arr[n++] = 0;    /* Reserved */
1632	arr[n++] = 0;    /* Reserved */
1633	put_unaligned_be16(port_b, arr + n);
1634	n += 2;
1635
1636	rlen = n - 4;
1637	put_unaligned_be32(rlen, arr + 0);
1638
1639	/*
1640	 * Return the smallest value of either
1641	 * - The allocated length
1642	 * - The constructed command length
1643	 * - The maximum array size
1644	 */
1645	rlen = min(alen,n);
1646	ret = fill_from_dev_buffer(scp, arr,
1647				   min(rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
1648	kfree(arr);
1649	return ret;
1650}
1651
1652static int resp_rsup_opcodes(struct scsi_cmnd *scp,
1653			     struct sdebug_dev_info *devip)
1654{
1655	bool rctd;
1656	u8 reporting_opts, req_opcode, sdeb_i, supp;
1657	u16 req_sa, u;
1658	u32 alloc_len, a_len;
1659	int k, offset, len, errsts, count, bump, na;
1660	const struct opcode_info_t *oip;
1661	const struct opcode_info_t *r_oip;
1662	u8 *arr;
1663	u8 *cmd = scp->cmnd;
1664
1665	rctd = !!(cmd[2] & 0x80);
1666	reporting_opts = cmd[2] & 0x7;
1667	req_opcode = cmd[3];
1668	req_sa = get_unaligned_be16(cmd + 4);
1669	alloc_len = get_unaligned_be32(cmd + 6);
1670	if (alloc_len < 4 || alloc_len > 0xffff) {
1671		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1672		return check_condition_result;
1673	}
1674	if (alloc_len > 8192)
1675		a_len = 8192;
1676	else
1677		a_len = alloc_len;
1678	arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
1679	if (NULL == arr) {
1680		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
1681				INSUFF_RES_ASCQ);
1682		return check_condition_result;
1683	}
1684	switch (reporting_opts) {
1685	case 0:	/* all commands */
1686		/* count number of commands */
1687		for (count = 0, oip = opcode_info_arr;
1688		     oip->num_attached != 0xff; ++oip) {
1689			if (F_INV_OP & oip->flags)
1690				continue;
1691			count += (oip->num_attached + 1);
1692		}
1693		bump = rctd ? 20 : 8;
1694		put_unaligned_be32(count * bump, arr);
1695		for (offset = 4, oip = opcode_info_arr;
1696		     oip->num_attached != 0xff && offset < a_len; ++oip) {
1697			if (F_INV_OP & oip->flags)
1698				continue;
1699			na = oip->num_attached;
1700			arr[offset] = oip->opcode;
1701			put_unaligned_be16(oip->sa, arr + offset + 2);
1702			if (rctd)
1703				arr[offset + 5] |= 0x2;
1704			if (FF_SA & oip->flags)
1705				arr[offset + 5] |= 0x1;
1706			put_unaligned_be16(oip->len_mask[0], arr + offset + 6);
1707			if (rctd)
1708				put_unaligned_be16(0xa, arr + offset + 8);
1709			r_oip = oip;
1710			for (k = 0, oip = oip->arrp; k < na; ++k, ++oip) {
1711				if (F_INV_OP & oip->flags)
1712					continue;
1713				offset += bump;
1714				arr[offset] = oip->opcode;
1715				put_unaligned_be16(oip->sa, arr + offset + 2);
1716				if (rctd)
1717					arr[offset + 5] |= 0x2;
1718				if (FF_SA & oip->flags)
1719					arr[offset + 5] |= 0x1;
1720				put_unaligned_be16(oip->len_mask[0],
1721						   arr + offset + 6);
1722				if (rctd)
1723					put_unaligned_be16(0xa,
1724							   arr + offset + 8);
1725			}
1726			oip = r_oip;
1727			offset += bump;
1728		}
1729		break;
1730	case 1:	/* one command: opcode only */
1731	case 2:	/* one command: opcode plus service action */
1732	case 3:	/* one command: if sa==0 then opcode only else opcode+sa */
1733		sdeb_i = opcode_ind_arr[req_opcode];
1734		oip = &opcode_info_arr[sdeb_i];
1735		if (F_INV_OP & oip->flags) {
1736			supp = 1;
1737			offset = 4;
1738		} else {
1739			if (1 == reporting_opts) {
1740				if (FF_SA & oip->flags) {
1741					mk_sense_invalid_fld(scp, SDEB_IN_CDB,
1742							     2, 2);
1743					kfree(arr);
1744					return check_condition_result;
1745				}
1746				req_sa = 0;
1747			} else if (2 == reporting_opts &&
1748				   0 == (FF_SA & oip->flags)) {
1749				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
1750				kfree(arr);	/* point at requested sa */
1751				return check_condition_result;
1752			}
1753			if (0 == (FF_SA & oip->flags) &&
1754			    req_opcode == oip->opcode)
1755				supp = 3;
1756			else if (0 == (FF_SA & oip->flags)) {
1757				na = oip->num_attached;
1758				for (k = 0, oip = oip->arrp; k < na;
1759				     ++k, ++oip) {
1760					if (req_opcode == oip->opcode)
1761						break;
1762				}
1763				supp = (k >= na) ? 1 : 3;
1764			} else if (req_sa != oip->sa) {
1765				na = oip->num_attached;
1766				for (k = 0, oip = oip->arrp; k < na;
1767				     ++k, ++oip) {
1768					if (req_sa == oip->sa)
1769						break;
1770				}
1771				supp = (k >= na) ? 1 : 3;
1772			} else
1773				supp = 3;
1774			if (3 == supp) {
1775				u = oip->len_mask[0];
1776				put_unaligned_be16(u, arr + 2);
1777				arr[4] = oip->opcode;
1778				for (k = 1; k < u; ++k)
1779					arr[4 + k] = (k < 16) ?
1780						 oip->len_mask[k] : 0xff;
1781				offset = 4 + u;
1782			} else
1783				offset = 4;
1784		}
1785		arr[1] = (rctd ? 0x80 : 0) | supp;
1786		if (rctd) {
1787			put_unaligned_be16(0xa, arr + offset);
1788			offset += 12;
1789		}
1790		break;
1791	default:
1792		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
1793		kfree(arr);
1794		return check_condition_result;
1795	}
1796	offset = (offset < a_len) ? offset : a_len;
1797	len = (offset < alloc_len) ? offset : alloc_len;
1798	errsts = fill_from_dev_buffer(scp, arr, len);
1799	kfree(arr);
1800	return errsts;
1801}
1802
1803static int resp_rsup_tmfs(struct scsi_cmnd *scp,
1804			  struct sdebug_dev_info *devip)
1805{
1806	bool repd;
1807	u32 alloc_len, len;
1808	u8 arr[16];
1809	u8 *cmd = scp->cmnd;
1810
1811	memset(arr, 0, sizeof(arr));
1812	repd = !!(cmd[2] & 0x80);
1813	alloc_len = get_unaligned_be32(cmd + 6);
1814	if (alloc_len < 4) {
1815		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1816		return check_condition_result;
1817	}
1818	arr[0] = 0xc8;		/* ATS | ATSS | LURS */
1819	arr[1] = 0x1;		/* ITNRS */
1820	if (repd) {
1821		arr[3] = 0xc;
1822		len = 16;
1823	} else
1824		len = 4;
1825
1826	len = (len < alloc_len) ? len : alloc_len;
1827	return fill_from_dev_buffer(scp, arr, len);
1828}
1829
1830/* <<Following mode page info copied from ST318451LW>> */
1831
1832static int resp_err_recov_pg(unsigned char * p, int pcontrol, int target)
1833{	/* Read-Write Error Recovery page for mode_sense */
1834	unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
1835					5, 0, 0xff, 0xff};
1836
1837	memcpy(p, err_recov_pg, sizeof(err_recov_pg));
1838	if (1 == pcontrol)
1839		memset(p + 2, 0, sizeof(err_recov_pg) - 2);
1840	return sizeof(err_recov_pg);
1841}
1842
1843static int resp_disconnect_pg(unsigned char * p, int pcontrol, int target)
1844{ 	/* Disconnect-Reconnect page for mode_sense */
1845	unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
1846					 0, 0, 0, 0, 0, 0, 0, 0};
1847
1848	memcpy(p, disconnect_pg, sizeof(disconnect_pg));
1849	if (1 == pcontrol)
1850		memset(p + 2, 0, sizeof(disconnect_pg) - 2);
1851	return sizeof(disconnect_pg);
1852}
1853
1854static int resp_format_pg(unsigned char * p, int pcontrol, int target)
1855{       /* Format device page for mode_sense */
1856	unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
1857				     0, 0, 0, 0, 0, 0, 0, 0,
1858				     0, 0, 0, 0, 0x40, 0, 0, 0};
1859
1860	memcpy(p, format_pg, sizeof(format_pg));
1861	put_unaligned_be16(sdebug_sectors_per, p + 10);
1862	put_unaligned_be16(sdebug_sector_size, p + 12);
1863	if (sdebug_removable)
1864		p[20] |= 0x20; /* should agree with INQUIRY */
1865	if (1 == pcontrol)
1866		memset(p + 2, 0, sizeof(format_pg) - 2);
1867	return sizeof(format_pg);
1868}
1869
1870static unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1871				     0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
1872				     0, 0, 0, 0};
1873
1874static int resp_caching_pg(unsigned char * p, int pcontrol, int target)
1875{ 	/* Caching page for mode_sense */
1876	unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
1877		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1878	unsigned char d_caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1879		0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
1880
1881	if (SDEBUG_OPT_N_WCE & sdebug_opts)
1882		caching_pg[2] &= ~0x4;	/* set WCE=0 (default WCE=1) */
1883	memcpy(p, caching_pg, sizeof(caching_pg));
1884	if (1 == pcontrol)
1885		memcpy(p + 2, ch_caching_pg, sizeof(ch_caching_pg));
1886	else if (2 == pcontrol)
1887		memcpy(p, d_caching_pg, sizeof(d_caching_pg));
1888	return sizeof(caching_pg);
1889}
1890
1891static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
1892				    0, 0, 0x2, 0x4b};
1893
1894static int resp_ctrl_m_pg(unsigned char * p, int pcontrol, int target)
1895{ 	/* Control mode page for mode_sense */
1896	unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
1897				        0, 0, 0, 0};
1898	unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
1899				     0, 0, 0x2, 0x4b};
1900
1901	if (sdebug_dsense)
1902		ctrl_m_pg[2] |= 0x4;
1903	else
1904		ctrl_m_pg[2] &= ~0x4;
1905
1906	if (sdebug_ato)
1907		ctrl_m_pg[5] |= 0x80; /* ATO=1 */
1908
1909	memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
1910	if (1 == pcontrol)
1911		memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
1912	else if (2 == pcontrol)
1913		memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
1914	return sizeof(ctrl_m_pg);
1915}
1916
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1917
1918static int resp_iec_m_pg(unsigned char * p, int pcontrol, int target)
1919{	/* Informational Exceptions control mode page for mode_sense */
1920	unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
1921				       0, 0, 0x0, 0x0};
1922	unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1923				      0, 0, 0x0, 0x0};
1924
1925	memcpy(p, iec_m_pg, sizeof(iec_m_pg));
1926	if (1 == pcontrol)
1927		memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
1928	else if (2 == pcontrol)
1929		memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
1930	return sizeof(iec_m_pg);
1931}
1932
1933static int resp_sas_sf_m_pg(unsigned char * p, int pcontrol, int target)
1934{	/* SAS SSP mode page - short format for mode_sense */
1935	unsigned char sas_sf_m_pg[] = {0x19, 0x6,
1936		0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
1937
1938	memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
1939	if (1 == pcontrol)
1940		memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
1941	return sizeof(sas_sf_m_pg);
1942}
1943
1944
1945static int resp_sas_pcd_m_spg(unsigned char * p, int pcontrol, int target,
1946			      int target_dev_id)
1947{	/* SAS phy control and discover mode page for mode_sense */
1948	unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
1949		    0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
1950		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
1951		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
1952		    0x2, 0, 0, 0, 0, 0, 0, 0,
1953		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1954		    0, 0, 0, 0, 0, 0, 0, 0,
1955		    0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
1956		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
1957		    0, 0, 0, 0, 0, 0, 0, 0,	/* insert SAS addr */
1958		    0x3, 0, 0, 0, 0, 0, 0, 0,
1959		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1960		    0, 0, 0, 0, 0, 0, 0, 0,
1961		};
1962	int port_a, port_b;
1963
1964	put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 16);
1965	put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 24);
1966	put_unaligned_be64(naa3_comp_a, sas_pcd_m_pg + 64);
1967	put_unaligned_be64(naa3_comp_c + 1, sas_pcd_m_pg + 72);
1968	port_a = target_dev_id + 1;
1969	port_b = port_a + 1;
1970	memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
1971	put_unaligned_be32(port_a, p + 20);
1972	put_unaligned_be32(port_b, p + 48 + 20);
1973	if (1 == pcontrol)
1974		memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
1975	return sizeof(sas_pcd_m_pg);
1976}
1977
1978static int resp_sas_sha_m_spg(unsigned char * p, int pcontrol)
1979{	/* SAS SSP shared protocol specific port mode subpage */
1980	unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
1981		    0, 0, 0, 0, 0, 0, 0, 0,
1982		};
1983
1984	memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
1985	if (1 == pcontrol)
1986		memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
1987	return sizeof(sas_sha_m_pg);
1988}
1989
1990#define SDEBUG_MAX_MSENSE_SZ 256
 
1991
1992static int resp_mode_sense(struct scsi_cmnd *scp,
1993			   struct sdebug_dev_info *devip)
1994{
1995	int pcontrol, pcode, subpcode, bd_len;
1996	unsigned char dev_spec;
1997	int alloc_len, offset, len, target_dev_id;
 
1998	int target = scp->device->id;
1999	unsigned char * ap;
2000	unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
2001	unsigned char *cmd = scp->cmnd;
2002	bool dbd, llbaa, msense_6, is_disk, bad_pcode;
2003
 
 
 
2004	dbd = !!(cmd[1] & 0x8);		/* disable block descriptors */
2005	pcontrol = (cmd[2] & 0xc0) >> 6;
2006	pcode = cmd[2] & 0x3f;
2007	subpcode = cmd[3];
2008	msense_6 = (MODE_SENSE == cmd[0]);
2009	llbaa = msense_6 ? false : !!(cmd[1] & 0x10);
2010	is_disk = (sdebug_ptype == TYPE_DISK);
2011	if (is_disk && !dbd)
 
2012		bd_len = llbaa ? 16 : 8;
2013	else
2014		bd_len = 0;
2015	alloc_len = msense_6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2016	memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
2017	if (0x3 == pcontrol) {  /* Saving values not supported */
2018		mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
2019		return check_condition_result;
2020	}
2021	target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2022			(devip->target * 1000) - 3;
2023	/* for disks set DPOFUA bit and clear write protect (WP) bit */
2024	if (is_disk)
2025		dev_spec = 0x10;	/* =0x90 if WP=1 implies read-only */
2026	else
 
 
2027		dev_spec = 0x0;
2028	if (msense_6) {
2029		arr[2] = dev_spec;
2030		arr[3] = bd_len;
2031		offset = 4;
2032	} else {
2033		arr[3] = dev_spec;
2034		if (16 == bd_len)
2035			arr[4] = 0x1;	/* set LONGLBA bit */
2036		arr[7] = bd_len;	/* assume 255 or less */
2037		offset = 8;
2038	}
2039	ap = arr + offset;
2040	if ((bd_len > 0) && (!sdebug_capacity))
2041		sdebug_capacity = get_sdebug_capacity();
2042
2043	if (8 == bd_len) {
2044		if (sdebug_capacity > 0xfffffffe)
2045			put_unaligned_be32(0xffffffff, ap + 0);
2046		else
2047			put_unaligned_be32(sdebug_capacity, ap + 0);
2048		put_unaligned_be16(sdebug_sector_size, ap + 6);
2049		offset += bd_len;
2050		ap = arr + offset;
2051	} else if (16 == bd_len) {
2052		put_unaligned_be64((u64)sdebug_capacity, ap + 0);
2053		put_unaligned_be32(sdebug_sector_size, ap + 12);
2054		offset += bd_len;
2055		ap = arr + offset;
2056	}
2057
2058	if ((subpcode > 0x0) && (subpcode < 0xff) && (0x19 != pcode)) {
2059		/* TODO: Control Extension page */
2060		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2061		return check_condition_result;
2062	}
2063	bad_pcode = false;
2064
2065	switch (pcode) {
2066	case 0x1:	/* Read-Write error recovery page, direct access */
 
 
2067		len = resp_err_recov_pg(ap, pcontrol, target);
2068		offset += len;
2069		break;
2070	case 0x2:	/* Disconnect-Reconnect page, all devices */
 
 
2071		len = resp_disconnect_pg(ap, pcontrol, target);
2072		offset += len;
2073		break;
2074        case 0x3:       /* Format device page, direct access */
 
 
2075		if (is_disk) {
2076			len = resp_format_pg(ap, pcontrol, target);
2077			offset += len;
2078		} else
2079			bad_pcode = true;
2080                break;
 
2081	case 0x8:	/* Caching page, direct access */
2082		if (is_disk) {
 
 
2083			len = resp_caching_pg(ap, pcontrol, target);
2084			offset += len;
2085		} else
2086			bad_pcode = true;
 
2087		break;
2088	case 0xa:	/* Control Mode page, all devices */
2089		len = resp_ctrl_m_pg(ap, pcontrol, target);
 
 
 
 
 
 
 
 
 
 
 
 
 
2090		offset += len;
2091		break;
2092	case 0x19:	/* if spc==1 then sas phy, control+discover */
2093		if ((subpcode > 0x2) && (subpcode < 0xff)) {
2094			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2095			return check_condition_result;
2096	        }
2097		len = 0;
2098		if ((0x0 == subpcode) || (0xff == subpcode))
2099			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2100		if ((0x1 == subpcode) || (0xff == subpcode))
2101			len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2102						  target_dev_id);
2103		if ((0x2 == subpcode) || (0xff == subpcode))
2104			len += resp_sas_sha_m_spg(ap + len, pcontrol);
2105		offset += len;
2106		break;
2107	case 0x1c:	/* Informational Exceptions Mode page, all devices */
 
 
2108		len = resp_iec_m_pg(ap, pcontrol, target);
2109		offset += len;
2110		break;
2111	case 0x3f:	/* Read all Mode pages */
2112		if ((0 == subpcode) || (0xff == subpcode)) {
2113			len = resp_err_recov_pg(ap, pcontrol, target);
2114			len += resp_disconnect_pg(ap + len, pcontrol, target);
2115			if (is_disk) {
2116				len += resp_format_pg(ap + len, pcontrol,
2117						      target);
2118				len += resp_caching_pg(ap + len, pcontrol,
2119						       target);
2120			}
2121			len += resp_ctrl_m_pg(ap + len, pcontrol, target);
2122			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2123			if (0xff == subpcode) {
2124				len += resp_sas_pcd_m_spg(ap + len, pcontrol,
2125						  target, target_dev_id);
2126				len += resp_sas_sha_m_spg(ap + len, pcontrol);
2127			}
2128			len += resp_iec_m_pg(ap + len, pcontrol, target);
2129			offset += len;
2130		} else {
2131			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2132			return check_condition_result;
2133                }
2134		break;
2135	default:
2136		bad_pcode = true;
2137		break;
2138	}
2139	if (bad_pcode) {
2140		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2141		return check_condition_result;
2142	}
2143	if (msense_6)
2144		arr[0] = offset - 1;
2145	else
2146		put_unaligned_be16((offset - 2), arr + 0);
2147	return fill_from_dev_buffer(scp, arr, min(alloc_len, offset));
 
 
 
 
 
 
 
 
2148}
2149
2150#define SDEBUG_MAX_MSELECT_SZ 512
2151
2152static int resp_mode_select(struct scsi_cmnd *scp,
2153			    struct sdebug_dev_info *devip)
2154{
2155	int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
2156	int param_len, res, mpage;
2157	unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
2158	unsigned char *cmd = scp->cmnd;
2159	int mselect6 = (MODE_SELECT == cmd[0]);
2160
2161	memset(arr, 0, sizeof(arr));
2162	pf = cmd[1] & 0x10;
2163	sp = cmd[1] & 0x1;
2164	param_len = mselect6 ? cmd[4] : get_unaligned_be16(cmd + 7);
2165	if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
2166		mk_sense_invalid_fld(scp, SDEB_IN_CDB, mselect6 ? 4 : 7, -1);
2167		return check_condition_result;
2168	}
2169        res = fetch_to_dev_buffer(scp, arr, param_len);
2170        if (-1 == res)
2171		return DID_ERROR << 16;
2172	else if (sdebug_verbose && (res < param_len))
2173		sdev_printk(KERN_INFO, scp->device,
2174			    "%s: cdb indicated=%d, IO sent=%d bytes\n",
2175			    __func__, param_len, res);
2176	md_len = mselect6 ? (arr[0] + 1) : (get_unaligned_be16(arr + 0) + 2);
2177	bd_len = mselect6 ? arr[3] : get_unaligned_be16(arr + 6);
2178	if (md_len > 2) {
 
2179		mk_sense_invalid_fld(scp, SDEB_IN_DATA, 0, -1);
2180		return check_condition_result;
2181	}
2182	off = bd_len + (mselect6 ? 4 : 8);
2183	mpage = arr[off] & 0x3f;
2184	ps = !!(arr[off] & 0x80);
2185	if (ps) {
2186		mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 7);
2187		return check_condition_result;
2188	}
2189	spf = !!(arr[off] & 0x40);
2190	pg_len = spf ? (get_unaligned_be16(arr + off + 2) + 4) :
2191		       (arr[off + 1] + 2);
2192	if ((pg_len + off) > param_len) {
2193		mk_sense_buffer(scp, ILLEGAL_REQUEST,
2194				PARAMETER_LIST_LENGTH_ERR, 0);
2195		return check_condition_result;
2196	}
2197	switch (mpage) {
2198	case 0x8:      /* Caching Mode page */
2199		if (caching_pg[1] == arr[off + 1]) {
2200			memcpy(caching_pg + 2, arr + off + 2,
2201			       sizeof(caching_pg) - 2);
2202			goto set_mode_changed_ua;
2203		}
2204		break;
2205	case 0xa:      /* Control Mode page */
2206		if (ctrl_m_pg[1] == arr[off + 1]) {
2207			memcpy(ctrl_m_pg + 2, arr + off + 2,
2208			       sizeof(ctrl_m_pg) - 2);
 
 
 
 
2209			sdebug_dsense = !!(ctrl_m_pg[2] & 0x4);
2210			goto set_mode_changed_ua;
2211		}
2212		break;
2213	case 0x1c:      /* Informational Exceptions Mode page */
2214		if (iec_m_pg[1] == arr[off + 1]) {
2215			memcpy(iec_m_pg + 2, arr + off + 2,
2216			       sizeof(iec_m_pg) - 2);
2217			goto set_mode_changed_ua;
2218		}
2219		break;
2220	default:
2221		break;
2222	}
2223	mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 5);
2224	return check_condition_result;
2225set_mode_changed_ua:
2226	set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2227	return 0;
2228}
2229
2230static int resp_temp_l_pg(unsigned char * arr)
2231{
2232	unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
2233				     0x0, 0x1, 0x3, 0x2, 0x0, 65,
2234		};
2235
2236        memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
2237        return sizeof(temp_l_pg);
2238}
2239
2240static int resp_ie_l_pg(unsigned char * arr)
2241{
2242	unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
2243		};
2244
2245        memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
2246	if (iec_m_pg[2] & 0x4) {	/* TEST bit set */
2247		arr[4] = THRESHOLD_EXCEEDED;
2248		arr[5] = 0xff;
2249	}
2250        return sizeof(ie_l_pg);
 
 
 
 
 
 
 
 
 
 
 
 
2251}
2252
2253#define SDEBUG_MAX_LSENSE_SZ 512
2254
2255static int resp_log_sense(struct scsi_cmnd * scp,
2256                          struct sdebug_dev_info * devip)
2257{
2258	int ppc, sp, pcontrol, pcode, subpcode, alloc_len, len, n;
 
2259	unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
2260	unsigned char *cmd = scp->cmnd;
2261
2262	memset(arr, 0, sizeof(arr));
2263	ppc = cmd[1] & 0x2;
2264	sp = cmd[1] & 0x1;
2265	if (ppc || sp) {
2266		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, ppc ? 1 : 0);
2267		return check_condition_result;
2268	}
2269	pcontrol = (cmd[2] & 0xc0) >> 6;
2270	pcode = cmd[2] & 0x3f;
2271	subpcode = cmd[3] & 0xff;
2272	alloc_len = get_unaligned_be16(cmd + 7);
2273	arr[0] = pcode;
2274	if (0 == subpcode) {
2275		switch (pcode) {
2276		case 0x0:	/* Supported log pages log page */
2277			n = 4;
2278			arr[n++] = 0x0;		/* this page */
2279			arr[n++] = 0xd;		/* Temperature */
2280			arr[n++] = 0x2f;	/* Informational exceptions */
2281			arr[3] = n - 4;
2282			break;
2283		case 0xd:	/* Temperature log page */
2284			arr[3] = resp_temp_l_pg(arr + 4);
2285			break;
2286		case 0x2f:	/* Informational exceptions log page */
2287			arr[3] = resp_ie_l_pg(arr + 4);
2288			break;
2289		default:
2290			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2291			return check_condition_result;
2292		}
2293	} else if (0xff == subpcode) {
2294		arr[0] |= 0x40;
2295		arr[1] = subpcode;
2296		switch (pcode) {
2297		case 0x0:	/* Supported log pages and subpages log page */
2298			n = 4;
2299			arr[n++] = 0x0;
2300			arr[n++] = 0x0;		/* 0,0 page */
2301			arr[n++] = 0x0;
2302			arr[n++] = 0xff;	/* this page */
2303			arr[n++] = 0xd;
2304			arr[n++] = 0x0;		/* Temperature */
 
 
 
 
2305			arr[n++] = 0x2f;
2306			arr[n++] = 0x0;	/* Informational exceptions */
 
 
2307			arr[3] = n - 4;
2308			break;
2309		case 0xd:	/* Temperature subpages */
2310			n = 4;
2311			arr[n++] = 0xd;
2312			arr[n++] = 0x0;		/* Temperature */
 
 
 
 
2313			arr[3] = n - 4;
2314			break;
2315		case 0x2f:	/* Informational exceptions subpages */
2316			n = 4;
2317			arr[n++] = 0x2f;
2318			arr[n++] = 0x0;		/* Informational exceptions */
 
 
2319			arr[3] = n - 4;
2320			break;
2321		default:
2322			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2323			return check_condition_result;
2324		}
 
 
 
 
 
 
 
 
 
2325	} else {
2326		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2327		return check_condition_result;
2328	}
2329	len = min(get_unaligned_be16(arr + 2) + 4, alloc_len);
2330	return fill_from_dev_buffer(scp, arr,
2331		    min(len, SDEBUG_MAX_INQ_ARR_SZ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2332}
2333
2334static int check_device_access_params(struct scsi_cmnd *scp,
2335				      unsigned long long lba, unsigned int num)
2336{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2337	if (lba + num > sdebug_capacity) {
2338		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2339		return check_condition_result;
2340	}
2341	/* transfer length excessive (tie in to block limits VPD page) */
2342	if (num > sdebug_store_sectors) {
2343		/* needs work to find which cdb byte 'num' comes from */
2344		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2345		return check_condition_result;
2346	}
 
 
 
 
 
 
 
2347	return 0;
2348}
2349
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2350/* Returns number of bytes copied or -1 if error. */
2351static int do_device_access(struct scsi_cmnd *scmd, u64 lba, u32 num,
2352			    bool do_write)
 
2353{
2354	int ret;
2355	u64 block, rest = 0;
2356	struct scsi_data_buffer *sdb;
2357	enum dma_data_direction dir;
 
 
 
 
 
 
 
 
 
 
2358
2359	if (do_write) {
2360		sdb = scsi_out(scmd);
2361		dir = DMA_TO_DEVICE;
 
2362	} else {
2363		sdb = scsi_in(scmd);
2364		dir = DMA_FROM_DEVICE;
2365	}
2366
2367	if (!sdb->length)
2368		return 0;
2369	if (!(scsi_bidi_cmnd(scmd) || scmd->sc_data_direction == dir))
2370		return -1;
2371
 
 
 
 
 
2372	block = do_div(lba, sdebug_store_sectors);
2373	if (block + num > sdebug_store_sectors)
2374		rest = block + num - sdebug_store_sectors;
2375
2376	ret = sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
2377		   fake_storep + (block * sdebug_sector_size),
2378		   (num - rest) * sdebug_sector_size, 0, do_write);
2379	if (ret != (num - rest) * sdebug_sector_size)
2380		return ret;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2381
2382	if (rest) {
2383		ret += sg_copy_buffer(sdb->table.sgl, sdb->table.nents,
2384			    fake_storep, rest * sdebug_sector_size,
2385			    (num - rest) * sdebug_sector_size, do_write);
2386	}
2387
2388	return ret;
 
 
 
 
 
2389}
2390
2391/* If fake_store(lba,num) compares equal to arr(num), then copy top half of
2392 * arr into fake_store(lba,num) and return true. If comparison fails then
2393 * return false. */
2394static bool comp_write_worker(u64 lba, u32 num, const u8 *arr)
 
2395{
2396	bool res;
2397	u64 block, rest = 0;
2398	u32 store_blks = sdebug_store_sectors;
2399	u32 lb_size = sdebug_sector_size;
 
2400
2401	block = do_div(lba, store_blks);
2402	if (block + num > store_blks)
2403		rest = block + num - store_blks;
2404
2405	res = !memcmp(fake_storep + (block * lb_size), arr,
2406		      (num - rest) * lb_size);
2407	if (!res)
2408		return res;
2409	if (rest)
2410		res = memcmp(fake_storep, arr + ((num - rest) * lb_size),
2411			     rest * lb_size);
2412	if (!res)
2413		return res;
 
 
2414	arr += num * lb_size;
2415	memcpy(fake_storep + (block * lb_size), arr, (num - rest) * lb_size);
2416	if (rest)
2417		memcpy(fake_storep, arr + ((num - rest) * lb_size),
2418		       rest * lb_size);
2419	return res;
2420}
2421
2422static __be16 dif_compute_csum(const void *buf, int len)
2423{
2424	__be16 csum;
2425
2426	if (sdebug_guard)
2427		csum = (__force __be16)ip_compute_csum(buf, len);
2428	else
2429		csum = cpu_to_be16(crc_t10dif(buf, len));
2430
2431	return csum;
2432}
2433
2434static int dif_verify(struct t10_pi_tuple *sdt, const void *data,
2435		      sector_t sector, u32 ei_lba)
2436{
2437	__be16 csum = dif_compute_csum(data, sdebug_sector_size);
2438
2439	if (sdt->guard_tag != csum) {
2440		pr_err("GUARD check failed on sector %lu rcvd 0x%04x, data 0x%04x\n",
2441			(unsigned long)sector,
2442			be16_to_cpu(sdt->guard_tag),
2443			be16_to_cpu(csum));
2444		return 0x01;
2445	}
2446	if (sdebug_dif == T10_PI_TYPE1_PROTECTION &&
2447	    be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
2448		pr_err("REF check failed on sector %lu\n",
2449			(unsigned long)sector);
2450		return 0x03;
2451	}
2452	if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
2453	    be32_to_cpu(sdt->ref_tag) != ei_lba) {
2454		pr_err("REF check failed on sector %lu\n",
2455			(unsigned long)sector);
2456		return 0x03;
2457	}
2458	return 0;
2459}
2460
2461static void dif_copy_prot(struct scsi_cmnd *SCpnt, sector_t sector,
2462			  unsigned int sectors, bool read)
2463{
2464	size_t resid;
2465	void *paddr;
 
 
 
2466	const void *dif_store_end = dif_storep + sdebug_store_sectors;
2467	struct sg_mapping_iter miter;
2468
2469	/* Bytes of protection data to copy into sgl */
2470	resid = sectors * sizeof(*dif_storep);
2471
2472	sg_miter_start(&miter, scsi_prot_sglist(SCpnt),
2473			scsi_prot_sg_count(SCpnt), SG_MITER_ATOMIC |
2474			(read ? SG_MITER_TO_SG : SG_MITER_FROM_SG));
2475
2476	while (sg_miter_next(&miter) && resid > 0) {
2477		size_t len = min(miter.length, resid);
2478		void *start = dif_store(sector);
2479		size_t rest = 0;
2480
2481		if (dif_store_end < start + len)
2482			rest = start + len - dif_store_end;
2483
2484		paddr = miter.addr;
2485
2486		if (read)
2487			memcpy(paddr, start, len - rest);
2488		else
2489			memcpy(start, paddr, len - rest);
2490
2491		if (rest) {
2492			if (read)
2493				memcpy(paddr + len - rest, dif_storep, rest);
2494			else
2495				memcpy(dif_storep, paddr + len - rest, rest);
2496		}
2497
2498		sector += len / sizeof(*dif_storep);
2499		resid -= len;
2500	}
2501	sg_miter_stop(&miter);
2502}
2503
2504static int prot_verify_read(struct scsi_cmnd *SCpnt, sector_t start_sec,
2505			    unsigned int sectors, u32 ei_lba)
2506{
 
2507	unsigned int i;
 
 
 
2508	struct t10_pi_tuple *sdt;
2509	sector_t sector;
2510
2511	for (i = 0; i < sectors; i++, ei_lba++) {
2512		int ret;
2513
2514		sector = start_sec + i;
2515		sdt = dif_store(sector);
2516
2517		if (sdt->app_tag == cpu_to_be16(0xffff))
2518			continue;
2519
2520		ret = dif_verify(sdt, fake_store(sector), sector, ei_lba);
2521		if (ret) {
2522			dif_errors++;
2523			return ret;
 
 
 
 
 
 
 
 
 
 
2524		}
2525	}
2526
2527	dif_copy_prot(SCpnt, start_sec, sectors, true);
2528	dix_reads++;
2529
2530	return 0;
2531}
2532
2533static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2534{
2535	u8 *cmd = scp->cmnd;
2536	struct sdebug_queued_cmd *sqcp;
2537	u64 lba;
2538	u32 num;
2539	u32 ei_lba;
2540	unsigned long iflags;
2541	int ret;
2542	bool check_prot;
 
 
 
2543
2544	switch (cmd[0]) {
2545	case READ_16:
2546		ei_lba = 0;
2547		lba = get_unaligned_be64(cmd + 2);
2548		num = get_unaligned_be32(cmd + 10);
2549		check_prot = true;
2550		break;
2551	case READ_10:
2552		ei_lba = 0;
2553		lba = get_unaligned_be32(cmd + 2);
2554		num = get_unaligned_be16(cmd + 7);
2555		check_prot = true;
2556		break;
2557	case READ_6:
2558		ei_lba = 0;
2559		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2560		      (u32)(cmd[1] & 0x1f) << 16;
2561		num = (0 == cmd[4]) ? 256 : cmd[4];
2562		check_prot = true;
2563		break;
2564	case READ_12:
2565		ei_lba = 0;
2566		lba = get_unaligned_be32(cmd + 2);
2567		num = get_unaligned_be32(cmd + 6);
2568		check_prot = true;
2569		break;
2570	case XDWRITEREAD_10:
2571		ei_lba = 0;
2572		lba = get_unaligned_be32(cmd + 2);
2573		num = get_unaligned_be16(cmd + 7);
2574		check_prot = false;
2575		break;
2576	default:	/* assume READ(32) */
2577		lba = get_unaligned_be64(cmd + 12);
2578		ei_lba = get_unaligned_be32(cmd + 20);
2579		num = get_unaligned_be32(cmd + 28);
2580		check_prot = false;
2581		break;
2582	}
2583	if (unlikely(have_dif_prot && check_prot)) {
2584		if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
2585		    (cmd[1] & 0xe0)) {
2586			mk_sense_invalid_opcode(scp);
2587			return check_condition_result;
2588		}
2589		if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
2590		     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
2591		    (cmd[1] & 0xe0) == 0)
2592			sdev_printk(KERN_ERR, scp->device, "Unprotected RD "
2593				    "to DIF device\n");
2594	}
2595	if (unlikely(sdebug_any_injecting_opt)) {
2596		sqcp = (struct sdebug_queued_cmd *)scp->host_scribble;
2597
2598		if (sqcp) {
2599			if (sqcp->inj_short)
2600				num /= 2;
2601		}
2602	} else
2603		sqcp = NULL;
2604
2605	/* inline check_device_access_params() */
2606	if (unlikely(lba + num > sdebug_capacity)) {
2607		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2608		return check_condition_result;
2609	}
2610	/* transfer length excessive (tie in to block limits VPD page) */
2611	if (unlikely(num > sdebug_store_sectors)) {
2612		/* needs work to find which cdb byte 'num' comes from */
2613		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2614		return check_condition_result;
2615	}
2616
 
 
 
 
 
 
 
2617	if (unlikely((SDEBUG_OPT_MEDIUM_ERR & sdebug_opts) &&
2618		     (lba <= (OPT_MEDIUM_ERR_ADDR + OPT_MEDIUM_ERR_NUM - 1)) &&
2619		     ((lba + num) > OPT_MEDIUM_ERR_ADDR))) {
2620		/* claim unrecoverable read error */
2621		mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
2622		/* set info field and valid bit for fixed descriptor */
2623		if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
2624			scp->sense_buffer[0] |= 0x80;	/* Valid bit */
2625			ret = (lba < OPT_MEDIUM_ERR_ADDR)
2626			      ? OPT_MEDIUM_ERR_ADDR : (int)lba;
2627			put_unaligned_be32(ret, scp->sense_buffer + 3);
2628		}
2629		scsi_set_resid(scp, scsi_bufflen(scp));
2630		return check_condition_result;
2631	}
2632
2633	read_lock_irqsave(&atomic_rw, iflags);
 
 
 
 
2634
2635	/* DIX + T10 DIF */
2636	if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
2637		int prot_ret = prot_verify_read(scp, lba, num, ei_lba);
2638
2639		if (prot_ret) {
2640			read_unlock_irqrestore(&atomic_rw, iflags);
2641			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, prot_ret);
2642			return illegal_condition_result;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2643		}
2644	}
2645
2646	ret = do_device_access(scp, lba, num, false);
2647	read_unlock_irqrestore(&atomic_rw, iflags);
 
2648	if (unlikely(ret == -1))
2649		return DID_ERROR << 16;
2650
2651	scsi_in(scp)->resid = scsi_bufflen(scp) - ret;
2652
2653	if (unlikely(sqcp)) {
2654		if (sqcp->inj_recovered) {
2655			mk_sense_buffer(scp, RECOVERED_ERROR,
2656					THRESHOLD_EXCEEDED, 0);
 
2657			return check_condition_result;
2658		} else if (sqcp->inj_transport) {
2659			mk_sense_buffer(scp, ABORTED_COMMAND,
2660					TRANSPORT_PROBLEM, ACK_NAK_TO);
2661			return check_condition_result;
2662		} else if (sqcp->inj_dif) {
2663			/* Logical block guard check failed */
2664			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
 
2665			return illegal_condition_result;
2666		} else if (sqcp->inj_dix) {
2667			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
 
2668			return illegal_condition_result;
2669		}
2670	}
2671	return 0;
2672}
2673
2674static void dump_sector(unsigned char *buf, int len)
2675{
2676	int i, j, n;
2677
2678	pr_err(">>> Sector Dump <<<\n");
2679	for (i = 0 ; i < len ; i += 16) {
2680		char b[128];
2681
2682		for (j = 0, n = 0; j < 16; j++) {
2683			unsigned char c = buf[i+j];
2684
2685			if (c >= 0x20 && c < 0x7e)
2686				n += scnprintf(b + n, sizeof(b) - n,
2687					       " %c ", buf[i+j]);
2688			else
2689				n += scnprintf(b + n, sizeof(b) - n,
2690					       "%02x ", buf[i+j]);
2691		}
2692		pr_err("%04d: %s\n", i, b);
2693	}
2694}
2695
2696static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
2697			     unsigned int sectors, u32 ei_lba)
2698{
2699	int ret;
2700	struct t10_pi_tuple *sdt;
2701	void *daddr;
2702	sector_t sector = start_sec;
2703	int ppage_offset;
2704	int dpage_offset;
2705	struct sg_mapping_iter diter;
2706	struct sg_mapping_iter piter;
2707
2708	BUG_ON(scsi_sg_count(SCpnt) == 0);
2709	BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
2710
2711	sg_miter_start(&piter, scsi_prot_sglist(SCpnt),
2712			scsi_prot_sg_count(SCpnt),
2713			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2714	sg_miter_start(&diter, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
2715			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2716
2717	/* For each protection page */
2718	while (sg_miter_next(&piter)) {
2719		dpage_offset = 0;
2720		if (WARN_ON(!sg_miter_next(&diter))) {
2721			ret = 0x01;
2722			goto out;
2723		}
2724
2725		for (ppage_offset = 0; ppage_offset < piter.length;
2726		     ppage_offset += sizeof(struct t10_pi_tuple)) {
2727			/* If we're at the end of the current
2728			 * data page advance to the next one
2729			 */
2730			if (dpage_offset >= diter.length) {
2731				if (WARN_ON(!sg_miter_next(&diter))) {
2732					ret = 0x01;
2733					goto out;
2734				}
2735				dpage_offset = 0;
2736			}
2737
2738			sdt = piter.addr + ppage_offset;
2739			daddr = diter.addr + dpage_offset;
2740
2741			ret = dif_verify(sdt, daddr, sector, ei_lba);
2742			if (ret) {
2743				dump_sector(daddr, sdebug_sector_size);
2744				goto out;
2745			}
2746
2747			sector++;
2748			ei_lba++;
2749			dpage_offset += sdebug_sector_size;
2750		}
2751		diter.consumed = dpage_offset;
2752		sg_miter_stop(&diter);
2753	}
2754	sg_miter_stop(&piter);
2755
2756	dif_copy_prot(SCpnt, start_sec, sectors, false);
2757	dix_writes++;
2758
2759	return 0;
2760
2761out:
2762	dif_errors++;
2763	sg_miter_stop(&diter);
2764	sg_miter_stop(&piter);
2765	return ret;
2766}
2767
2768static unsigned long lba_to_map_index(sector_t lba)
2769{
2770	if (sdebug_unmap_alignment)
2771		lba += sdebug_unmap_granularity - sdebug_unmap_alignment;
2772	sector_div(lba, sdebug_unmap_granularity);
2773	return lba;
2774}
2775
2776static sector_t map_index_to_lba(unsigned long index)
2777{
2778	sector_t lba = index * sdebug_unmap_granularity;
2779
2780	if (sdebug_unmap_alignment)
2781		lba -= sdebug_unmap_granularity - sdebug_unmap_alignment;
2782	return lba;
2783}
2784
2785static unsigned int map_state(sector_t lba, unsigned int *num)
 
2786{
2787	sector_t end;
2788	unsigned int mapped;
2789	unsigned long index;
2790	unsigned long next;
2791
2792	index = lba_to_map_index(lba);
2793	mapped = test_bit(index, map_storep);
2794
2795	if (mapped)
2796		next = find_next_zero_bit(map_storep, map_size, index);
2797	else
2798		next = find_next_bit(map_storep, map_size, index);
2799
2800	end = min_t(sector_t, sdebug_store_sectors,  map_index_to_lba(next));
2801	*num = end - lba;
2802	return mapped;
2803}
2804
2805static void map_region(sector_t lba, unsigned int len)
 
2806{
2807	sector_t end = lba + len;
2808
2809	while (lba < end) {
2810		unsigned long index = lba_to_map_index(lba);
2811
2812		if (index < map_size)
2813			set_bit(index, map_storep);
2814
2815		lba = map_index_to_lba(index + 1);
2816	}
2817}
2818
2819static void unmap_region(sector_t lba, unsigned int len)
 
2820{
2821	sector_t end = lba + len;
 
2822
2823	while (lba < end) {
2824		unsigned long index = lba_to_map_index(lba);
2825
2826		if (lba == map_index_to_lba(index) &&
2827		    lba + sdebug_unmap_granularity <= end &&
2828		    index < map_size) {
2829			clear_bit(index, map_storep);
2830			if (sdebug_lbprz) {  /* for LBPRZ=2 return 0xff_s */
2831				memset(fake_storep +
2832				       lba * sdebug_sector_size,
2833				       (sdebug_lbprz & 1) ? 0 : 0xff,
2834				       sdebug_sector_size *
2835				       sdebug_unmap_granularity);
2836			}
2837			if (dif_storep) {
2838				memset(dif_storep + lba, 0xff,
2839				       sizeof(*dif_storep) *
2840				       sdebug_unmap_granularity);
2841			}
2842		}
2843		lba = map_index_to_lba(index + 1);
2844	}
2845}
2846
2847static int resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2848{
2849	u8 *cmd = scp->cmnd;
2850	u64 lba;
2851	u32 num;
 
2852	u32 ei_lba;
2853	unsigned long iflags;
2854	int ret;
2855	bool check_prot;
 
 
 
2856
2857	switch (cmd[0]) {
2858	case WRITE_16:
2859		ei_lba = 0;
2860		lba = get_unaligned_be64(cmd + 2);
2861		num = get_unaligned_be32(cmd + 10);
 
2862		check_prot = true;
2863		break;
2864	case WRITE_10:
2865		ei_lba = 0;
2866		lba = get_unaligned_be32(cmd + 2);
 
2867		num = get_unaligned_be16(cmd + 7);
2868		check_prot = true;
2869		break;
2870	case WRITE_6:
2871		ei_lba = 0;
2872		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2873		      (u32)(cmd[1] & 0x1f) << 16;
2874		num = (0 == cmd[4]) ? 256 : cmd[4];
2875		check_prot = true;
2876		break;
2877	case WRITE_12:
2878		ei_lba = 0;
2879		lba = get_unaligned_be32(cmd + 2);
2880		num = get_unaligned_be32(cmd + 6);
 
2881		check_prot = true;
2882		break;
2883	case 0x53:	/* XDWRITEREAD(10) */
2884		ei_lba = 0;
2885		lba = get_unaligned_be32(cmd + 2);
 
2886		num = get_unaligned_be16(cmd + 7);
2887		check_prot = false;
2888		break;
2889	default:	/* assume WRITE(32) */
 
2890		lba = get_unaligned_be64(cmd + 12);
2891		ei_lba = get_unaligned_be32(cmd + 20);
2892		num = get_unaligned_be32(cmd + 28);
2893		check_prot = false;
2894		break;
2895	}
2896	if (unlikely(have_dif_prot && check_prot)) {
2897		if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
2898		    (cmd[1] & 0xe0)) {
2899			mk_sense_invalid_opcode(scp);
2900			return check_condition_result;
2901		}
2902		if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
2903		     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
2904		    (cmd[1] & 0xe0) == 0)
2905			sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
2906				    "to DIF device\n");
2907	}
2908
2909	/* inline check_device_access_params() */
2910	if (unlikely(lba + num > sdebug_capacity)) {
2911		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2912		return check_condition_result;
 
2913	}
2914	/* transfer length excessive (tie in to block limits VPD page) */
2915	if (unlikely(num > sdebug_store_sectors)) {
2916		/* needs work to find which cdb byte 'num' comes from */
2917		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2918		return check_condition_result;
 
2919	}
2920
2921	write_lock_irqsave(&atomic_rw, iflags);
2922
2923	/* DIX + T10 DIF */
2924	if (unlikely(sdebug_dix && scsi_prot_sg_count(scp))) {
2925		int prot_ret = prot_verify_write(scp, lba, num, ei_lba);
2926
2927		if (prot_ret) {
2928			write_unlock_irqrestore(&atomic_rw, iflags);
2929			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, prot_ret);
2930			return illegal_condition_result;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2931		}
2932	}
2933
2934	ret = do_device_access(scp, lba, num, true);
2935	if (unlikely(scsi_debug_lbp()))
2936		map_region(lba, num);
2937	write_unlock_irqrestore(&atomic_rw, iflags);
 
 
 
 
 
 
2938	if (unlikely(-1 == ret))
2939		return DID_ERROR << 16;
2940	else if (unlikely(sdebug_verbose &&
2941			  (ret < (num * sdebug_sector_size))))
2942		sdev_printk(KERN_INFO, scp->device,
2943			    "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
2944			    my_name, num * sdebug_sector_size, ret);
2945
2946	if (unlikely(sdebug_any_injecting_opt)) {
2947		struct sdebug_queued_cmd *sqcp =
2948				(struct sdebug_queued_cmd *)scp->host_scribble;
2949
2950		if (sqcp) {
2951			if (sqcp->inj_recovered) {
2952				mk_sense_buffer(scp, RECOVERED_ERROR,
2953						THRESHOLD_EXCEEDED, 0);
2954				return check_condition_result;
2955			} else if (sqcp->inj_dif) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2956				/* Logical block guard check failed */
2957				mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
2958				return illegal_condition_result;
2959			} else if (sqcp->inj_dix) {
 
 
2960				mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
2961				return illegal_condition_result;
 
 
2962			}
2963		}
 
 
2964	}
2965	return 0;
 
 
 
 
 
2966}
2967
2968static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num,
2969			   u32 ei_lba, bool unmap, bool ndob)
2970{
2971	unsigned long iflags;
 
2972	unsigned long long i;
 
 
2973	int ret;
2974	u64 lba_off;
 
 
 
 
 
 
 
 
 
2975
2976	ret = check_device_access_params(scp, lba, num);
2977	if (ret)
2978		return ret;
2979
2980	write_lock_irqsave(&atomic_rw, iflags);
2981
2982	if (unmap && scsi_debug_lbp()) {
2983		unmap_region(lba, num);
2984		goto out;
2985	}
2986
2987	lba_off = lba * sdebug_sector_size;
2988	/* if ndob then zero 1 logical block, else fetch 1 logical block */
 
 
 
2989	if (ndob) {
2990		memset(fake_storep + lba_off, 0, sdebug_sector_size);
2991		ret = 0;
2992	} else
2993		ret = fetch_to_dev_buffer(scp, fake_storep + lba_off,
2994					  sdebug_sector_size);
2995
2996	if (-1 == ret) {
2997		write_unlock_irqrestore(&atomic_rw, iflags);
2998		return DID_ERROR << 16;
2999	} else if (sdebug_verbose && (ret < (num * sdebug_sector_size)))
3000		sdev_printk(KERN_INFO, scp->device,
3001			    "%s: %s: cdb indicated=%u, IO sent=%d bytes\n",
3002			    my_name, "write same",
3003			    num * sdebug_sector_size, ret);
3004
3005	/* Copy first sector to remaining blocks */
3006	for (i = 1 ; i < num ; i++)
3007		memcpy(fake_storep + ((lba + i) * sdebug_sector_size),
3008		       fake_storep + lba_off,
3009		       sdebug_sector_size);
3010
3011	if (scsi_debug_lbp())
3012		map_region(lba, num);
 
 
 
 
 
3013out:
3014	write_unlock_irqrestore(&atomic_rw, iflags);
3015
3016	return 0;
3017}
3018
3019static int resp_write_same_10(struct scsi_cmnd *scp,
3020			      struct sdebug_dev_info *devip)
3021{
3022	u8 *cmd = scp->cmnd;
3023	u32 lba;
3024	u16 num;
3025	u32 ei_lba = 0;
3026	bool unmap = false;
3027
3028	if (cmd[1] & 0x8) {
3029		if (sdebug_lbpws10 == 0) {
3030			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3031			return check_condition_result;
3032		} else
3033			unmap = true;
3034	}
3035	lba = get_unaligned_be32(cmd + 2);
3036	num = get_unaligned_be16(cmd + 7);
3037	if (num > sdebug_write_same_length) {
3038		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3039		return check_condition_result;
3040	}
3041	return resp_write_same(scp, lba, num, ei_lba, unmap, false);
3042}
3043
3044static int resp_write_same_16(struct scsi_cmnd *scp,
3045			      struct sdebug_dev_info *devip)
3046{
3047	u8 *cmd = scp->cmnd;
3048	u64 lba;
3049	u32 num;
3050	u32 ei_lba = 0;
3051	bool unmap = false;
3052	bool ndob = false;
3053
3054	if (cmd[1] & 0x8) {	/* UNMAP */
3055		if (sdebug_lbpws == 0) {
3056			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3057			return check_condition_result;
3058		} else
3059			unmap = true;
3060	}
3061	if (cmd[1] & 0x1)  /* NDOB (no data-out buffer, assumes zeroes) */
3062		ndob = true;
3063	lba = get_unaligned_be64(cmd + 2);
3064	num = get_unaligned_be32(cmd + 10);
3065	if (num > sdebug_write_same_length) {
3066		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
3067		return check_condition_result;
3068	}
3069	return resp_write_same(scp, lba, num, ei_lba, unmap, ndob);
3070}
3071
3072/* Note the mode field is in the same position as the (lower) service action
3073 * field. For the Report supported operation codes command, SPC-4 suggests
3074 * each mode of this command should be reported separately; for future. */
3075static int resp_write_buffer(struct scsi_cmnd *scp,
3076			     struct sdebug_dev_info *devip)
3077{
3078	u8 *cmd = scp->cmnd;
3079	struct scsi_device *sdp = scp->device;
3080	struct sdebug_dev_info *dp;
3081	u8 mode;
3082
3083	mode = cmd[1] & 0x1f;
3084	switch (mode) {
3085	case 0x4:	/* download microcode (MC) and activate (ACT) */
3086		/* set UAs on this device only */
3087		set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3088		set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
3089		break;
3090	case 0x5:	/* download MC, save and ACT */
3091		set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
3092		break;
3093	case 0x6:	/* download MC with offsets and ACT */
3094		/* set UAs on most devices (LUs) in this target */
3095		list_for_each_entry(dp,
3096				    &devip->sdbg_host->dev_info_list,
3097				    dev_list)
3098			if (dp->target == sdp->id) {
3099				set_bit(SDEBUG_UA_BUS_RESET, dp->uas_bm);
3100				if (devip != dp)
3101					set_bit(SDEBUG_UA_MICROCODE_CHANGED,
3102						dp->uas_bm);
3103			}
3104		break;
3105	case 0x7:	/* download MC with offsets, save, and ACT */
3106		/* set UA on all devices (LUs) in this target */
3107		list_for_each_entry(dp,
3108				    &devip->sdbg_host->dev_info_list,
3109				    dev_list)
3110			if (dp->target == sdp->id)
3111				set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET,
3112					dp->uas_bm);
3113		break;
3114	default:
3115		/* do nothing for this command for other mode values */
3116		break;
3117	}
3118	return 0;
3119}
3120
3121static int resp_comp_write(struct scsi_cmnd *scp,
3122			   struct sdebug_dev_info *devip)
3123{
3124	u8 *cmd = scp->cmnd;
3125	u8 *arr;
3126	u8 *fake_storep_hold;
3127	u64 lba;
3128	u32 dnum;
3129	u32 lb_size = sdebug_sector_size;
3130	u8 num;
3131	unsigned long iflags;
3132	int ret;
3133	int retval = 0;
3134
3135	lba = get_unaligned_be64(cmd + 2);
3136	num = cmd[13];		/* 1 to a maximum of 255 logical blocks */
3137	if (0 == num)
3138		return 0;	/* degenerate case, not an error */
3139	if (sdebug_dif == T10_PI_TYPE2_PROTECTION &&
3140	    (cmd[1] & 0xe0)) {
3141		mk_sense_invalid_opcode(scp);
3142		return check_condition_result;
3143	}
3144	if ((sdebug_dif == T10_PI_TYPE1_PROTECTION ||
3145	     sdebug_dif == T10_PI_TYPE3_PROTECTION) &&
3146	    (cmd[1] & 0xe0) == 0)
3147		sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
3148			    "to DIF device\n");
3149
3150	/* inline check_device_access_params() */
3151	if (lba + num > sdebug_capacity) {
3152		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3153		return check_condition_result;
3154	}
3155	/* transfer length excessive (tie in to block limits VPD page) */
3156	if (num > sdebug_store_sectors) {
3157		/* needs work to find which cdb byte 'num' comes from */
3158		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3159		return check_condition_result;
3160	}
3161	dnum = 2 * num;
3162	arr = kzalloc(dnum * lb_size, GFP_ATOMIC);
3163	if (NULL == arr) {
3164		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3165				INSUFF_RES_ASCQ);
3166		return check_condition_result;
3167	}
3168
3169	write_lock_irqsave(&atomic_rw, iflags);
3170
3171	/* trick do_device_access() to fetch both compare and write buffers
3172	 * from data-in into arr. Safe (atomic) since write_lock held. */
3173	fake_storep_hold = fake_storep;
3174	fake_storep = arr;
3175	ret = do_device_access(scp, 0, dnum, true);
3176	fake_storep = fake_storep_hold;
3177	if (ret == -1) {
3178		retval = DID_ERROR << 16;
3179		goto cleanup;
3180	} else if (sdebug_verbose && (ret < (dnum * lb_size)))
3181		sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
3182			    "indicated=%u, IO sent=%d bytes\n", my_name,
3183			    dnum * lb_size, ret);
3184	if (!comp_write_worker(lba, num, arr)) {
 
 
 
3185		mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
3186		retval = check_condition_result;
3187		goto cleanup;
3188	}
 
 
3189	if (scsi_debug_lbp())
3190		map_region(lba, num);
3191cleanup:
3192	write_unlock_irqrestore(&atomic_rw, iflags);
 
 
3193	kfree(arr);
3194	return retval;
3195}
3196
3197struct unmap_block_desc {
3198	__be64	lba;
3199	__be32	blocks;
3200	__be32	__reserved;
3201};
3202
3203static int resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3204{
3205	unsigned char *buf;
3206	struct unmap_block_desc *desc;
 
3207	unsigned int i, payload_len, descriptors;
3208	int ret;
3209	unsigned long iflags;
3210
3211
3212	if (!scsi_debug_lbp())
3213		return 0;	/* fib and say its done */
3214	payload_len = get_unaligned_be16(scp->cmnd + 7);
3215	BUG_ON(scsi_bufflen(scp) != payload_len);
3216
3217	descriptors = (payload_len - 8) / 16;
3218	if (descriptors > sdebug_unmap_max_desc) {
3219		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3220		return check_condition_result;
3221	}
3222
3223	buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
3224	if (!buf) {
3225		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3226				INSUFF_RES_ASCQ);
3227		return check_condition_result;
3228	}
3229
3230	scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
3231
3232	BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
3233	BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
3234
3235	desc = (void *)&buf[8];
3236
3237	write_lock_irqsave(&atomic_rw, iflags);
3238
3239	for (i = 0 ; i < descriptors ; i++) {
3240		unsigned long long lba = get_unaligned_be64(&desc[i].lba);
3241		unsigned int num = get_unaligned_be32(&desc[i].blocks);
3242
3243		ret = check_device_access_params(scp, lba, num);
3244		if (ret)
3245			goto out;
3246
3247		unmap_region(lba, num);
3248	}
3249
3250	ret = 0;
3251
3252out:
3253	write_unlock_irqrestore(&atomic_rw, iflags);
3254	kfree(buf);
3255
3256	return ret;
3257}
3258
3259#define SDEBUG_GET_LBA_STATUS_LEN 32
3260
3261static int resp_get_lba_status(struct scsi_cmnd *scp,
3262			       struct sdebug_dev_info *devip)
3263{
3264	u8 *cmd = scp->cmnd;
3265	u64 lba;
3266	u32 alloc_len, mapped, num;
 
3267	u8 arr[SDEBUG_GET_LBA_STATUS_LEN];
3268	int ret;
3269
3270	lba = get_unaligned_be64(cmd + 2);
3271	alloc_len = get_unaligned_be32(cmd + 10);
3272
3273	if (alloc_len < 24)
3274		return 0;
3275
3276	ret = check_device_access_params(scp, lba, 1);
3277	if (ret)
3278		return ret;
3279
3280	if (scsi_debug_lbp())
3281		mapped = map_state(lba, &num);
3282	else {
 
 
3283		mapped = 1;
3284		/* following just in case virtual_gb changed */
3285		sdebug_capacity = get_sdebug_capacity();
3286		if (sdebug_capacity - lba <= 0xffffffff)
3287			num = sdebug_capacity - lba;
3288		else
3289			num = 0xffffffff;
3290	}
3291
3292	memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
3293	put_unaligned_be32(20, arr);		/* Parameter Data Length */
3294	put_unaligned_be64(lba, arr + 8);	/* LBA */
3295	put_unaligned_be32(num, arr + 16);	/* Number of blocks */
3296	arr[20] = !mapped;		/* prov_stat=0: mapped; 1: dealloc */
3297
3298	return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
3299}
3300
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3301#define RL_BUCKET_ELEMS 8
3302
3303/* Even though each pseudo target has a REPORT LUNS "well known logical unit"
3304 * (W-LUN), the normal Linux scanning logic does not associate it with a
3305 * device (e.g. /dev/sg7). The following magic will make that association:
3306 *   "cd /sys/class/scsi_host/host<n> ; echo '- - 49409' > scan"
3307 * where <n> is a host number. If there are multiple targets in a host then
3308 * the above will associate a W-LUN to each target. To only get a W-LUN
3309 * for target 2, then use "echo '- 2 49409' > scan" .
3310 */
3311static int resp_report_luns(struct scsi_cmnd *scp,
3312			    struct sdebug_dev_info *devip)
3313{
3314	unsigned char *cmd = scp->cmnd;
3315	unsigned int alloc_len;
3316	unsigned char select_report;
3317	u64 lun;
3318	struct scsi_lun *lun_p;
3319	u8 arr[RL_BUCKET_ELEMS * sizeof(struct scsi_lun)];
3320	unsigned int lun_cnt;	/* normal LUN count (max: 256) */
3321	unsigned int wlun_cnt;	/* report luns W-LUN count */
3322	unsigned int tlun_cnt;	/* total LUN count */
3323	unsigned int rlen;	/* response length (in bytes) */
3324	int k, j, n, res;
3325	unsigned int off_rsp = 0;
3326	const int sz_lun = sizeof(struct scsi_lun);
3327
3328	clear_luns_changed_on_target(devip);
3329
3330	select_report = cmd[2];
3331	alloc_len = get_unaligned_be32(cmd + 6);
3332
3333	if (alloc_len < 4) {
3334		pr_err("alloc len too small %d\n", alloc_len);
3335		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
3336		return check_condition_result;
3337	}
3338
3339	switch (select_report) {
3340	case 0:		/* all LUNs apart from W-LUNs */
3341		lun_cnt = sdebug_max_luns;
3342		wlun_cnt = 0;
3343		break;
3344	case 1:		/* only W-LUNs */
3345		lun_cnt = 0;
3346		wlun_cnt = 1;
3347		break;
3348	case 2:		/* all LUNs */
3349		lun_cnt = sdebug_max_luns;
3350		wlun_cnt = 1;
3351		break;
3352	case 0x10:	/* only administrative LUs */
3353	case 0x11:	/* see SPC-5 */
3354	case 0x12:	/* only subsiduary LUs owned by referenced LU */
3355	default:
3356		pr_debug("select report invalid %d\n", select_report);
3357		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
3358		return check_condition_result;
3359	}
3360
3361	if (sdebug_no_lun_0 && (lun_cnt > 0))
3362		--lun_cnt;
3363
3364	tlun_cnt = lun_cnt + wlun_cnt;
3365	rlen = tlun_cnt * sz_lun;	/* excluding 8 byte header */
3366	scsi_set_resid(scp, scsi_bufflen(scp));
3367	pr_debug("select_report %d luns = %d wluns = %d no_lun0 %d\n",
3368		 select_report, lun_cnt, wlun_cnt, sdebug_no_lun_0);
3369
3370	/* loops rely on sizeof response header same as sizeof lun (both 8) */
3371	lun = sdebug_no_lun_0 ? 1 : 0;
3372	for (k = 0, j = 0, res = 0; true; ++k, j = 0) {
3373		memset(arr, 0, sizeof(arr));
3374		lun_p = (struct scsi_lun *)&arr[0];
3375		if (k == 0) {
3376			put_unaligned_be32(rlen, &arr[0]);
3377			++lun_p;
3378			j = 1;
3379		}
3380		for ( ; j < RL_BUCKET_ELEMS; ++j, ++lun_p) {
3381			if ((k * RL_BUCKET_ELEMS) + j > lun_cnt)
3382				break;
3383			int_to_scsilun(lun++, lun_p);
 
 
3384		}
3385		if (j < RL_BUCKET_ELEMS)
3386			break;
3387		n = j * sz_lun;
3388		res = p_fill_from_dev_buffer(scp, arr, n, off_rsp);
3389		if (res)
3390			return res;
3391		off_rsp += n;
3392	}
3393	if (wlun_cnt) {
3394		int_to_scsilun(SCSI_W_LUN_REPORT_LUNS, lun_p);
3395		++j;
3396	}
3397	if (j > 0)
3398		res = p_fill_from_dev_buffer(scp, arr, j * sz_lun, off_rsp);
3399	return res;
3400}
3401
3402static int resp_xdwriteread(struct scsi_cmnd *scp, unsigned long long lba,
3403			    unsigned int num, struct sdebug_dev_info *devip)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3404{
3405	int j;
3406	unsigned char *kaddr, *buf;
3407	unsigned int offset;
3408	struct scsi_data_buffer *sdb = scsi_in(scp);
3409	struct sg_mapping_iter miter;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3410
3411	/* better not to use temporary buffer. */
3412	buf = kzalloc(scsi_bufflen(scp), GFP_ATOMIC);
3413	if (!buf) {
3414		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3415				INSUFF_RES_ASCQ);
3416		return check_condition_result;
3417	}
3418
3419	scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3420
3421	offset = 0;
3422	sg_miter_start(&miter, sdb->table.sgl, sdb->table.nents,
3423			SG_MITER_ATOMIC | SG_MITER_TO_SG);
3424
3425	while (sg_miter_next(&miter)) {
3426		kaddr = miter.addr;
3427		for (j = 0; j < miter.length; j++)
3428			*(kaddr + j) ^= *(buf + offset + j);
3429
3430		offset += miter.length;
 
 
 
 
 
 
 
 
3431	}
3432	sg_miter_stop(&miter);
3433	kfree(buf);
3434
 
 
 
 
 
3435	return 0;
3436}
3437
3438static int resp_xdwriteread_10(struct scsi_cmnd *scp,
3439			       struct sdebug_dev_info *devip)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3440{
 
 
 
3441	u8 *cmd = scp->cmnd;
3442	u64 lba;
3443	u32 num;
3444	int errsts;
3445
3446	if (!scsi_bidi_cmnd(scp)) {
3447		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3448				INSUFF_RES_ASCQ);
3449		return check_condition_result;
3450	}
3451	errsts = resp_read_dt0(scp, devip);
3452	if (errsts)
3453		return errsts;
3454	if (!(cmd[1] & 0x4)) {		/* DISABLE_WRITE is not set */
3455		errsts = resp_write_dt0(scp, devip);
3456		if (errsts)
3457			return errsts;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3458	}
3459	lba = get_unaligned_be32(cmd + 2);
3460	num = get_unaligned_be16(cmd + 7);
3461	return resp_xdwriteread(scp, lba, num, devip);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3462}
3463
3464static struct sdebug_queue *get_queue(struct scsi_cmnd *cmnd)
3465{
3466	struct sdebug_queue *sqp = sdebug_q_arr;
 
 
 
 
 
3467
3468	if (sdebug_mq_active) {
3469		u32 tag = blk_mq_unique_tag(cmnd->request);
3470		u16 hwq = blk_mq_unique_tag_to_hwq(tag);
 
 
 
 
 
 
 
 
3471
3472		if (unlikely(hwq >= submit_queues)) {
3473			pr_warn("Unexpected hwq=%d, apply modulo\n", hwq);
3474			hwq %= submit_queues;
3475		}
3476		pr_debug("tag=%u, hwq=%d\n", tag, hwq);
3477		return sqp + hwq;
3478	} else
3479		return sqp;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3480}
3481
3482/* Queued (deferred) command completions converge here. */
3483static void sdebug_q_cmd_complete(struct sdebug_defer *sd_dp)
3484{
3485	int qc_idx;
3486	int retiring = 0;
3487	unsigned long iflags;
3488	struct sdebug_queue *sqp;
3489	struct sdebug_queued_cmd *sqcp;
3490	struct scsi_cmnd *scp;
3491	struct sdebug_dev_info *devip;
3492
3493	qc_idx = sd_dp->qc_idx;
3494	sqp = sdebug_q_arr + sd_dp->sqa_idx;
3495	if (sdebug_statistics) {
3496		atomic_inc(&sdebug_completions);
3497		if (raw_smp_processor_id() != sd_dp->issuing_cpu)
3498			atomic_inc(&sdebug_miss_cpus);
3499	}
3500	if (unlikely((qc_idx < 0) || (qc_idx >= SDEBUG_CANQUEUE))) {
3501		pr_err("wild qc_idx=%d\n", qc_idx);
3502		return;
 
3503	}
3504	spin_lock_irqsave(&sqp->qc_lock, iflags);
3505	sqcp = &sqp->qc_arr[qc_idx];
3506	scp = sqcp->a_cmnd;
3507	if (unlikely(scp == NULL)) {
3508		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3509		pr_err("scp is NULL, sqa_idx=%d, qc_idx=%d\n",
3510		       sd_dp->sqa_idx, qc_idx);
3511		return;
3512	}
3513	devip = (struct sdebug_dev_info *)scp->device->hostdata;
3514	if (likely(devip))
3515		atomic_dec(&devip->num_in_q);
3516	else
3517		pr_err("devip=NULL\n");
3518	if (unlikely(atomic_read(&retired_max_queue) > 0))
3519		retiring = 1;
3520
3521	sqcp->a_cmnd = NULL;
3522	if (unlikely(!test_and_clear_bit(qc_idx, sqp->in_use_bm))) {
3523		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3524		pr_err("Unexpected completion\n");
3525		return;
3526	}
3527
3528	if (unlikely(retiring)) {	/* user has reduced max_queue */
3529		int k, retval;
3530
3531		retval = atomic_read(&retired_max_queue);
3532		if (qc_idx >= retval) {
3533			spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3534			pr_err("index %d too large\n", retval);
3535			return;
3536		}
3537		k = find_last_bit(sqp->in_use_bm, retval);
3538		if ((k < sdebug_max_queue) || (k == retval))
3539			atomic_set(&retired_max_queue, 0);
3540		else
3541			atomic_set(&retired_max_queue, k + 1);
3542	}
3543	spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3544	scp->scsi_done(scp); /* callback to mid level */
3545}
3546
3547/* When high resolution timer goes off this function is called. */
3548static enum hrtimer_restart sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
3549{
3550	struct sdebug_defer *sd_dp = container_of(timer, struct sdebug_defer,
3551						  hrt);
3552	sdebug_q_cmd_complete(sd_dp);
3553	return HRTIMER_NORESTART;
3554}
3555
3556/* When work queue schedules work, it calls this function. */
3557static void sdebug_q_cmd_wq_complete(struct work_struct *work)
3558{
3559	struct sdebug_defer *sd_dp = container_of(work, struct sdebug_defer,
3560						  ew.work);
3561	sdebug_q_cmd_complete(sd_dp);
3562}
3563
3564static bool got_shared_uuid;
3565static uuid_be shared_uuid;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3566
3567static struct sdebug_dev_info *sdebug_device_create(
3568			struct sdebug_host_info *sdbg_host, gfp_t flags)
3569{
3570	struct sdebug_dev_info *devip;
3571
3572	devip = kzalloc(sizeof(*devip), flags);
3573	if (devip) {
3574		if (sdebug_uuid_ctl == 1)
3575			uuid_be_gen(&devip->lu_name);
3576		else if (sdebug_uuid_ctl == 2) {
3577			if (got_shared_uuid)
3578				devip->lu_name = shared_uuid;
3579			else {
3580				uuid_be_gen(&shared_uuid);
3581				got_shared_uuid = true;
3582				devip->lu_name = shared_uuid;
3583			}
3584		}
3585		devip->sdbg_host = sdbg_host;
 
 
 
 
 
 
 
 
 
 
 
 
 
3586		list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
3587	}
3588	return devip;
3589}
3590
3591static struct sdebug_dev_info *find_build_dev_info(struct scsi_device *sdev)
3592{
3593	struct sdebug_host_info *sdbg_host;
3594	struct sdebug_dev_info *open_devip = NULL;
3595	struct sdebug_dev_info *devip;
3596
3597	sdbg_host = *(struct sdebug_host_info **)shost_priv(sdev->host);
3598	if (!sdbg_host) {
3599		pr_err("Host info NULL\n");
3600		return NULL;
3601        }
3602	list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
3603		if ((devip->used) && (devip->channel == sdev->channel) &&
3604                    (devip->target == sdev->id) &&
3605                    (devip->lun == sdev->lun))
3606                        return devip;
3607		else {
3608			if ((!devip->used) && (!open_devip))
3609				open_devip = devip;
3610		}
3611	}
3612	if (!open_devip) { /* try and make a new one */
3613		open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
3614		if (!open_devip) {
3615			pr_err("out of memory at line %d\n", __LINE__);
3616			return NULL;
3617		}
3618	}
3619
3620	open_devip->channel = sdev->channel;
3621	open_devip->target = sdev->id;
3622	open_devip->lun = sdev->lun;
3623	open_devip->sdbg_host = sdbg_host;
3624	atomic_set(&open_devip->num_in_q, 0);
3625	set_bit(SDEBUG_UA_POR, open_devip->uas_bm);
3626	open_devip->used = true;
3627	return open_devip;
3628}
3629
3630static int scsi_debug_slave_alloc(struct scsi_device *sdp)
3631{
3632	if (sdebug_verbose)
3633		pr_info("slave_alloc <%u %u %u %llu>\n",
3634		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3635	queue_flag_set_unlocked(QUEUE_FLAG_BIDI, sdp->request_queue);
3636	return 0;
3637}
3638
3639static int scsi_debug_slave_configure(struct scsi_device *sdp)
3640{
3641	struct sdebug_dev_info *devip =
3642			(struct sdebug_dev_info *)sdp->hostdata;
 
3643
3644	if (sdebug_verbose)
3645		pr_info("slave_configure <%u %u %u %llu>\n",
3646		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3647	if (sdp->host->max_cmd_len != SDEBUG_MAX_CMD_LEN)
3648		sdp->host->max_cmd_len = SDEBUG_MAX_CMD_LEN;
3649	if (devip == NULL) {
3650		devip = find_build_dev_info(sdp);
3651		if (devip == NULL)
3652			return 1;  /* no resources, will be marked offline */
3653	}
3654	sdp->hostdata = devip;
3655	blk_queue_max_segment_size(sdp->request_queue, -1U);
3656	if (sdebug_no_uld)
3657		sdp->no_uld_attach = 1;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3658	return 0;
3659}
3660
3661static void scsi_debug_slave_destroy(struct scsi_device *sdp)
3662{
3663	struct sdebug_dev_info *devip =
3664		(struct sdebug_dev_info *)sdp->hostdata;
 
3665
3666	if (sdebug_verbose)
3667		pr_info("slave_destroy <%u %u %u %llu>\n",
3668		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3669	if (devip) {
3670		/* make this slot available for re-use */
3671		devip->used = false;
3672		sdp->hostdata = NULL;
 
 
 
 
3673	}
 
 
 
 
 
 
 
3674}
3675
3676static void stop_qc_helper(struct sdebug_defer *sd_dp)
 
 
3677{
3678	if (!sd_dp)
3679		return;
3680	if ((sdebug_jdelay > 0) || (sdebug_ndelay > 0))
3681		hrtimer_cancel(&sd_dp->hrt);
3682	else if (sdebug_jdelay < 0)
3683		cancel_work_sync(&sd_dp->ew.work);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3684}
3685
3686/* If @cmnd found deletes its timer or work queue and returns true; else
3687   returns false */
3688static bool stop_queued_cmnd(struct scsi_cmnd *cmnd)
3689{
3690	unsigned long iflags;
3691	int j, k, qmax, r_qmax;
3692	struct sdebug_queue *sqp;
3693	struct sdebug_queued_cmd *sqcp;
3694	struct sdebug_dev_info *devip;
3695	struct sdebug_defer *sd_dp;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3696
3697	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
3698		spin_lock_irqsave(&sqp->qc_lock, iflags);
3699		qmax = sdebug_max_queue;
3700		r_qmax = atomic_read(&retired_max_queue);
3701		if (r_qmax > qmax)
3702			qmax = r_qmax;
3703		for (k = 0; k < qmax; ++k) {
3704			if (test_bit(k, sqp->in_use_bm)) {
3705				sqcp = &sqp->qc_arr[k];
3706				if (cmnd != sqcp->a_cmnd)
3707					continue;
3708				/* found */
3709				devip = (struct sdebug_dev_info *)
3710						cmnd->device->hostdata;
3711				if (devip)
3712					atomic_dec(&devip->num_in_q);
3713				sqcp->a_cmnd = NULL;
3714				sd_dp = sqcp->sd_dp;
3715				spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3716				stop_qc_helper(sd_dp);
3717				clear_bit(k, sqp->in_use_bm);
3718				return true;
3719			}
3720		}
3721		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3722	}
3723	return false;
3724}
3725
3726/* Deletes (stops) timers or work queues of all queued commands */
3727static void stop_all_queued(void)
3728{
3729	unsigned long iflags;
3730	int j, k;
3731	struct sdebug_queue *sqp;
3732	struct sdebug_queued_cmd *sqcp;
3733	struct sdebug_dev_info *devip;
3734	struct sdebug_defer *sd_dp;
3735
3736	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
3737		spin_lock_irqsave(&sqp->qc_lock, iflags);
3738		for (k = 0; k < SDEBUG_CANQUEUE; ++k) {
3739			if (test_bit(k, sqp->in_use_bm)) {
3740				sqcp = &sqp->qc_arr[k];
3741				if (sqcp->a_cmnd == NULL)
3742					continue;
3743				devip = (struct sdebug_dev_info *)
3744					sqcp->a_cmnd->device->hostdata;
3745				if (devip)
3746					atomic_dec(&devip->num_in_q);
3747				sqcp->a_cmnd = NULL;
3748				sd_dp = sqcp->sd_dp;
3749				spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3750				stop_qc_helper(sd_dp);
3751				clear_bit(k, sqp->in_use_bm);
3752				spin_lock_irqsave(&sqp->qc_lock, iflags);
3753			}
3754		}
3755		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
3756	}
 
3757}
3758
3759/* Free queued command memory on heap */
3760static void free_all_queued(void)
3761{
3762	int j, k;
3763	struct sdebug_queue *sqp;
3764	struct sdebug_queued_cmd *sqcp;
 
 
 
 
 
 
 
 
 
 
 
 
 
3765
3766	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
3767		for (k = 0; k < SDEBUG_CANQUEUE; ++k) {
3768			sqcp = &sqp->qc_arr[k];
3769			kfree(sqcp->sd_dp);
3770			sqcp->sd_dp = NULL;
3771		}
3772	}
 
 
 
3773}
3774
3775static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
3776{
3777	bool ok;
 
 
3778
3779	++num_aborts;
3780	if (SCpnt) {
3781		ok = stop_queued_cmnd(SCpnt);
3782		if (SCpnt->device && (SDEBUG_OPT_ALL_NOISE & sdebug_opts))
3783			sdev_printk(KERN_INFO, SCpnt->device,
3784				    "%s: command%s found\n", __func__,
3785				    ok ? "" : " not");
 
 
 
 
3786	}
 
3787	return SUCCESS;
3788}
3789
3790static int scsi_debug_device_reset(struct scsi_cmnd * SCpnt)
3791{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3792	++num_dev_resets;
3793	if (SCpnt && SCpnt->device) {
3794		struct scsi_device *sdp = SCpnt->device;
3795		struct sdebug_dev_info *devip =
3796				(struct sdebug_dev_info *)sdp->hostdata;
3797
3798		if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
3799			sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3800		if (devip)
3801			set_bit(SDEBUG_UA_POR, devip->uas_bm);
 
 
3802	}
 
3803	return SUCCESS;
3804}
3805
 
 
 
 
 
 
 
 
 
 
 
 
3806static int scsi_debug_target_reset(struct scsi_cmnd *SCpnt)
3807{
3808	struct sdebug_host_info *sdbg_host;
 
3809	struct sdebug_dev_info *devip;
3810	struct scsi_device *sdp;
3811	struct Scsi_Host *hp;
3812	int k = 0;
3813
3814	++num_target_resets;
3815	if (!SCpnt)
3816		goto lie;
3817	sdp = SCpnt->device;
3818	if (!sdp)
3819		goto lie;
3820	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
3821		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3822	hp = sdp->host;
3823	if (!hp)
3824		goto lie;
3825	sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
3826	if (sdbg_host) {
3827		list_for_each_entry(devip,
3828				    &sdbg_host->dev_info_list,
3829				    dev_list)
3830			if (devip->target == sdp->id) {
3831				set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3832				++k;
3833			}
3834	}
 
3835	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
3836		sdev_printk(KERN_INFO, sdp,
3837			    "%s: %d device(s) found in target\n", __func__, k);
3838lie:
 
 
 
 
 
 
3839	return SUCCESS;
3840}
3841
3842static int scsi_debug_bus_reset(struct scsi_cmnd * SCpnt)
3843{
3844	struct sdebug_host_info *sdbg_host;
 
3845	struct sdebug_dev_info *devip;
3846        struct scsi_device * sdp;
3847        struct Scsi_Host * hp;
3848	int k = 0;
3849
3850	++num_bus_resets;
3851	if (!(SCpnt && SCpnt->device))
3852		goto lie;
3853	sdp = SCpnt->device;
3854	if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
3855		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3856	hp = sdp->host;
3857	if (hp) {
3858		sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
3859		if (sdbg_host) {
3860			list_for_each_entry(devip,
3861                                            &sdbg_host->dev_info_list,
3862					    dev_list) {
3863				set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3864				++k;
3865			}
3866		}
3867	}
 
3868	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
3869		sdev_printk(KERN_INFO, sdp,
3870			    "%s: %d device(s) found in host\n", __func__, k);
3871lie:
3872	return SUCCESS;
3873}
3874
3875static int scsi_debug_host_reset(struct scsi_cmnd * SCpnt)
3876{
3877	struct sdebug_host_info * sdbg_host;
3878	struct sdebug_dev_info *devip;
3879	int k = 0;
3880
3881	++num_host_resets;
3882	if ((SCpnt->device) && (SDEBUG_OPT_ALL_NOISE & sdebug_opts))
3883		sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
3884        spin_lock(&sdebug_host_list_lock);
3885        list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
3886		list_for_each_entry(devip, &sdbg_host->dev_info_list,
3887				    dev_list) {
3888			set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3889			++k;
3890		}
3891        }
3892        spin_unlock(&sdebug_host_list_lock);
3893	stop_all_queued();
3894	if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
3895		sdev_printk(KERN_INFO, SCpnt->device,
3896			    "%s: %d device(s) found\n", __func__, k);
3897	return SUCCESS;
3898}
3899
3900static void __init sdebug_build_parts(unsigned char *ramp,
3901				      unsigned long store_size)
3902{
3903	struct partition * pp;
3904	int starts[SDEBUG_MAX_PARTS + 2];
3905	int sectors_per_part, num_sectors, k;
3906	int heads_by_sects, start_sec, end_sec;
3907
3908	/* assume partition table already zeroed */
3909	if ((sdebug_num_parts < 1) || (store_size < 1048576))
3910		return;
3911	if (sdebug_num_parts > SDEBUG_MAX_PARTS) {
3912		sdebug_num_parts = SDEBUG_MAX_PARTS;
3913		pr_warn("reducing partitions to %d\n", SDEBUG_MAX_PARTS);
3914	}
3915	num_sectors = (int)sdebug_store_sectors;
3916	sectors_per_part = (num_sectors - sdebug_sectors_per)
3917			   / sdebug_num_parts;
3918	heads_by_sects = sdebug_heads * sdebug_sectors_per;
3919        starts[0] = sdebug_sectors_per;
3920	for (k = 1; k < sdebug_num_parts; ++k)
 
3921		starts[k] = ((k * sectors_per_part) / heads_by_sects)
3922			    * heads_by_sects;
 
 
 
3923	starts[sdebug_num_parts] = num_sectors;
3924	starts[sdebug_num_parts + 1] = 0;
3925
3926	ramp[510] = 0x55;	/* magic partition markings */
3927	ramp[511] = 0xAA;
3928	pp = (struct partition *)(ramp + 0x1be);
3929	for (k = 0; starts[k + 1]; ++k, ++pp) {
3930		start_sec = starts[k];
3931		end_sec = starts[k + 1] - 1;
3932		pp->boot_ind = 0;
3933
3934		pp->cyl = start_sec / heads_by_sects;
3935		pp->head = (start_sec - (pp->cyl * heads_by_sects))
3936			   / sdebug_sectors_per;
3937		pp->sector = (start_sec % sdebug_sectors_per) + 1;
3938
3939		pp->end_cyl = end_sec / heads_by_sects;
3940		pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
3941			       / sdebug_sectors_per;
3942		pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
3943
3944		pp->start_sect = cpu_to_le32(start_sec);
3945		pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
3946		pp->sys_ind = 0x83;	/* plain Linux partition */
3947	}
3948}
3949
3950static void block_unblock_all_queues(bool block)
3951{
3952	int j;
3953	struct sdebug_queue *sqp;
 
 
 
 
3954
3955	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp)
3956		atomic_set(&sqp->blocked, (int)block);
 
 
 
3957}
3958
3959/* Adjust (by rounding down) the sdebug_cmnd_count so abs(every_nth)-1
3960 * commands will be processed normally before triggers occur.
3961 */
3962static void tweak_cmnd_count(void)
3963{
3964	int count, modulo;
3965
3966	modulo = abs(sdebug_every_nth);
3967	if (modulo < 2)
3968		return;
 
 
3969	block_unblock_all_queues(true);
3970	count = atomic_read(&sdebug_cmnd_count);
3971	atomic_set(&sdebug_cmnd_count, (count / modulo) * modulo);
3972	block_unblock_all_queues(false);
 
3973}
3974
3975static void clear_queue_stats(void)
3976{
3977	atomic_set(&sdebug_cmnd_count, 0);
3978	atomic_set(&sdebug_completions, 0);
3979	atomic_set(&sdebug_miss_cpus, 0);
3980	atomic_set(&sdebug_a_tsf, 0);
3981}
3982
3983static void setup_inject(struct sdebug_queue *sqp,
3984			 struct sdebug_queued_cmd *sqcp)
3985{
3986	if ((atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth)) > 0)
3987		return;
3988	sqcp->inj_recovered = !!(SDEBUG_OPT_RECOVERED_ERR & sdebug_opts);
3989	sqcp->inj_transport = !!(SDEBUG_OPT_TRANSPORT_ERR & sdebug_opts);
3990	sqcp->inj_dif = !!(SDEBUG_OPT_DIF_ERR & sdebug_opts);
3991	sqcp->inj_dix = !!(SDEBUG_OPT_DIX_ERR & sdebug_opts);
3992	sqcp->inj_short = !!(SDEBUG_OPT_SHORT_TRANSFER & sdebug_opts);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3993}
3994
3995/* Complete the processing of the thread that queued a SCSI command to this
3996 * driver. It either completes the command by calling cmnd_done() or
3997 * schedules a hr timer or work queue then returns 0. Returns
3998 * SCSI_MLQUEUE_HOST_BUSY if temporarily out of resources.
3999 */
4000static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
4001			 int scsi_result, int delta_jiff)
4002{
4003	unsigned long iflags;
4004	int k, num_in_q, qdepth, inject;
4005	struct sdebug_queue *sqp;
 
 
 
 
 
4006	struct sdebug_queued_cmd *sqcp;
4007	struct scsi_device *sdp;
4008	struct sdebug_defer *sd_dp;
4009
4010	if (unlikely(devip == NULL)) {
4011		if (scsi_result == 0)
4012			scsi_result = DID_NO_CONNECT << 16;
4013		goto respond_in_thread;
4014	}
4015	sdp = cmnd->device;
4016
4017	if (unlikely(sdebug_verbose && scsi_result))
4018		sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
4019			    __func__, scsi_result);
4020	if (delta_jiff == 0)
4021		goto respond_in_thread;
4022
4023	/* schedule the response at a later time if resources permit */
4024	sqp = get_queue(cmnd);
4025	spin_lock_irqsave(&sqp->qc_lock, iflags);
4026	if (unlikely(atomic_read(&sqp->blocked))) {
4027		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4028		return SCSI_MLQUEUE_HOST_BUSY;
4029	}
4030	num_in_q = atomic_read(&devip->num_in_q);
4031	qdepth = cmnd->device->queue_depth;
4032	inject = 0;
4033	if (unlikely((qdepth > 0) && (num_in_q >= qdepth))) {
4034		if (scsi_result) {
4035			spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4036			goto respond_in_thread;
4037		} else
4038			scsi_result = device_qfull_result;
4039	} else if (unlikely(sdebug_every_nth &&
4040			    (SDEBUG_OPT_RARE_TSF & sdebug_opts) &&
4041			    (scsi_result == 0))) {
4042		if ((num_in_q == (qdepth - 1)) &&
4043		    (atomic_inc_return(&sdebug_a_tsf) >=
4044		     abs(sdebug_every_nth))) {
4045			atomic_set(&sdebug_a_tsf, 0);
4046			inject = 1;
4047			scsi_result = device_qfull_result;
 
 
 
 
4048		}
4049	}
4050
4051	k = find_first_zero_bit(sqp->in_use_bm, sdebug_max_queue);
4052	if (unlikely(k >= sdebug_max_queue)) {
4053		spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4054		if (scsi_result)
4055			goto respond_in_thread;
4056		else if (SDEBUG_OPT_ALL_TSF & sdebug_opts)
4057			scsi_result = device_qfull_result;
4058		if (SDEBUG_OPT_Q_NOISE & sdebug_opts)
4059			sdev_printk(KERN_INFO, sdp,
4060				    "%s: max_queue=%d exceeded, %s\n",
4061				    __func__, sdebug_max_queue,
4062				    (scsi_result ?  "status: TASK SET FULL" :
4063						    "report: host busy"));
4064		if (scsi_result)
4065			goto respond_in_thread;
4066		else
4067			return SCSI_MLQUEUE_HOST_BUSY;
 
 
 
 
 
 
 
4068	}
4069	__set_bit(k, sqp->in_use_bm);
4070	atomic_inc(&devip->num_in_q);
4071	sqcp = &sqp->qc_arr[k];
4072	sqcp->a_cmnd = cmnd;
4073	cmnd->host_scribble = (unsigned char *)sqcp;
4074	cmnd->result = scsi_result;
4075	sd_dp = sqcp->sd_dp;
4076	spin_unlock_irqrestore(&sqp->qc_lock, iflags);
4077	if (unlikely(sdebug_every_nth && sdebug_any_injecting_opt))
4078		setup_inject(sqp, sqcp);
4079	if (delta_jiff > 0 || sdebug_ndelay > 0) {
4080		ktime_t kt;
4081
4082		if (delta_jiff > 0) {
4083			struct timespec ts;
4084
4085			jiffies_to_timespec(delta_jiff, &ts);
4086			kt = ktime_set(ts.tv_sec, ts.tv_nsec);
4087		} else
4088			kt = sdebug_ndelay;
4089		if (NULL == sd_dp) {
4090			sd_dp = kzalloc(sizeof(*sd_dp), GFP_ATOMIC);
4091			if (NULL == sd_dp)
4092				return SCSI_MLQUEUE_HOST_BUSY;
4093			sqcp->sd_dp = sd_dp;
4094			hrtimer_init(&sd_dp->hrt, CLOCK_MONOTONIC,
4095				     HRTIMER_MODE_REL_PINNED);
4096			sd_dp->hrt.function = sdebug_q_cmd_hrt_complete;
4097			sd_dp->sqa_idx = sqp - sdebug_q_arr;
4098			sd_dp->qc_idx = k;
 
 
 
 
 
 
 
 
 
 
4099		}
4100		if (sdebug_statistics)
4101			sd_dp->issuing_cpu = raw_smp_processor_id();
4102		hrtimer_start(&sd_dp->hrt, kt, HRTIMER_MODE_REL_PINNED);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4103	} else {	/* jdelay < 0, use work queue */
4104		if (NULL == sd_dp) {
4105			sd_dp = kzalloc(sizeof(*sqcp->sd_dp), GFP_ATOMIC);
4106			if (NULL == sd_dp)
4107				return SCSI_MLQUEUE_HOST_BUSY;
4108			sqcp->sd_dp = sd_dp;
4109			sd_dp->sqa_idx = sqp - sdebug_q_arr;
4110			sd_dp->qc_idx = k;
4111			INIT_WORK(&sd_dp->ew.work, sdebug_q_cmd_wq_complete);
4112		}
 
4113		if (sdebug_statistics)
4114			sd_dp->issuing_cpu = raw_smp_processor_id();
4115		schedule_work(&sd_dp->ew.work);
 
 
 
 
 
 
 
 
 
 
 
 
4116	}
4117	if (unlikely((SDEBUG_OPT_Q_NOISE & sdebug_opts) &&
4118		     (scsi_result == device_qfull_result)))
4119		sdev_printk(KERN_INFO, sdp,
4120			    "%s: num_in_q=%d +1, %s%s\n", __func__,
4121			    num_in_q, (inject ? "<inject> " : ""),
4122			    "status: TASK SET FULL");
4123	return 0;
4124
4125respond_in_thread:	/* call back to mid-layer using invocation thread */
4126	cmnd->result = scsi_result;
4127	cmnd->scsi_done(cmnd);
 
 
 
4128	return 0;
4129}
4130
4131/* Note: The following macros create attribute files in the
4132   /sys/module/scsi_debug/parameters directory. Unfortunately this
4133   driver is unaware of a change and cannot trigger auxiliary actions
4134   as it can when the corresponding attribute in the
4135   /sys/bus/pseudo/drivers/scsi_debug directory is changed.
4136 */
4137module_param_named(add_host, sdebug_add_host, int, S_IRUGO | S_IWUSR);
4138module_param_named(ato, sdebug_ato, int, S_IRUGO);
 
4139module_param_named(clustering, sdebug_clustering, bool, S_IRUGO | S_IWUSR);
4140module_param_named(delay, sdebug_jdelay, int, S_IRUGO | S_IWUSR);
4141module_param_named(dev_size_mb, sdebug_dev_size_mb, int, S_IRUGO);
4142module_param_named(dif, sdebug_dif, int, S_IRUGO);
4143module_param_named(dix, sdebug_dix, int, S_IRUGO);
4144module_param_named(dsense, sdebug_dsense, int, S_IRUGO | S_IWUSR);
4145module_param_named(every_nth, sdebug_every_nth, int, S_IRUGO | S_IWUSR);
4146module_param_named(fake_rw, sdebug_fake_rw, int, S_IRUGO | S_IWUSR);
4147module_param_named(guard, sdebug_guard, uint, S_IRUGO);
4148module_param_named(host_lock, sdebug_host_lock, bool, S_IRUGO | S_IWUSR);
 
 
 
 
 
 
 
 
4149module_param_named(lbpu, sdebug_lbpu, int, S_IRUGO);
4150module_param_named(lbpws, sdebug_lbpws, int, S_IRUGO);
4151module_param_named(lbpws10, sdebug_lbpws10, int, S_IRUGO);
4152module_param_named(lbprz, sdebug_lbprz, int, S_IRUGO);
4153module_param_named(lowest_aligned, sdebug_lowest_aligned, int, S_IRUGO);
 
4154module_param_named(max_luns, sdebug_max_luns, int, S_IRUGO | S_IWUSR);
4155module_param_named(max_queue, sdebug_max_queue, int, S_IRUGO | S_IWUSR);
 
 
 
 
4156module_param_named(ndelay, sdebug_ndelay, int, S_IRUGO | S_IWUSR);
4157module_param_named(no_lun_0, sdebug_no_lun_0, int, S_IRUGO | S_IWUSR);
 
4158module_param_named(no_uld, sdebug_no_uld, int, S_IRUGO);
4159module_param_named(num_parts, sdebug_num_parts, int, S_IRUGO);
4160module_param_named(num_tgts, sdebug_num_tgts, int, S_IRUGO | S_IWUSR);
4161module_param_named(opt_blks, sdebug_opt_blks, int, S_IRUGO);
 
4162module_param_named(opts, sdebug_opts, int, S_IRUGO | S_IWUSR);
 
 
4163module_param_named(physblk_exp, sdebug_physblk_exp, int, S_IRUGO);
4164module_param_named(ptype, sdebug_ptype, int, S_IRUGO | S_IWUSR);
 
4165module_param_named(removable, sdebug_removable, bool, S_IRUGO | S_IWUSR);
4166module_param_named(scsi_level, sdebug_scsi_level, int, S_IRUGO);
4167module_param_named(sector_size, sdebug_sector_size, int, S_IRUGO);
4168module_param_named(statistics, sdebug_statistics, bool, S_IRUGO | S_IWUSR);
4169module_param_named(strict, sdebug_strict, bool, S_IRUGO | S_IWUSR);
4170module_param_named(submit_queues, submit_queues, int, S_IRUGO);
 
 
4171module_param_named(unmap_alignment, sdebug_unmap_alignment, int, S_IRUGO);
4172module_param_named(unmap_granularity, sdebug_unmap_granularity, int, S_IRUGO);
4173module_param_named(unmap_max_blocks, sdebug_unmap_max_blocks, int, S_IRUGO);
4174module_param_named(unmap_max_desc, sdebug_unmap_max_desc, int, S_IRUGO);
 
 
 
 
 
 
4175module_param_named(virtual_gb, sdebug_virtual_gb, int, S_IRUGO | S_IWUSR);
4176module_param_named(uuid_ctl, sdebug_uuid_ctl, int, S_IRUGO);
4177module_param_named(vpd_use_hostno, sdebug_vpd_use_hostno, int,
4178		   S_IRUGO | S_IWUSR);
 
4179module_param_named(write_same_length, sdebug_write_same_length, int,
4180		   S_IRUGO | S_IWUSR);
 
 
 
 
 
 
4181
4182MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
4183MODULE_DESCRIPTION("SCSI debug adapter driver");
4184MODULE_LICENSE("GPL");
4185MODULE_VERSION(SDEBUG_VERSION);
4186
4187MODULE_PARM_DESC(add_host, "0..127 hosts allowed(def=1)");
4188MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
 
4189MODULE_PARM_DESC(clustering, "when set enables larger transfers (def=0)");
4190MODULE_PARM_DESC(delay, "response delay (def=1 jiffy); 0:imm, -1,-2:tiny");
4191MODULE_PARM_DESC(dev_size_mb, "size in MiB of ram shared by devs(def=8)");
4192MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
4193MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
4194MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
4195MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
4196MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
4197MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
4198MODULE_PARM_DESC(host_lock, "host_lock is ignored (def=0)");
 
 
 
 
 
 
 
 
4199MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
4200MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
4201MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
4202MODULE_PARM_DESC(lbprz,
4203	"on read unmapped LBs return 0 when 1 (def), return 0xff when 2");
4204MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
 
4205MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
4206MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
 
 
4207MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
4208MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
 
4209MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
4210MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
4211MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
4212MODULE_PARM_DESC(opt_blks, "optimal transfer length in blocks (def=1024)");
 
4213MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
 
4214MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
 
4215MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
 
4216MODULE_PARM_DESC(removable, "claim to have removable media (def=0)");
4217MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=7[SPC-5])");
4218MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
4219MODULE_PARM_DESC(statistics, "collect statistics on commands, queues (def=0)");
4220MODULE_PARM_DESC(strict, "stricter checks: reserved field in cdb (def=0)");
4221MODULE_PARM_DESC(submit_queues, "support for block multi-queue (def=1)");
 
4222MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
4223MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
4224MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
4225MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
 
 
 
 
 
4226MODULE_PARM_DESC(uuid_ctl,
4227		 "1->use uuid for lu name, 0->don't, 2->all use same (def=0)");
4228MODULE_PARM_DESC(virtual_gb, "virtual gigabyte (GiB) size (def=0 -> use dev_size_mb)");
4229MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
 
4230MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
 
 
 
 
 
 
4231
4232#define SDEBUG_INFO_LEN 256
4233static char sdebug_info[SDEBUG_INFO_LEN];
4234
4235static const char * scsi_debug_info(struct Scsi_Host * shp)
4236{
4237	int k;
4238
4239	k = scnprintf(sdebug_info, SDEBUG_INFO_LEN, "%s: version %s [%s]\n",
4240		      my_name, SDEBUG_VERSION, sdebug_version_date);
4241	if (k >= (SDEBUG_INFO_LEN - 1))
4242		return sdebug_info;
4243	scnprintf(sdebug_info + k, SDEBUG_INFO_LEN - k,
4244		  "  dev_size_mb=%d, opts=0x%x, submit_queues=%d, %s=%d",
4245		  sdebug_dev_size_mb, sdebug_opts, submit_queues,
4246		  "statistics", (int)sdebug_statistics);
4247	return sdebug_info;
4248}
4249
4250/* 'echo <val> > /proc/scsi/scsi_debug/<host_id>' writes to opts */
4251static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer,
4252				 int length)
4253{
4254	char arr[16];
4255	int opts;
4256	int minLen = length > 15 ? 15 : length;
4257
4258	if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
4259		return -EACCES;
4260	memcpy(arr, buffer, minLen);
4261	arr[minLen] = '\0';
4262	if (1 != sscanf(arr, "%d", &opts))
4263		return -EINVAL;
4264	sdebug_opts = opts;
4265	sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
4266	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
4267	if (sdebug_every_nth != 0)
4268		tweak_cmnd_count();
4269	return length;
4270}
4271
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4272/* Output seen with 'cat /proc/scsi/scsi_debug/<host_id>'. It will be the
4273 * same for each scsi_debug host (if more than one). Some of the counters
4274 * output are not atomics so might be inaccurate in a busy system. */
4275static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
4276{
4277	int f, j, l;
4278	struct sdebug_queue *sqp;
4279
4280	seq_printf(m, "scsi_debug adapter driver, version %s [%s]\n",
4281		   SDEBUG_VERSION, sdebug_version_date);
4282	seq_printf(m, "num_tgts=%d, %ssize=%d MB, opts=0x%x, every_nth=%d\n",
4283		   sdebug_num_tgts, "shared (ram) ", sdebug_dev_size_mb,
4284		   sdebug_opts, sdebug_every_nth);
4285	seq_printf(m, "delay=%d, ndelay=%d, max_luns=%d, sector_size=%d %s\n",
4286		   sdebug_jdelay, sdebug_ndelay, sdebug_max_luns,
4287		   sdebug_sector_size, "bytes");
4288	seq_printf(m, "cylinders=%d, heads=%d, sectors=%d, command aborts=%d\n",
4289		   sdebug_cylinders_per, sdebug_heads, sdebug_sectors_per,
4290		   num_aborts);
4291	seq_printf(m, "RESETs: device=%d, target=%d, bus=%d, host=%d\n",
4292		   num_dev_resets, num_target_resets, num_bus_resets,
4293		   num_host_resets);
4294	seq_printf(m, "dix_reads=%d, dix_writes=%d, dif_errors=%d\n",
4295		   dix_reads, dix_writes, dif_errors);
4296	seq_printf(m, "usec_in_jiffy=%lu, %s=%d, mq_active=%d\n",
4297		   TICK_NSEC / 1000, "statistics", sdebug_statistics,
4298		   sdebug_mq_active);
4299	seq_printf(m, "cmnd_count=%d, completions=%d, %s=%d, a_tsf=%d\n",
4300		   atomic_read(&sdebug_cmnd_count),
4301		   atomic_read(&sdebug_completions),
4302		   "miss_cpus", atomic_read(&sdebug_miss_cpus),
4303		   atomic_read(&sdebug_a_tsf));
 
4304
4305	seq_printf(m, "submit_queues=%d\n", submit_queues);
4306	for (j = 0, sqp = sdebug_q_arr; j < submit_queues; ++j, ++sqp) {
 
 
 
 
 
 
4307		seq_printf(m, "  queue %d:\n", j);
4308		f = find_first_bit(sqp->in_use_bm, sdebug_max_queue);
4309		if (f != sdebug_max_queue) {
4310			l = find_last_bit(sqp->in_use_bm, sdebug_max_queue);
4311			seq_printf(m, "    in_use_bm BUSY: %s: %d,%d\n",
4312				   "first,last bits", f, l);
4313		}
4314	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4315	return 0;
4316}
4317
4318static ssize_t delay_show(struct device_driver *ddp, char *buf)
4319{
4320	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_jdelay);
4321}
4322/* Returns -EBUSY if jdelay is being changed and commands are queued. The unit
4323 * of delay is jiffies.
4324 */
4325static ssize_t delay_store(struct device_driver *ddp, const char *buf,
4326			   size_t count)
4327{
4328	int jdelay, res;
4329
4330	if (count > 0 && sscanf(buf, "%d", &jdelay) == 1) {
4331		res = count;
4332		if (sdebug_jdelay != jdelay) {
4333			int j, k;
4334			struct sdebug_queue *sqp;
4335
 
4336			block_unblock_all_queues(true);
4337			for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
4338			     ++j, ++sqp) {
4339				k = find_first_bit(sqp->in_use_bm,
4340						   sdebug_max_queue);
4341				if (k != sdebug_max_queue) {
4342					res = -EBUSY;   /* queued commands */
4343					break;
4344				}
4345			}
4346			if (res > 0) {
4347				/* make sure sdebug_defer instances get
4348				 * re-allocated for new delay variant */
4349				free_all_queued();
4350				sdebug_jdelay = jdelay;
4351				sdebug_ndelay = 0;
4352			}
4353			block_unblock_all_queues(false);
 
4354		}
4355		return res;
4356	}
4357	return -EINVAL;
4358}
4359static DRIVER_ATTR_RW(delay);
4360
4361static ssize_t ndelay_show(struct device_driver *ddp, char *buf)
4362{
4363	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ndelay);
4364}
4365/* Returns -EBUSY if ndelay is being changed and commands are queued */
4366/* If > 0 and accepted then sdebug_jdelay is set to JDELAY_OVERRIDDEN */
4367static ssize_t ndelay_store(struct device_driver *ddp, const char *buf,
4368			    size_t count)
4369{
4370	int ndelay, res;
4371
4372	if ((count > 0) && (1 == sscanf(buf, "%d", &ndelay)) &&
4373	    (ndelay >= 0) && (ndelay < (1000 * 1000 * 1000))) {
4374		res = count;
4375		if (sdebug_ndelay != ndelay) {
4376			int j, k;
4377			struct sdebug_queue *sqp;
4378
 
4379			block_unblock_all_queues(true);
4380			for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
4381			     ++j, ++sqp) {
4382				k = find_first_bit(sqp->in_use_bm,
4383						   sdebug_max_queue);
4384				if (k != sdebug_max_queue) {
4385					res = -EBUSY;   /* queued commands */
4386					break;
4387				}
4388			}
 
4389			if (res > 0) {
4390				/* make sure sdebug_defer instances get
4391				 * re-allocated for new delay variant */
4392				free_all_queued();
4393				sdebug_ndelay = ndelay;
4394				sdebug_jdelay = ndelay  ? JDELAY_OVERRIDDEN
4395							: DEF_JDELAY;
4396			}
4397			block_unblock_all_queues(false);
 
4398		}
4399		return res;
4400	}
4401	return -EINVAL;
4402}
4403static DRIVER_ATTR_RW(ndelay);
4404
4405static ssize_t opts_show(struct device_driver *ddp, char *buf)
4406{
4407	return scnprintf(buf, PAGE_SIZE, "0x%x\n", sdebug_opts);
4408}
4409
4410static ssize_t opts_store(struct device_driver *ddp, const char *buf,
4411			  size_t count)
4412{
4413        int opts;
4414	char work[20];
4415
4416        if (1 == sscanf(buf, "%10s", work)) {
4417		if (0 == strncasecmp(work,"0x", 2)) {
4418			if (1 == sscanf(&work[2], "%x", &opts))
4419				goto opts_done;
4420		} else {
4421			if (1 == sscanf(work, "%d", &opts))
4422				goto opts_done;
4423		}
4424	}
4425	return -EINVAL;
4426opts_done:
4427	sdebug_opts = opts;
4428	sdebug_verbose = !!(SDEBUG_OPT_NOISE & opts);
4429	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & opts);
4430	tweak_cmnd_count();
4431	return count;
4432}
4433static DRIVER_ATTR_RW(opts);
4434
4435static ssize_t ptype_show(struct device_driver *ddp, char *buf)
4436{
4437	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ptype);
4438}
4439static ssize_t ptype_store(struct device_driver *ddp, const char *buf,
4440			   size_t count)
4441{
4442        int n;
 
 
 
 
4443
4444	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
 
 
4445		sdebug_ptype = n;
4446		return count;
4447	}
4448	return -EINVAL;
4449}
4450static DRIVER_ATTR_RW(ptype);
4451
4452static ssize_t dsense_show(struct device_driver *ddp, char *buf)
4453{
4454	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dsense);
4455}
4456static ssize_t dsense_store(struct device_driver *ddp, const char *buf,
4457			    size_t count)
4458{
4459        int n;
4460
4461	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4462		sdebug_dsense = n;
4463		return count;
4464	}
4465	return -EINVAL;
4466}
4467static DRIVER_ATTR_RW(dsense);
4468
4469static ssize_t fake_rw_show(struct device_driver *ddp, char *buf)
4470{
4471	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_fake_rw);
4472}
4473static ssize_t fake_rw_store(struct device_driver *ddp, const char *buf,
4474			     size_t count)
4475{
4476        int n;
4477
4478	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
 
 
 
4479		n = (n > 0);
4480		sdebug_fake_rw = (sdebug_fake_rw > 0);
4481		if (sdebug_fake_rw != n) {
4482			if ((0 == n) && (NULL == fake_storep)) {
4483				unsigned long sz =
4484					(unsigned long)sdebug_dev_size_mb *
4485					1048576;
4486
4487				fake_storep = vmalloc(sz);
4488				if (NULL == fake_storep) {
4489					pr_err("out of memory, 9\n");
4490					return -ENOMEM;
 
 
 
 
 
 
 
 
 
 
4491				}
4492				memset(fake_storep, 0, sz);
4493			}
4494			sdebug_fake_rw = n;
 
 
4495		}
 
4496		return count;
4497	}
4498	return -EINVAL;
4499}
4500static DRIVER_ATTR_RW(fake_rw);
4501
4502static ssize_t no_lun_0_show(struct device_driver *ddp, char *buf)
4503{
4504	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_lun_0);
4505}
4506static ssize_t no_lun_0_store(struct device_driver *ddp, const char *buf,
4507			      size_t count)
4508{
4509        int n;
4510
4511	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4512		sdebug_no_lun_0 = n;
4513		return count;
4514	}
4515	return -EINVAL;
4516}
4517static DRIVER_ATTR_RW(no_lun_0);
4518
4519static ssize_t num_tgts_show(struct device_driver *ddp, char *buf)
4520{
4521	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_tgts);
4522}
4523static ssize_t num_tgts_store(struct device_driver *ddp, const char *buf,
4524			      size_t count)
4525{
4526        int n;
4527
4528	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4529		sdebug_num_tgts = n;
4530		sdebug_max_tgts_luns();
4531		return count;
4532	}
4533	return -EINVAL;
4534}
4535static DRIVER_ATTR_RW(num_tgts);
4536
4537static ssize_t dev_size_mb_show(struct device_driver *ddp, char *buf)
4538{
4539	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dev_size_mb);
4540}
4541static DRIVER_ATTR_RO(dev_size_mb);
4542
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4543static ssize_t num_parts_show(struct device_driver *ddp, char *buf)
4544{
4545	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_num_parts);
4546}
4547static DRIVER_ATTR_RO(num_parts);
4548
4549static ssize_t every_nth_show(struct device_driver *ddp, char *buf)
4550{
4551	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_every_nth);
4552}
4553static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
4554			       size_t count)
4555{
4556        int nth;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4557
4558	if ((count > 0) && (1 == sscanf(buf, "%d", &nth))) {
4559		sdebug_every_nth = nth;
4560		if (nth && !sdebug_statistics) {
4561			pr_info("every_nth needs statistics=1, set it\n");
4562			sdebug_statistics = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4563		}
4564		tweak_cmnd_count();
4565		return count;
4566	}
4567	return -EINVAL;
4568}
4569static DRIVER_ATTR_RW(every_nth);
4570
4571static ssize_t max_luns_show(struct device_driver *ddp, char *buf)
4572{
4573	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_luns);
4574}
4575static ssize_t max_luns_store(struct device_driver *ddp, const char *buf,
4576			      size_t count)
4577{
4578        int n;
4579	bool changed;
4580
4581	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4582		if (n > 256) {
4583			pr_warn("max_luns can be no more than 256\n");
4584			return -EINVAL;
4585		}
4586		changed = (sdebug_max_luns != n);
4587		sdebug_max_luns = n;
4588		sdebug_max_tgts_luns();
4589		if (changed && (sdebug_scsi_level >= 5)) {	/* >= SPC-3 */
4590			struct sdebug_host_info *sdhp;
4591			struct sdebug_dev_info *dp;
4592
4593			spin_lock(&sdebug_host_list_lock);
4594			list_for_each_entry(sdhp, &sdebug_host_list,
4595					    host_list) {
4596				list_for_each_entry(dp, &sdhp->dev_info_list,
4597						    dev_list) {
4598					set_bit(SDEBUG_UA_LUNS_CHANGED,
4599						dp->uas_bm);
4600				}
4601			}
4602			spin_unlock(&sdebug_host_list_lock);
4603		}
4604		return count;
4605	}
4606	return -EINVAL;
4607}
4608static DRIVER_ATTR_RW(max_luns);
4609
4610static ssize_t max_queue_show(struct device_driver *ddp, char *buf)
4611{
4612	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_max_queue);
4613}
4614/* N.B. max_queue can be changed while there are queued commands. In flight
4615 * commands beyond the new max_queue will be completed. */
4616static ssize_t max_queue_store(struct device_driver *ddp, const char *buf,
4617			       size_t count)
4618{
4619	int j, n, k, a;
4620	struct sdebug_queue *sqp;
4621
4622	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
4623	    (n <= SDEBUG_CANQUEUE)) {
4624		block_unblock_all_queues(true);
4625		k = 0;
4626		for (j = 0, sqp = sdebug_q_arr; j < submit_queues;
4627		     ++j, ++sqp) {
4628			a = find_last_bit(sqp->in_use_bm, SDEBUG_CANQUEUE);
4629			if (a > k)
4630				k = a;
4631		}
4632		sdebug_max_queue = n;
4633		if (k == SDEBUG_CANQUEUE)
4634			atomic_set(&retired_max_queue, 0);
4635		else if (k >= n)
4636			atomic_set(&retired_max_queue, k + 1);
4637		else
4638			atomic_set(&retired_max_queue, 0);
4639		block_unblock_all_queues(false);
4640		return count;
4641	}
4642	return -EINVAL;
4643}
4644static DRIVER_ATTR_RW(max_queue);
4645
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4646static ssize_t no_uld_show(struct device_driver *ddp, char *buf)
4647{
4648	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_no_uld);
4649}
4650static DRIVER_ATTR_RO(no_uld);
4651
4652static ssize_t scsi_level_show(struct device_driver *ddp, char *buf)
4653{
4654	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_scsi_level);
4655}
4656static DRIVER_ATTR_RO(scsi_level);
4657
4658static ssize_t virtual_gb_show(struct device_driver *ddp, char *buf)
4659{
4660	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_virtual_gb);
4661}
4662static ssize_t virtual_gb_store(struct device_driver *ddp, const char *buf,
4663				size_t count)
4664{
4665        int n;
4666	bool changed;
4667
 
 
 
 
4668	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4669		changed = (sdebug_virtual_gb != n);
4670		sdebug_virtual_gb = n;
4671		sdebug_capacity = get_sdebug_capacity();
4672		if (changed) {
4673			struct sdebug_host_info *sdhp;
4674			struct sdebug_dev_info *dp;
4675
4676			spin_lock(&sdebug_host_list_lock);
4677			list_for_each_entry(sdhp, &sdebug_host_list,
4678					    host_list) {
4679				list_for_each_entry(dp, &sdhp->dev_info_list,
4680						    dev_list) {
4681					set_bit(SDEBUG_UA_CAPACITY_CHANGED,
4682						dp->uas_bm);
4683				}
4684			}
4685			spin_unlock(&sdebug_host_list_lock);
4686		}
4687		return count;
4688	}
4689	return -EINVAL;
4690}
4691static DRIVER_ATTR_RW(virtual_gb);
4692
4693static ssize_t add_host_show(struct device_driver *ddp, char *buf)
4694{
4695	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_add_host);
 
4696}
4697
4698static int sdebug_add_adapter(void);
4699static void sdebug_remove_adapter(void);
4700
4701static ssize_t add_host_store(struct device_driver *ddp, const char *buf,
4702			      size_t count)
4703{
 
 
 
 
4704	int delta_hosts;
4705
4706	if (sscanf(buf, "%d", &delta_hosts) != 1)
4707		return -EINVAL;
4708	if (delta_hosts > 0) {
4709		do {
4710			sdebug_add_adapter();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4711		} while (--delta_hosts);
4712	} else if (delta_hosts < 0) {
4713		do {
4714			sdebug_remove_adapter();
4715		} while (++delta_hosts);
4716	}
4717	return count;
4718}
4719static DRIVER_ATTR_RW(add_host);
4720
4721static ssize_t vpd_use_hostno_show(struct device_driver *ddp, char *buf)
4722{
4723	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_vpd_use_hostno);
4724}
4725static ssize_t vpd_use_hostno_store(struct device_driver *ddp, const char *buf,
4726				    size_t count)
4727{
4728	int n;
4729
4730	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4731		sdebug_vpd_use_hostno = n;
4732		return count;
4733	}
4734	return -EINVAL;
4735}
4736static DRIVER_ATTR_RW(vpd_use_hostno);
4737
4738static ssize_t statistics_show(struct device_driver *ddp, char *buf)
4739{
4740	return scnprintf(buf, PAGE_SIZE, "%d\n", (int)sdebug_statistics);
4741}
4742static ssize_t statistics_store(struct device_driver *ddp, const char *buf,
4743				size_t count)
4744{
4745	int n;
4746
4747	if ((count > 0) && (sscanf(buf, "%d", &n) == 1) && (n >= 0)) {
4748		if (n > 0)
4749			sdebug_statistics = true;
4750		else {
4751			clear_queue_stats();
4752			sdebug_statistics = false;
4753		}
4754		return count;
4755	}
4756	return -EINVAL;
4757}
4758static DRIVER_ATTR_RW(statistics);
4759
4760static ssize_t sector_size_show(struct device_driver *ddp, char *buf)
4761{
4762	return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_sector_size);
4763}
4764static DRIVER_ATTR_RO(sector_size);
4765
4766static ssize_t submit_queues_show(struct device_driver *ddp, char *buf)
4767{
4768	return scnprintf(buf, PAGE_SIZE, "%d\n", submit_queues);
4769}
4770static DRIVER_ATTR_RO(submit_queues);
4771
4772static ssize_t dix_show(struct device_driver *ddp, char *buf)
4773{
4774	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dix);
4775}
4776static DRIVER_ATTR_RO(dix);
4777
4778static ssize_t dif_show(struct device_driver *ddp, char *buf)
4779{
4780	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_dif);
4781}
4782static DRIVER_ATTR_RO(dif);
4783
4784static ssize_t guard_show(struct device_driver *ddp, char *buf)
4785{
4786	return scnprintf(buf, PAGE_SIZE, "%u\n", sdebug_guard);
4787}
4788static DRIVER_ATTR_RO(guard);
4789
4790static ssize_t ato_show(struct device_driver *ddp, char *buf)
4791{
4792	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_ato);
4793}
4794static DRIVER_ATTR_RO(ato);
4795
4796static ssize_t map_show(struct device_driver *ddp, char *buf)
4797{
4798	ssize_t count;
4799
4800	if (!scsi_debug_lbp())
4801		return scnprintf(buf, PAGE_SIZE, "0-%u\n",
4802				 sdebug_store_sectors);
4803
4804	count = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
4805			  (int)map_size, map_storep);
 
 
 
 
 
4806	buf[count++] = '\n';
4807	buf[count] = '\0';
4808
4809	return count;
4810}
4811static DRIVER_ATTR_RO(map);
4812
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4813static ssize_t removable_show(struct device_driver *ddp, char *buf)
4814{
4815	return scnprintf(buf, PAGE_SIZE, "%d\n", sdebug_removable ? 1 : 0);
4816}
4817static ssize_t removable_store(struct device_driver *ddp, const char *buf,
4818			       size_t count)
4819{
4820	int n;
4821
4822	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4823		sdebug_removable = (n > 0);
4824		return count;
4825	}
4826	return -EINVAL;
4827}
4828static DRIVER_ATTR_RW(removable);
4829
4830static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
4831{
4832	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_host_lock);
4833}
4834/* N.B. sdebug_host_lock does nothing, kept for backward compatibility */
4835static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
4836			       size_t count)
4837{
4838	int n;
4839
4840	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4841		sdebug_host_lock = (n > 0);
4842		return count;
4843	}
4844	return -EINVAL;
4845}
4846static DRIVER_ATTR_RW(host_lock);
4847
4848static ssize_t strict_show(struct device_driver *ddp, char *buf)
4849{
4850	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_strict);
4851}
4852static ssize_t strict_store(struct device_driver *ddp, const char *buf,
4853			    size_t count)
4854{
4855	int n;
4856
4857	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4858		sdebug_strict = (n > 0);
4859		return count;
4860	}
4861	return -EINVAL;
4862}
4863static DRIVER_ATTR_RW(strict);
4864
4865static ssize_t uuid_ctl_show(struct device_driver *ddp, char *buf)
4866{
4867	return scnprintf(buf, PAGE_SIZE, "%d\n", !!sdebug_uuid_ctl);
4868}
4869static DRIVER_ATTR_RO(uuid_ctl);
4870
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4871
4872/* Note: The following array creates attribute files in the
4873   /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
4874   files (over those found in the /sys/module/scsi_debug/parameters
4875   directory) is that auxiliary actions can be triggered when an attribute
4876   is changed. For example see: sdebug_add_host_store() above.
4877 */
4878
4879static struct attribute *sdebug_drv_attrs[] = {
4880	&driver_attr_delay.attr,
4881	&driver_attr_opts.attr,
4882	&driver_attr_ptype.attr,
4883	&driver_attr_dsense.attr,
4884	&driver_attr_fake_rw.attr,
 
4885	&driver_attr_no_lun_0.attr,
4886	&driver_attr_num_tgts.attr,
4887	&driver_attr_dev_size_mb.attr,
4888	&driver_attr_num_parts.attr,
4889	&driver_attr_every_nth.attr,
 
4890	&driver_attr_max_luns.attr,
4891	&driver_attr_max_queue.attr,
 
4892	&driver_attr_no_uld.attr,
4893	&driver_attr_scsi_level.attr,
4894	&driver_attr_virtual_gb.attr,
4895	&driver_attr_add_host.attr,
 
4896	&driver_attr_vpd_use_hostno.attr,
4897	&driver_attr_sector_size.attr,
4898	&driver_attr_statistics.attr,
4899	&driver_attr_submit_queues.attr,
4900	&driver_attr_dix.attr,
4901	&driver_attr_dif.attr,
4902	&driver_attr_guard.attr,
4903	&driver_attr_ato.attr,
4904	&driver_attr_map.attr,
 
4905	&driver_attr_removable.attr,
4906	&driver_attr_host_lock.attr,
4907	&driver_attr_ndelay.attr,
4908	&driver_attr_strict.attr,
4909	&driver_attr_uuid_ctl.attr,
 
 
 
 
4910	NULL,
4911};
4912ATTRIBUTE_GROUPS(sdebug_drv);
4913
4914static struct device *pseudo_primary;
4915
4916static int __init scsi_debug_init(void)
4917{
 
4918	unsigned long sz;
4919	int host_to_add;
4920	int k;
4921	int ret;
4922
4923	atomic_set(&retired_max_queue, 0);
4924
4925	if (sdebug_ndelay >= 1000 * 1000 * 1000) {
4926		pr_warn("ndelay must be less than 1 second, ignored\n");
4927		sdebug_ndelay = 0;
4928	} else if (sdebug_ndelay > 0)
4929		sdebug_jdelay = JDELAY_OVERRIDDEN;
4930
4931	switch (sdebug_sector_size) {
4932	case  512:
4933	case 1024:
4934	case 2048:
4935	case 4096:
4936		break;
4937	default:
4938		pr_err("invalid sector_size %d\n", sdebug_sector_size);
4939		return -EINVAL;
4940	}
4941
4942	switch (sdebug_dif) {
4943	case T10_PI_TYPE0_PROTECTION:
4944		break;
4945	case T10_PI_TYPE1_PROTECTION:
4946	case T10_PI_TYPE2_PROTECTION:
4947	case T10_PI_TYPE3_PROTECTION:
4948		have_dif_prot = true;
4949		break;
4950
4951	default:
4952		pr_err("dif must be 0, 1, 2 or 3\n");
4953		return -EINVAL;
4954	}
4955
 
 
 
 
 
4956	if (sdebug_guard > 1) {
4957		pr_err("guard must be 0 or 1\n");
4958		return -EINVAL;
4959	}
4960
4961	if (sdebug_ato > 1) {
4962		pr_err("ato must be 0 or 1\n");
4963		return -EINVAL;
4964	}
4965
4966	if (sdebug_physblk_exp > 15) {
4967		pr_err("invalid physblk_exp %u\n", sdebug_physblk_exp);
4968		return -EINVAL;
4969	}
 
 
 
 
 
 
 
4970	if (sdebug_max_luns > 256) {
4971		pr_warn("max_luns can be no more than 256, use default\n");
4972		sdebug_max_luns = DEF_MAX_LUNS;
 
 
 
4973	}
4974
4975	if (sdebug_lowest_aligned > 0x3fff) {
4976		pr_err("lowest_aligned too big: %u\n", sdebug_lowest_aligned);
4977		return -EINVAL;
4978	}
4979
4980	if (submit_queues < 1) {
4981		pr_err("submit_queues must be 1 or more\n");
4982		return -EINVAL;
4983	}
4984	sdebug_q_arr = kcalloc(submit_queues, sizeof(struct sdebug_queue),
4985			       GFP_KERNEL);
4986	if (sdebug_q_arr == NULL)
4987		return -ENOMEM;
4988	for (k = 0; k < submit_queues; ++k)
4989		spin_lock_init(&sdebug_q_arr[k].qc_lock);
4990
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4991	if (sdebug_dev_size_mb < 1)
4992		sdebug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
4993	sz = (unsigned long)sdebug_dev_size_mb * 1048576;
4994	sdebug_store_sectors = sz / sdebug_sector_size;
4995	sdebug_capacity = get_sdebug_capacity();
4996
4997	/* play around with geometry, don't waste too much on track 0 */
4998	sdebug_heads = 8;
4999	sdebug_sectors_per = 32;
5000	if (sdebug_dev_size_mb >= 256)
5001		sdebug_heads = 64;
5002	else if (sdebug_dev_size_mb >= 16)
5003		sdebug_heads = 32;
5004	sdebug_cylinders_per = (unsigned long)sdebug_capacity /
5005			       (sdebug_sectors_per * sdebug_heads);
5006	if (sdebug_cylinders_per >= 1024) {
5007		/* other LLDs do this; implies >= 1GB ram disk ... */
5008		sdebug_heads = 255;
5009		sdebug_sectors_per = 63;
5010		sdebug_cylinders_per = (unsigned long)sdebug_capacity /
5011			       (sdebug_sectors_per * sdebug_heads);
5012	}
5013
5014	if (sdebug_fake_rw == 0) {
5015		fake_storep = vmalloc(sz);
5016		if (NULL == fake_storep) {
5017			pr_err("out of memory, 1\n");
5018			ret = -ENOMEM;
5019			goto free_q_arr;
5020		}
5021		memset(fake_storep, 0, sz);
5022		if (sdebug_num_parts > 0)
5023			sdebug_build_parts(fake_storep, sz);
5024	}
5025
5026	if (sdebug_dix) {
5027		int dif_size;
5028
5029		dif_size = sdebug_store_sectors * sizeof(struct t10_pi_tuple);
5030		dif_storep = vmalloc(dif_size);
5031
5032		pr_err("dif_storep %u bytes @ %p\n", dif_size, dif_storep);
5033
5034		if (dif_storep == NULL) {
5035			pr_err("out of mem. (DIX)\n");
5036			ret = -ENOMEM;
5037			goto free_vm;
5038		}
5039
5040		memset(dif_storep, 0xff, dif_size);
5041	}
5042
5043	/* Logical Block Provisioning */
5044	if (scsi_debug_lbp()) {
5045		sdebug_unmap_max_blocks =
5046			clamp(sdebug_unmap_max_blocks, 0U, 0xffffffffU);
5047
5048		sdebug_unmap_max_desc =
5049			clamp(sdebug_unmap_max_desc, 0U, 256U);
5050
5051		sdebug_unmap_granularity =
5052			clamp(sdebug_unmap_granularity, 1U, 0xffffffffU);
5053
5054		if (sdebug_unmap_alignment &&
5055		    sdebug_unmap_granularity <=
5056		    sdebug_unmap_alignment) {
5057			pr_err("ERR: unmap_granularity <= unmap_alignment\n");
5058			ret = -EINVAL;
5059			goto free_vm;
5060		}
 
5061
5062		map_size = lba_to_map_index(sdebug_store_sectors - 1) + 1;
5063		map_storep = vmalloc(BITS_TO_LONGS(map_size) * sizeof(long));
5064
5065		pr_info("%lu provisioning blocks\n", map_size);
5066
5067		if (map_storep == NULL) {
5068			pr_err("out of mem. (MAP)\n");
5069			ret = -ENOMEM;
5070			goto free_vm;
5071		}
5072
5073		bitmap_zero(map_storep, map_size);
5074
5075		/* Map first 1KB for partition table */
5076		if (sdebug_num_parts)
5077			map_region(0, 2);
5078	}
5079
5080	pseudo_primary = root_device_register("pseudo_0");
5081	if (IS_ERR(pseudo_primary)) {
5082		pr_warn("root_device_register() error\n");
5083		ret = PTR_ERR(pseudo_primary);
5084		goto free_vm;
5085	}
5086	ret = bus_register(&pseudo_lld_bus);
5087	if (ret < 0) {
5088		pr_warn("bus_register error: %d\n", ret);
5089		goto dev_unreg;
5090	}
5091	ret = driver_register(&sdebug_driverfs_driver);
5092	if (ret < 0) {
5093		pr_warn("driver_register error: %d\n", ret);
5094		goto bus_unreg;
5095	}
5096
5097	host_to_add = sdebug_add_host;
5098	sdebug_add_host = 0;
5099
5100        for (k = 0; k < host_to_add; k++) {
5101                if (sdebug_add_adapter()) {
5102			pr_err("sdebug_add_adapter failed k=%d\n", k);
5103                        break;
5104                }
5105        }
5106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5107	if (sdebug_verbose)
5108		pr_info("built %d host(s)\n", sdebug_add_host);
5109
5110	return 0;
5111
 
 
5112bus_unreg:
5113	bus_unregister(&pseudo_lld_bus);
5114dev_unreg:
5115	root_device_unregister(pseudo_primary);
5116free_vm:
5117	vfree(map_storep);
5118	vfree(dif_storep);
5119	vfree(fake_storep);
5120free_q_arr:
5121	kfree(sdebug_q_arr);
5122	return ret;
5123}
5124
5125static void __exit scsi_debug_exit(void)
5126{
5127	int k = sdebug_add_host;
5128
5129	stop_all_queued();
5130	free_all_queued();
5131	for (; k; k--)
5132		sdebug_remove_adapter();
 
5133	driver_unregister(&sdebug_driverfs_driver);
5134	bus_unregister(&pseudo_lld_bus);
5135	root_device_unregister(pseudo_primary);
5136
5137	vfree(map_storep);
5138	vfree(dif_storep);
5139	vfree(fake_storep);
5140	kfree(sdebug_q_arr);
5141}
5142
5143device_initcall(scsi_debug_init);
5144module_exit(scsi_debug_exit);
5145
5146static void sdebug_release_adapter(struct device * dev)
5147{
5148        struct sdebug_host_info *sdbg_host;
5149
5150	sdbg_host = to_sdebug_host(dev);
5151        kfree(sdbg_host);
5152}
5153
5154static int sdebug_add_adapter(void)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5155{
5156	int k, devs_per_host;
5157        int error = 0;
5158        struct sdebug_host_info *sdbg_host;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5159	struct sdebug_dev_info *sdbg_devinfo, *tmp;
5160
5161        sdbg_host = kzalloc(sizeof(*sdbg_host),GFP_KERNEL);
5162        if (NULL == sdbg_host) {
5163		pr_err("out of memory at line %d\n", __LINE__);
5164                return -ENOMEM;
5165        }
 
 
5166
5167        INIT_LIST_HEAD(&sdbg_host->dev_info_list);
5168
5169	devs_per_host = sdebug_num_tgts * sdebug_max_luns;
5170        for (k = 0; k < devs_per_host; k++) {
5171		sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
5172		if (!sdbg_devinfo) {
5173			pr_err("out of memory at line %d\n", __LINE__);
5174                        error = -ENOMEM;
5175			goto clean;
5176                }
5177        }
5178
5179        spin_lock(&sdebug_host_list_lock);
5180        list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
5181        spin_unlock(&sdebug_host_list_lock);
5182
5183        sdbg_host->dev.bus = &pseudo_lld_bus;
5184        sdbg_host->dev.parent = pseudo_primary;
5185        sdbg_host->dev.release = &sdebug_release_adapter;
5186	dev_set_name(&sdbg_host->dev, "adapter%d", sdebug_add_host);
5187
5188        error = device_register(&sdbg_host->dev);
5189
5190        if (error)
 
 
5191		goto clean;
 
5192
5193	++sdebug_add_host;
5194        return error;
5195
5196clean:
5197	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5198				 dev_list) {
5199		list_del(&sdbg_devinfo->dev_list);
 
5200		kfree(sdbg_devinfo);
5201	}
 
 
 
 
 
 
 
 
 
 
 
5202
5203	kfree(sdbg_host);
5204        return error;
 
 
 
 
5205}
5206
5207static void sdebug_remove_adapter(void)
5208{
5209        struct sdebug_host_info * sdbg_host = NULL;
 
 
 
 
 
 
 
 
 
 
 
5210
5211        spin_lock(&sdebug_host_list_lock);
5212        if (!list_empty(&sdebug_host_list)) {
5213                sdbg_host = list_entry(sdebug_host_list.prev,
5214                                       struct sdebug_host_info, host_list);
 
 
 
 
 
 
 
 
 
 
 
5215		list_del(&sdbg_host->host_list);
5216	}
5217        spin_unlock(&sdebug_host_list_lock);
5218
5219	if (!sdbg_host)
5220		return;
5221
5222	device_unregister(&sdbg_host->dev);
5223	--sdebug_add_host;
5224}
5225
5226static int sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
5227{
5228	int num_in_q = 0;
5229	struct sdebug_dev_info *devip;
 
 
5230
 
5231	block_unblock_all_queues(true);
5232	devip = (struct sdebug_dev_info *)sdev->hostdata;
5233	if (NULL == devip) {
5234		block_unblock_all_queues(false);
5235		return	-ENODEV;
 
5236	}
5237	num_in_q = atomic_read(&devip->num_in_q);
5238
5239	if (qdepth < 1)
5240		qdepth = 1;
5241	/* allow to exceed max host qc_arr elements for testing */
5242	if (qdepth > SDEBUG_CANQUEUE + 10)
5243		qdepth = SDEBUG_CANQUEUE + 10;
5244	scsi_change_queue_depth(sdev, qdepth);
5245
5246	if (SDEBUG_OPT_Q_NOISE & sdebug_opts) {
5247		sdev_printk(KERN_INFO, sdev, "%s: qdepth=%d, num_in_q=%d\n",
5248			    __func__, qdepth, num_in_q);
5249	}
5250	block_unblock_all_queues(false);
 
 
 
 
 
5251	return sdev->queue_depth;
5252}
5253
5254static bool fake_timeout(struct scsi_cmnd *scp)
5255{
5256	if (0 == (atomic_read(&sdebug_cmnd_count) % abs(sdebug_every_nth))) {
5257		if (sdebug_every_nth < -1)
5258			sdebug_every_nth = -1;
5259		if (SDEBUG_OPT_TIMEOUT & sdebug_opts)
5260			return true; /* ignore command causing timeout */
5261		else if (SDEBUG_OPT_MAC_TIMEOUT & sdebug_opts &&
5262			 scsi_medium_access_command(scp))
5263			return true; /* time out reads and writes */
5264	}
5265	return false;
5266}
5267
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5268static int scsi_debug_queuecommand(struct Scsi_Host *shost,
5269				   struct scsi_cmnd *scp)
5270{
5271	u8 sdeb_i;
5272	struct scsi_device *sdp = scp->device;
5273	const struct opcode_info_t *oip;
5274	const struct opcode_info_t *r_oip;
5275	struct sdebug_dev_info *devip;
5276	u8 *cmd = scp->cmnd;
5277	int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
 
5278	int k, na;
5279	int errsts = 0;
 
5280	u32 flags;
5281	u16 sa;
5282	u8 opcode = cmd[0];
5283	bool has_wlun_rl;
 
 
 
5284
5285	scsi_set_resid(scp, 0);
5286	if (sdebug_statistics)
5287		atomic_inc(&sdebug_cmnd_count);
 
 
 
 
5288	if (unlikely(sdebug_verbose &&
5289		     !(SDEBUG_OPT_NO_CDB_NOISE & sdebug_opts))) {
5290		char b[120];
5291		int n, len, sb;
5292
5293		len = scp->cmd_len;
5294		sb = (int)sizeof(b);
5295		if (len > 32)
5296			strcpy(b, "too long, over 32 bytes");
5297		else {
5298			for (k = 0, n = 0; k < len && n < sb; ++k)
5299				n += scnprintf(b + n, sb - n, "%02x ",
5300					       (u32)cmd[k]);
5301		}
5302		if (sdebug_mq_active)
5303			sdev_printk(KERN_INFO, sdp, "%s: tag=%u, cmd %s\n",
5304				    my_name, blk_mq_unique_tag(scp->request),
5305				    b);
5306		else
5307			sdev_printk(KERN_INFO, sdp, "%s: cmd %s\n", my_name,
5308				    b);
5309	}
 
 
5310	has_wlun_rl = (sdp->lun == SCSI_W_LUN_REPORT_LUNS);
5311	if (unlikely((sdp->lun >= sdebug_max_luns) && !has_wlun_rl))
5312		goto err_out;
5313
5314	sdeb_i = opcode_ind_arr[opcode];	/* fully mapped */
5315	oip = &opcode_info_arr[sdeb_i];		/* safe if table consistent */
5316	devip = (struct sdebug_dev_info *)sdp->hostdata;
5317	if (unlikely(!devip)) {
5318		devip = find_build_dev_info(sdp);
5319		if (NULL == devip)
5320			goto err_out;
5321	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5322	na = oip->num_attached;
5323	r_pfp = oip->pfp;
5324	if (na) {	/* multiple commands with this opcode */
5325		r_oip = oip;
5326		if (FF_SA & r_oip->flags) {
5327			if (F_SA_LOW & oip->flags)
5328				sa = 0x1f & cmd[1];
5329			else
5330				sa = get_unaligned_be16(cmd + 8);
5331			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5332				if (opcode == oip->opcode && sa == oip->sa)
5333					break;
5334			}
5335		} else {   /* since no service action only check opcode */
5336			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5337				if (opcode == oip->opcode)
5338					break;
5339			}
5340		}
5341		if (k > na) {
5342			if (F_SA_LOW & r_oip->flags)
5343				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 4);
5344			else if (F_SA_HIGH & r_oip->flags)
5345				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 8, 7);
5346			else
5347				mk_sense_invalid_opcode(scp);
5348			goto check_cond;
5349		}
5350	}	/* else (when na==0) we assume the oip is a match */
5351	flags = oip->flags;
5352	if (unlikely(F_INV_OP & flags)) {
5353		mk_sense_invalid_opcode(scp);
5354		goto check_cond;
5355	}
5356	if (unlikely(has_wlun_rl && !(F_RL_WLUN_OK & flags))) {
5357		if (sdebug_verbose)
5358			sdev_printk(KERN_INFO, sdp, "%s: Opcode 0x%x not%s\n",
5359				    my_name, opcode, " supported for wlun");
5360		mk_sense_invalid_opcode(scp);
5361		goto check_cond;
5362	}
5363	if (unlikely(sdebug_strict)) {	/* check cdb against mask */
5364		u8 rem;
5365		int j;
5366
5367		for (k = 1; k < oip->len_mask[0] && k < 16; ++k) {
5368			rem = ~oip->len_mask[k] & cmd[k];
5369			if (rem) {
5370				for (j = 7; j >= 0; --j, rem <<= 1) {
5371					if (0x80 & rem)
5372						break;
5373				}
5374				mk_sense_invalid_fld(scp, SDEB_IN_CDB, k, j);
5375				goto check_cond;
5376			}
5377		}
5378	}
5379	if (unlikely(!(F_SKIP_UA & flags) &&
5380		     find_first_bit(devip->uas_bm,
5381				    SDEBUG_NUM_UAS) != SDEBUG_NUM_UAS)) {
5382		errsts = make_ua(scp, devip);
5383		if (errsts)
5384			goto check_cond;
5385	}
5386	if (unlikely((F_M_ACCESS & flags) && atomic_read(&devip->stopped))) {
5387		mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
5388		if (sdebug_verbose)
5389			sdev_printk(KERN_INFO, sdp, "%s reports: Not ready: "
5390				    "%s\n", my_name, "initializing command "
5391				    "required");
5392		errsts = check_condition_result;
5393		goto fini;
5394	}
5395	if (sdebug_fake_rw && (F_FAKE_RW & flags))
5396		goto fini;
5397	if (unlikely(sdebug_every_nth)) {
5398		if (fake_timeout(scp))
5399			return 0;	/* ignore command: make trouble */
5400	}
5401	if (likely(oip->pfp))
5402		errsts = oip->pfp(scp, devip);	/* calls a resp_* function */
5403	else if (r_pfp)	/* if leaf function ptr NULL, try the root's */
5404		errsts = r_pfp(scp, devip);
5405
5406fini:
5407	return schedule_resp(scp, devip, errsts,
5408			     ((F_DELAY_OVERR & flags) ? 0 : sdebug_jdelay));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5409check_cond:
5410	return schedule_resp(scp, devip, check_condition_result, 0);
5411err_out:
5412	return schedule_resp(scp, NULL, DID_NO_CONNECT << 16, 0);
 
 
 
 
 
 
 
 
 
5413}
5414
5415static struct scsi_host_template sdebug_driver_template = {
5416	.show_info =		scsi_debug_show_info,
5417	.write_info =		scsi_debug_write_info,
5418	.proc_name =		sdebug_proc_name,
5419	.name =			"SCSI DEBUG",
5420	.info =			scsi_debug_info,
5421	.slave_alloc =		scsi_debug_slave_alloc,
5422	.slave_configure =	scsi_debug_slave_configure,
5423	.slave_destroy =	scsi_debug_slave_destroy,
5424	.ioctl =		scsi_debug_ioctl,
5425	.queuecommand =		scsi_debug_queuecommand,
5426	.change_queue_depth =	sdebug_change_qdepth,
 
 
5427	.eh_abort_handler =	scsi_debug_abort,
5428	.eh_device_reset_handler = scsi_debug_device_reset,
5429	.eh_target_reset_handler = scsi_debug_target_reset,
5430	.eh_bus_reset_handler = scsi_debug_bus_reset,
5431	.eh_host_reset_handler = scsi_debug_host_reset,
5432	.can_queue =		SDEBUG_CANQUEUE,
5433	.this_id =		7,
5434	.sg_tablesize =		SG_MAX_SEGMENTS,
5435	.cmd_per_lun =		DEF_CMD_PER_LUN,
5436	.max_sectors =		-1U,
5437	.use_clustering = 	DISABLE_CLUSTERING,
5438	.module =		THIS_MODULE,
5439	.track_queue_depth =	1,
 
 
 
 
5440};
5441
5442static int sdebug_driver_probe(struct device * dev)
5443{
5444	int error = 0;
5445	struct sdebug_host_info *sdbg_host;
5446	struct Scsi_Host *hpnt;
5447	int hprot;
5448
5449	sdbg_host = to_sdebug_host(dev);
5450
5451	sdebug_driver_template.can_queue = sdebug_max_queue;
5452	if (sdebug_clustering)
5453		sdebug_driver_template.use_clustering = ENABLE_CLUSTERING;
5454	hpnt = scsi_host_alloc(&sdebug_driver_template, sizeof(sdbg_host));
 
 
5455	if (NULL == hpnt) {
5456		pr_err("scsi_host_alloc failed\n");
5457		error = -ENODEV;
5458		return error;
5459	}
5460	if (submit_queues > nr_cpu_ids) {
5461		pr_warn("%s: trim submit_queues (was %d) to nr_cpu_ids=%d\n",
5462			my_name, submit_queues, nr_cpu_ids);
5463		submit_queues = nr_cpu_ids;
5464	}
5465	/* Decide whether to tell scsi subsystem that we want mq */
5466	/* Following should give the same answer for each host */
5467	sdebug_mq_active = shost_use_blk_mq(hpnt) && (submit_queues > 1);
5468	if (sdebug_mq_active)
5469		hpnt->nr_hw_queues = submit_queues;
 
 
 
 
 
 
 
 
 
5470
5471        sdbg_host->shost = hpnt;
5472	*((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5473	if ((hpnt->this_id >= 0) && (sdebug_num_tgts > hpnt->this_id))
5474		hpnt->max_id = sdebug_num_tgts + 1;
5475	else
5476		hpnt->max_id = sdebug_num_tgts;
5477	/* = sdebug_max_luns; */
5478	hpnt->max_lun = SCSI_W_LUN_REPORT_LUNS + 1;
5479
5480	hprot = 0;
5481
5482	switch (sdebug_dif) {
5483
5484	case T10_PI_TYPE1_PROTECTION:
5485		hprot = SHOST_DIF_TYPE1_PROTECTION;
5486		if (sdebug_dix)
5487			hprot |= SHOST_DIX_TYPE1_PROTECTION;
5488		break;
5489
5490	case T10_PI_TYPE2_PROTECTION:
5491		hprot = SHOST_DIF_TYPE2_PROTECTION;
5492		if (sdebug_dix)
5493			hprot |= SHOST_DIX_TYPE2_PROTECTION;
5494		break;
5495
5496	case T10_PI_TYPE3_PROTECTION:
5497		hprot = SHOST_DIF_TYPE3_PROTECTION;
5498		if (sdebug_dix)
5499			hprot |= SHOST_DIX_TYPE3_PROTECTION;
5500		break;
5501
5502	default:
5503		if (sdebug_dix)
5504			hprot |= SHOST_DIX_TYPE0_PROTECTION;
5505		break;
5506	}
5507
5508	scsi_host_set_prot(hpnt, hprot);
5509
5510	if (have_dif_prot || sdebug_dix)
5511		pr_info("host protection%s%s%s%s%s%s%s\n",
5512			(hprot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
5513			(hprot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
5514			(hprot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
5515			(hprot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
5516			(hprot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
5517			(hprot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
5518			(hprot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
5519
5520	if (sdebug_guard == 1)
5521		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
5522	else
5523		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
5524
5525	sdebug_verbose = !!(SDEBUG_OPT_NOISE & sdebug_opts);
5526	sdebug_any_injecting_opt = !!(SDEBUG_OPT_ALL_INJECTING & sdebug_opts);
5527	if (sdebug_every_nth)	/* need stats counters for every_nth */
5528		sdebug_statistics = true;
5529        error = scsi_add_host(hpnt, &sdbg_host->dev);
5530        if (error) {
5531		pr_err("scsi_add_host failed\n");
5532                error = -ENODEV;
5533		scsi_host_put(hpnt);
5534        } else
5535		scsi_scan_host(hpnt);
 
5536
5537	return error;
5538}
5539
5540static int sdebug_driver_remove(struct device * dev)
5541{
5542        struct sdebug_host_info *sdbg_host;
5543	struct sdebug_dev_info *sdbg_devinfo, *tmp;
5544
5545	sdbg_host = to_sdebug_host(dev);
5546
5547	if (!sdbg_host) {
5548		pr_err("Unable to locate host info\n");
5549		return -ENODEV;
5550	}
5551
5552        scsi_remove_host(sdbg_host->shost);
5553
5554	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5555				 dev_list) {
5556                list_del(&sdbg_devinfo->dev_list);
5557                kfree(sdbg_devinfo);
5558        }
 
5559
5560        scsi_host_put(sdbg_host->shost);
5561        return 0;
5562}
5563
5564static int pseudo_lld_bus_match(struct device *dev,
5565				struct device_driver *dev_driver)
5566{
5567	return 1;
5568}
5569
5570static struct bus_type pseudo_lld_bus = {
5571	.name = "pseudo",
5572	.match = pseudo_lld_bus_match,
5573	.probe = sdebug_driver_probe,
5574	.remove = sdebug_driver_remove,
5575	.drv_groups = sdebug_drv_groups,
5576};