From: Christoph Hellwig <hch@lst.de>
To: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: Jens Axboe <axboe@kernel.dk>, Ming Lei <ming.lei@redhat.com>,
Hannes Reinecke <hare@suse.com>,
Paul Mackerras <paulus@ozlabs.org>,
Juergen Gross <jgross@suse.com>,
linux-scsi@vger.kernel.org, linux-block@vger.kernel.org
Subject: [PATCH 2/9] scsi: introduce a max_segment_size host_template parameters
Date: Thu, 6 Dec 2018 07:52:51 -0800 [thread overview]
Message-ID: <20181206155258.11465-3-hch@lst.de> (raw)
In-Reply-To: <20181206155258.11465-1-hch@lst.de>
This allows the host driver to indicate the maximum supported
segment size in a nice an easy way, so that the driver doesn't
have to worry about DMA-layer imposed limitations.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
drivers/scsi/be2iscsi/be_main.c | 8 +-------
drivers/scsi/hosts.c | 5 +++++
drivers/scsi/scsi_debug.c | 2 +-
drivers/scsi/scsi_lib.c | 3 ++-
include/scsi/scsi_host.h | 6 ++++++
5 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index c4108b17d5ab..39f3820572b4 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -214,12 +214,6 @@ static char const *cqe_desc[] = {
"CXN_KILLED_IMM_DATA_RCVD"
};
-static int beiscsi_slave_configure(struct scsi_device *sdev)
-{
- blk_queue_max_segment_size(sdev->request_queue, 65536);
- return 0;
-}
-
static int beiscsi_eh_abort(struct scsi_cmnd *sc)
{
struct iscsi_task *abrt_task = (struct iscsi_task *)sc->SCp.ptr;
@@ -393,7 +387,6 @@ static struct scsi_host_template beiscsi_sht = {
.proc_name = DRV_NAME,
.queuecommand = iscsi_queuecommand,
.change_queue_depth = scsi_change_queue_depth,
- .slave_configure = beiscsi_slave_configure,
.target_alloc = iscsi_target_alloc,
.eh_timed_out = iscsi_eh_cmd_timed_out,
.eh_abort_handler = beiscsi_eh_abort,
@@ -404,6 +397,7 @@ static struct scsi_host_template beiscsi_sht = {
.can_queue = BE2_IO_DEPTH,
.this_id = -1,
.max_sectors = BEISCSI_MAX_SECTORS,
+ .max_segment_size = 65536,
.cmd_per_lun = BEISCSI_CMD_PER_LUN,
.vendor_id = SCSI_NL_VID_TYPE_PCI | BE_VENDOR_ID,
.track_queue_depth = 1,
diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
index ea4b0bb0c1cd..e8148ba414a3 100644
--- a/drivers/scsi/hosts.c
+++ b/drivers/scsi/hosts.c
@@ -464,6 +464,11 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
else
shost->max_sectors = SCSI_DEFAULT_MAX_SECTORS;
+ if (sht->max_segment_size)
+ shost->max_segment_size = sht->max_segment_size;
+ else
+ shost->max_segment_size = BLK_MAX_SEGMENT_SIZE;
+
/*
* assume a 4GB boundary, if not set
*/
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 53ba417bef8a..57d418d7d74e 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -3973,7 +3973,6 @@ static int scsi_debug_slave_configure(struct scsi_device *sdp)
return 1; /* no resources, will be marked offline */
}
sdp->hostdata = devip;
- blk_queue_max_segment_size(sdp->request_queue, -1U);
if (sdebug_no_uld)
sdp->no_uld_attach = 1;
config_cdb_len(sdp);
@@ -5851,6 +5850,7 @@ static struct scsi_host_template sdebug_driver_template = {
.sg_tablesize = SG_MAX_SEGMENTS,
.cmd_per_lun = DEF_CMD_PER_LUN,
.max_sectors = -1U,
+ .max_segment_size = -1U,
.module = THIS_MODULE,
.track_queue_depth = 1,
};
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index f6900e0b3024..2d4fd6b4bd92 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -2227,7 +2227,8 @@ void __scsi_init_queue(struct Scsi_Host *shost, struct request_queue *q)
blk_queue_segment_boundary(q, shost->dma_boundary);
dma_set_seg_boundary(dev, shost->dma_boundary);
- blk_queue_max_segment_size(q, dma_get_max_seg_size(dev));
+ blk_queue_max_segment_size(q,
+ min(shost->max_segment_size, dma_get_max_seg_size(dev)));
if (shost->use_clustering == DISABLE_CLUSTERING)
q->limits.cluster = 0;
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 7dc534c794dc..834204681ca3 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -364,6 +364,11 @@ struct scsi_host_template {
*/
unsigned int max_sectors;
+ /*
+ * Maximum size in bytes of a single segment.
+ */
+ unsigned int max_segment_size;
+
/*
* DMA scatter gather segment boundary limit. A segment crossing this
* boundary will be split in two.
@@ -603,6 +608,7 @@ struct Scsi_Host {
short unsigned int sg_tablesize;
short unsigned int sg_prot_tablesize;
unsigned int max_sectors;
+ unsigned int max_segment_size;
unsigned long dma_boundary;
/*
* In scsi-mq mode, the number of hardware queues supported by the LLD.
--
2.19.1
next prev parent reply other threads:[~2018-12-06 15:53 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-06 15:52 remove the "clustering" flag Christoph Hellwig
2018-12-06 15:52 ` [PATCH 1/9] scsi: flip the default on use_clustering Christoph Hellwig
2018-12-06 17:05 ` Bart Van Assche
2018-12-06 15:52 ` Christoph Hellwig [this message]
2018-12-06 17:15 ` [PATCH 2/9] scsi: introduce a max_segment_size host_template parameters Bart Van Assche
2018-12-11 2:02 ` Ming Lei
2018-12-11 14:05 ` Christoph Hellwig
2018-12-06 15:52 ` [PATCH 3/9] myrb: remove the DISABLE_CLUSTERING flag Christoph Hellwig
2018-12-06 15:52 ` [PATCH 4/9] myrs: " Christoph Hellwig
2018-12-06 15:52 ` [PATCH 5/9] xen-scsifront: remove DISABLE_CLUSTERING Christoph Hellwig
2018-12-06 15:52 ` [PATCH 6/9] mesh: " Christoph Hellwig
2018-12-06 22:07 ` Paul Mackerras
2018-12-06 15:52 ` [PATCH 7/9] mac53c94: " Christoph Hellwig
2018-12-06 22:07 ` Paul Mackerras
2018-12-06 15:52 ` [PATCH 8/9] scsi: remove the use_clustering flag Christoph Hellwig
2018-12-06 17:13 ` Bart Van Assche
2018-12-08 17:51 ` Christoph Hellwig
2018-12-06 15:52 ` [PATCH 9/9] block: remove the cluster flag Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181206155258.11465-3-hch@lst.de \
--to=hch@lst.de \
--cc=axboe@kernel.dk \
--cc=hare@suse.com \
--cc=jgross@suse.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=ming.lei@redhat.com \
--cc=paulus@ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).