mirror of https://gitee.com/openkylin/linux.git
[SCSI] add use_sg_chaining option to scsi_host_template
This option is true if a low-level driver can support sg chaining. This will be removed eventually when all the drivers are converted to support sg chaining. q->max_phys_segments is set to SCSI_MAX_SG_SEGMENTS if false. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
c0dcffd71d
commit
9cb83c7529
|
@ -360,6 +360,7 @@ static struct scsi_host_template driver_template = {
|
|||
.max_sectors = 1024,
|
||||
.cmd_per_lun = SIMSCSI_REQ_QUEUE_LEN,
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static int __init
|
||||
|
|
|
@ -1990,6 +1990,7 @@ static struct scsi_host_template driver_template = {
|
|||
.max_sectors = TW_MAX_SECTORS,
|
||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.shost_attrs = twa_host_attrs,
|
||||
.emulated = 1
|
||||
};
|
||||
|
|
|
@ -2261,6 +2261,7 @@ static struct scsi_host_template driver_template = {
|
|||
.max_sectors = TW_MAX_SECTORS,
|
||||
.cmd_per_lun = TW_MAX_CMDS_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.shost_attrs = tw_host_attrs,
|
||||
.emulated = 1
|
||||
};
|
||||
|
|
|
@ -3575,6 +3575,7 @@ static struct scsi_host_template Bus_Logic_template = {
|
|||
.unchecked_isa_dma = 1,
|
||||
.max_sectors = 128,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -1066,7 +1066,8 @@ static struct scsi_host_template driver_template =
|
|||
.sg_tablesize = 32 /*SG_ALL*/ /*SG_NONE*/,
|
||||
.cmd_per_lun = 1 /* commands per lun */,
|
||||
.unchecked_isa_dma = 1 /* unchecked_isa_dma */,
|
||||
.use_clustering = ENABLE_CLUSTERING
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
#include "scsi_module.c"
|
||||
|
|
|
@ -1071,6 +1071,7 @@ static struct scsi_host_template inia100_template = {
|
|||
.sg_tablesize = SG_ALL,
|
||||
.cmd_per_lun = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static int __devinit inia100_probe_one(struct pci_dev *pdev,
|
||||
|
|
|
@ -944,6 +944,7 @@ static struct scsi_host_template aac_driver_template = {
|
|||
.cmd_per_lun = AAC_NUM_IO_FIB,
|
||||
#endif
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.emulated = 1,
|
||||
};
|
||||
|
||||
|
|
|
@ -563,6 +563,7 @@ static struct scsi_host_template aha1740_template = {
|
|||
.sg_tablesize = AHA1740_SCATTER,
|
||||
.cmd_per_lun = AHA1740_CMDLUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.eh_abort_handler = aha1740_eh_abort_handler,
|
||||
};
|
||||
|
||||
|
|
|
@ -766,6 +766,7 @@ struct scsi_host_template aic79xx_driver_template = {
|
|||
.max_sectors = 8192,
|
||||
.cmd_per_lun = 2,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.slave_alloc = ahd_linux_slave_alloc,
|
||||
.slave_configure = ahd_linux_slave_configure,
|
||||
.target_alloc = ahd_linux_target_alloc,
|
||||
|
|
|
@ -747,6 +747,7 @@ struct scsi_host_template aic7xxx_driver_template = {
|
|||
.max_sectors = 8192,
|
||||
.cmd_per_lun = 2,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.slave_alloc = ahc_linux_slave_alloc,
|
||||
.slave_configure = ahc_linux_slave_configure,
|
||||
.target_alloc = ahc_linux_target_alloc,
|
||||
|
|
|
@ -11142,6 +11142,7 @@ static struct scsi_host_template driver_template = {
|
|||
.max_sectors = 2048,
|
||||
.cmd_per_lun = 3,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
#include "scsi_module.c"
|
||||
|
|
|
@ -122,6 +122,7 @@ static struct scsi_host_template arcmsr_scsi_host_template = {
|
|||
.max_sectors = ARCMSR_MAX_XFER_SECTORS,
|
||||
.cmd_per_lun = ARCMSR_MAX_CMD_PERLUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.shost_attrs = arcmsr_host_attrs,
|
||||
};
|
||||
#ifdef CONFIG_SCSI_ARCMSR_AER
|
||||
|
|
|
@ -4765,6 +4765,7 @@ static struct scsi_host_template dc395x_driver_template = {
|
|||
.eh_bus_reset_handler = dc395x_eh_bus_reset,
|
||||
.unchecked_isa_dma = 0,
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -3295,6 +3295,7 @@ static struct scsi_host_template adpt_template = {
|
|||
.this_id = 7,
|
||||
.cmd_per_lun = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static s32 adpt_scsi_register(adpt_hba* pHba)
|
||||
|
|
|
@ -523,7 +523,8 @@ static struct scsi_host_template driver_template = {
|
|||
.slave_configure = eata2x_slave_configure,
|
||||
.this_id = 7,
|
||||
.unchecked_isa_dma = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
#if !defined(__BIG_ENDIAN_BITFIELD) && !defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
|
|
|
@ -343,6 +343,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
|
|||
shost->use_clustering = sht->use_clustering;
|
||||
shost->ordered_tag = sht->ordered_tag;
|
||||
shost->active_mode = sht->supported_mode;
|
||||
shost->use_sg_chaining = sht->use_sg_chaining;
|
||||
|
||||
if (sht->max_host_blocked)
|
||||
shost->max_host_blocked = sht->max_host_blocked;
|
||||
|
|
|
@ -655,6 +655,7 @@ static struct scsi_host_template driver_template = {
|
|||
.unchecked_isa_dma = 0,
|
||||
.emulated = 0,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.proc_name = driver_name,
|
||||
.shost_attrs = hptiop_attrs,
|
||||
.this_id = -1,
|
||||
|
|
|
@ -1501,6 +1501,7 @@ static struct scsi_host_template ibmmca_driver_template = {
|
|||
.sg_tablesize = 16,
|
||||
.cmd_per_lun = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static int ibmmca_probe(struct device *dev)
|
||||
|
|
|
@ -1548,6 +1548,7 @@ static struct scsi_host_template driver_template = {
|
|||
.this_id = -1,
|
||||
.sg_tablesize = SG_ALL,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.shost_attrs = ibmvscsi_attrs,
|
||||
};
|
||||
|
||||
|
|
|
@ -2831,6 +2831,7 @@ static struct scsi_host_template initio_template = {
|
|||
.sg_tablesize = SG_ALL,
|
||||
.cmd_per_lun = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static int initio_probe_one(struct pci_dev *pdev,
|
||||
|
|
|
@ -1438,6 +1438,7 @@ struct scsi_host_template lpfc_template = {
|
|||
.scan_finished = lpfc_scan_finished,
|
||||
.this_id = -1,
|
||||
.sg_tablesize = LPFC_SG_SEG_CNT,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.cmd_per_lun = LPFC_CMD_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.shost_attrs = lpfc_hba_attrs,
|
||||
|
@ -1460,6 +1461,7 @@ struct scsi_host_template lpfc_vport_template = {
|
|||
.sg_tablesize = LPFC_SG_SEG_CNT,
|
||||
.cmd_per_lun = LPFC_CMD_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.shost_attrs = lpfc_vport_attrs,
|
||||
.max_sectors = 0xFFFF,
|
||||
};
|
||||
|
|
|
@ -402,6 +402,7 @@ static struct scsi_host_template mac53c94_template = {
|
|||
.sg_tablesize = SG_ALL,
|
||||
.cmd_per_lun = 1,
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static int mac53c94_probe(struct macio_dev *mdev, const struct of_device_id *match)
|
||||
|
|
|
@ -4492,6 +4492,7 @@ static struct scsi_host_template megaraid_template = {
|
|||
.sg_tablesize = MAX_SGLIST,
|
||||
.cmd_per_lun = DEF_CMD_PER_LUN,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.eh_abort_handler = megaraid_abort,
|
||||
.eh_device_reset_handler = megaraid_reset,
|
||||
.eh_bus_reset_handler = megaraid_reset,
|
||||
|
|
|
@ -361,6 +361,7 @@ static struct scsi_host_template megaraid_template_g = {
|
|||
.eh_host_reset_handler = megaraid_reset_handler,
|
||||
.change_queue_depth = megaraid_change_queue_depth,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.sdev_attrs = megaraid_sdev_attrs,
|
||||
.shost_attrs = megaraid_shost_attrs,
|
||||
};
|
||||
|
|
|
@ -1110,6 +1110,7 @@ static struct scsi_host_template megasas_template = {
|
|||
.eh_timed_out = megasas_reset_timer,
|
||||
.bios_param = megasas_bios_param,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -1843,6 +1843,7 @@ static struct scsi_host_template mesh_template = {
|
|||
.sg_tablesize = SG_ALL,
|
||||
.cmd_per_lun = 2,
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static int mesh_probe(struct macio_dev *mdev, const struct of_device_id *match)
|
||||
|
|
|
@ -281,6 +281,7 @@ static struct scsi_host_template nsp32_template = {
|
|||
.cmd_per_lun = 1,
|
||||
.this_id = NSP32_HOST_SCSIID,
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.eh_abort_handler = nsp32_eh_abort,
|
||||
.eh_bus_reset_handler = nsp32_eh_bus_reset,
|
||||
.eh_host_reset_handler = nsp32_eh_host_reset,
|
||||
|
|
|
@ -694,6 +694,7 @@ static struct scsi_host_template sym53c500_driver_template = {
|
|||
.sg_tablesize = 32,
|
||||
.cmd_per_lun = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.shost_attrs = SYM53C500_shost_attrs
|
||||
};
|
||||
|
||||
|
|
|
@ -132,6 +132,7 @@ struct scsi_host_template qla2x00_driver_template = {
|
|||
.this_id = -1,
|
||||
.cmd_per_lun = 3,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.sg_tablesize = SG_ALL,
|
||||
|
||||
/*
|
||||
|
@ -163,6 +164,7 @@ struct scsi_host_template qla24xx_driver_template = {
|
|||
.this_id = -1,
|
||||
.cmd_per_lun = 3,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.sg_tablesize = SG_ALL,
|
||||
|
||||
.max_sectors = 0xFFFF,
|
||||
|
|
|
@ -94,6 +94,7 @@ static struct scsi_host_template qla4xxx_driver_template = {
|
|||
.this_id = -1,
|
||||
.cmd_per_lun = 3,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.sg_tablesize = SG_ALL,
|
||||
|
||||
.max_sectors = 0xFFFF,
|
||||
|
|
|
@ -197,6 +197,7 @@ static struct scsi_host_template qlogicfas_driver_template = {
|
|||
.sg_tablesize = SG_ALL,
|
||||
.cmd_per_lun = 1,
|
||||
.use_clustering = DISABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static __init int qlogicfas_init(void)
|
||||
|
|
|
@ -1645,7 +1645,10 @@ struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost,
|
|||
* converted, so better keep it safe.
|
||||
*/
|
||||
#ifdef ARCH_HAS_SG_CHAIN
|
||||
blk_queue_max_phys_segments(q, SCSI_MAX_SG_CHAIN_SEGMENTS);
|
||||
if (shost->use_sg_chaining)
|
||||
blk_queue_max_phys_segments(q, SCSI_MAX_SG_CHAIN_SEGMENTS);
|
||||
else
|
||||
blk_queue_max_phys_segments(q, SCSI_MAX_SG_SEGMENTS);
|
||||
#else
|
||||
blk_queue_max_phys_segments(q, SCSI_MAX_SG_SEGMENTS);
|
||||
#endif
|
||||
|
|
|
@ -1123,6 +1123,7 @@ static struct scsi_host_template driver_template = {
|
|||
.this_id = -1,
|
||||
.sg_tablesize = ST_MAX_SG,
|
||||
.cmd_per_lun = ST_CMD_PER_LUN,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
static int stex_set_dma_mask(struct pci_dev * pdev)
|
||||
|
|
|
@ -854,5 +854,6 @@ static struct scsi_host_template driver_template = {
|
|||
.cmd_per_lun = 1,
|
||||
.unchecked_isa_dma = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
#include "scsi_module.c"
|
||||
|
|
|
@ -1808,6 +1808,7 @@ static struct scsi_host_template sym2_template = {
|
|||
.eh_host_reset_handler = sym53c8xx_eh_host_reset_handler,
|
||||
.this_id = 7,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
.max_sectors = 0xFFFF,
|
||||
#ifdef SYM_LINUX_PROC_INFO_SUPPORT
|
||||
.proc_info = sym53c8xx_proc_info,
|
||||
|
|
|
@ -451,6 +451,7 @@ static struct scsi_host_template driver_template = {
|
|||
.this_id = 7,
|
||||
.unchecked_isa_dma = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
#if !defined(__BIG_ENDIAN_BITFIELD) && !defined(__LITTLE_ENDIAN_BITFIELD)
|
||||
|
|
|
@ -1197,5 +1197,6 @@ static struct scsi_host_template driver_template = {
|
|||
.cmd_per_lun = ULTRASTOR_MAX_CMDS_PER_LUN,
|
||||
.unchecked_isa_dma = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
#include "scsi_module.c"
|
||||
|
|
|
@ -1671,6 +1671,7 @@ static struct scsi_host_template driver_template = {
|
|||
.cmd_per_lun = 1,
|
||||
.unchecked_isa_dma = 1,
|
||||
.use_clustering = ENABLE_CLUSTERING,
|
||||
.use_sg_chaining = ENABLE_SG_CHAINING,
|
||||
};
|
||||
|
||||
#include "scsi_module.c"
|
||||
|
|
|
@ -39,6 +39,9 @@ struct blk_queue_tags;
|
|||
#define DISABLE_CLUSTERING 0
|
||||
#define ENABLE_CLUSTERING 1
|
||||
|
||||
#define DISABLE_SG_CHAINING 0
|
||||
#define ENABLE_SG_CHAINING 1
|
||||
|
||||
enum scsi_eh_timer_return {
|
||||
EH_NOT_HANDLED,
|
||||
EH_HANDLED,
|
||||
|
@ -442,6 +445,15 @@ struct scsi_host_template {
|
|||
*/
|
||||
unsigned ordered_tag:1;
|
||||
|
||||
/*
|
||||
* true if the low-level driver can support sg chaining. this
|
||||
* will be removed eventually when all the drivers are
|
||||
* converted to support sg chaining.
|
||||
*
|
||||
* Status: OBSOLETE
|
||||
*/
|
||||
unsigned use_sg_chaining:1;
|
||||
|
||||
/*
|
||||
* Countdown for host blocking with no commands outstanding
|
||||
*/
|
||||
|
@ -586,6 +598,7 @@ struct Scsi_Host {
|
|||
unsigned unchecked_isa_dma:1;
|
||||
unsigned use_clustering:1;
|
||||
unsigned use_blk_tcq:1;
|
||||
unsigned use_sg_chaining:1;
|
||||
|
||||
/*
|
||||
* Host has requested that no further requests come through for the
|
||||
|
|
Loading…
Reference in New Issue