From: Ming Lei <ming.lei@redhat.com> To: linux-scsi@vger.kernel.org, "Martin K . Petersen" <martin.petersen@oracle.com> Cc: James Bottomley <James.Bottomley@HansenPartnership.com>, Bart Van Assche <bvanassche@acm.org>, Hannes Reinecke <hare@suse.com>, Christoph Hellwig <hch@lst.de>, Jim Gill <jgill@vmware.com>, Cathy Avery <cavery@redhat.com>, "Ewan D . Milne" <emilne@redhat.com>, Brian King <brking@us.ibm.com>, James Smart <james.smart@broadcom.com>, "Juergen E . Fischer" <fischer@norbit.de>, Michael Schmitz <schmitzmic@gmail.com>, Finn Thain <fthain@telegraphics.com.au>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, devel@driverdev.osuosl.org, linux-usb@vger.kernel.org, Dan Carpenter <dan.carpenter@oracle.com>, Benjamin Block <bblock@linux.ibm.com> Subject: [PATCH V4 16/16] NCR5380: Support chained sg lists Date: Mon, 17 Jun 2019 11:03:49 +0800 [thread overview] Message-ID: <20190617030349.26415-17-ming.lei@redhat.com> (raw) In-Reply-To: <20190617030349.26415-1-ming.lei@redhat.com> From: Finn Thain <fthain@telegraphics.com.au> My understanding is that support for chained scatterlists is to become mandatory for LLDs. Use the scatterlist iterators and remove direct indexing of the scatterlist array. This way allows us to pre-allocate one small scatterlist, which can be chained with one runtime allocated scatterlist if the pre-allocated one isn't enough for the whole request. Cc: Michael Schmitz <schmitzmic@gmail.com> Reviewed-by: Michael Schmitz <schmitzmic@gmail.com> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> --- drivers/scsi/NCR5380.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index fe0535affc14..4ef44fafe6ca 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -149,12 +149,10 @@ static inline void initialize_SCp(struct scsi_cmnd *cmd) if (scsi_bufflen(cmd)) { cmd->SCp.buffer = scsi_sglist(cmd); - cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1; cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); cmd->SCp.this_residual = cmd->SCp.buffer->length; } else { cmd->SCp.buffer = NULL; - cmd->SCp.buffers_residual = 0; cmd->SCp.ptr = NULL; cmd->SCp.this_residual = 0; } @@ -163,6 +161,17 @@ static inline void initialize_SCp(struct scsi_cmnd *cmd) cmd->SCp.Message = 0; } +static inline void advance_sg_buffer(struct scsi_cmnd *cmd) +{ + struct scatterlist *s = cmd->SCp.buffer; + + if (!cmd->SCp.this_residual && s && !sg_is_last(s)) { + cmd->SCp.buffer = sg_next(s); + cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); + cmd->SCp.this_residual = cmd->SCp.buffer->length; + } +} + /** * NCR5380_poll_politely2 - wait for two chip register values * @hostdata: host private data @@ -1672,12 +1681,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) sun3_dma_setup_done != cmd) { int count; - if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { - ++cmd->SCp.buffer; - --cmd->SCp.buffers_residual; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); - } + advance_sg_buffer(cmd); count = sun3scsi_dma_xfer_len(hostdata, cmd); @@ -1727,15 +1731,11 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) * scatter-gather list, move onto the next one. */ - if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { - ++cmd->SCp.buffer; - --cmd->SCp.buffers_residual; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); - dsprintk(NDEBUG_INFORMATION, instance, "%d bytes and %d buffers left\n", - cmd->SCp.this_residual, - cmd->SCp.buffers_residual); - } + advance_sg_buffer(cmd); + dsprintk(NDEBUG_INFORMATION, instance, + "this residual %d, sg ents %d\n", + cmd->SCp.this_residual, + sg_nents(cmd->SCp.buffer)); /* * The preferred transfer method is going to be @@ -2136,12 +2136,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance) if (sun3_dma_setup_done != tmp) { int count; - if (!tmp->SCp.this_residual && tmp->SCp.buffers_residual) { - ++tmp->SCp.buffer; - --tmp->SCp.buffers_residual; - tmp->SCp.this_residual = tmp->SCp.buffer->length; - tmp->SCp.ptr = sg_virt(tmp->SCp.buffer); - } + advance_sg_buffer(tmp); count = sun3scsi_dma_xfer_len(hostdata, tmp); -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Ming Lei <ming.lei@redhat.com> To: linux-scsi@vger.kernel.org, "Martin K . Petersen" <martin.petersen@oracle.com> Cc: Michael Schmitz <schmitzmic@gmail.com>, devel@driverdev.osuosl.org, Hannes Reinecke <hare@suse.com>, Benjamin Block <bblock@linux.ibm.com>, Bart Van Assche <bvanassche@acm.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, linux-usb@vger.kernel.org, James Smart <james.smart@broadcom.com>, "Ewan D . Milne" <emilne@redhat.com>, Jim Gill <jgill@vmware.com>, James Bottomley <James.Bottomley@HansenPartnership.com>, Brian King <brking@us.ibm.com>, Finn Thain <fthain@telegraphics.com.au>, "Juergen E . Fischer" <fischer@norbit.de>, Christoph Hellwig <hch@lst.de>, Dan Carpenter <dan.carpenter@oracle.com> Subject: [PATCH V4 16/16] NCR5380: Support chained sg lists Date: Mon, 17 Jun 2019 11:03:49 +0800 [thread overview] Message-ID: <20190617030349.26415-17-ming.lei@redhat.com> (raw) In-Reply-To: <20190617030349.26415-1-ming.lei@redhat.com> From: Finn Thain <fthain@telegraphics.com.au> My understanding is that support for chained scatterlists is to become mandatory for LLDs. Use the scatterlist iterators and remove direct indexing of the scatterlist array. This way allows us to pre-allocate one small scatterlist, which can be chained with one runtime allocated scatterlist if the pre-allocated one isn't enough for the whole request. Cc: Michael Schmitz <schmitzmic@gmail.com> Reviewed-by: Michael Schmitz <schmitzmic@gmail.com> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> --- drivers/scsi/NCR5380.c | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index fe0535affc14..4ef44fafe6ca 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -149,12 +149,10 @@ static inline void initialize_SCp(struct scsi_cmnd *cmd) if (scsi_bufflen(cmd)) { cmd->SCp.buffer = scsi_sglist(cmd); - cmd->SCp.buffers_residual = scsi_sg_count(cmd) - 1; cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); cmd->SCp.this_residual = cmd->SCp.buffer->length; } else { cmd->SCp.buffer = NULL; - cmd->SCp.buffers_residual = 0; cmd->SCp.ptr = NULL; cmd->SCp.this_residual = 0; } @@ -163,6 +161,17 @@ static inline void initialize_SCp(struct scsi_cmnd *cmd) cmd->SCp.Message = 0; } +static inline void advance_sg_buffer(struct scsi_cmnd *cmd) +{ + struct scatterlist *s = cmd->SCp.buffer; + + if (!cmd->SCp.this_residual && s && !sg_is_last(s)) { + cmd->SCp.buffer = sg_next(s); + cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); + cmd->SCp.this_residual = cmd->SCp.buffer->length; + } +} + /** * NCR5380_poll_politely2 - wait for two chip register values * @hostdata: host private data @@ -1672,12 +1681,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) sun3_dma_setup_done != cmd) { int count; - if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { - ++cmd->SCp.buffer; - --cmd->SCp.buffers_residual; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); - } + advance_sg_buffer(cmd); count = sun3scsi_dma_xfer_len(hostdata, cmd); @@ -1727,15 +1731,11 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) * scatter-gather list, move onto the next one. */ - if (!cmd->SCp.this_residual && cmd->SCp.buffers_residual) { - ++cmd->SCp.buffer; - --cmd->SCp.buffers_residual; - cmd->SCp.this_residual = cmd->SCp.buffer->length; - cmd->SCp.ptr = sg_virt(cmd->SCp.buffer); - dsprintk(NDEBUG_INFORMATION, instance, "%d bytes and %d buffers left\n", - cmd->SCp.this_residual, - cmd->SCp.buffers_residual); - } + advance_sg_buffer(cmd); + dsprintk(NDEBUG_INFORMATION, instance, + "this residual %d, sg ents %d\n", + cmd->SCp.this_residual, + sg_nents(cmd->SCp.buffer)); /* * The preferred transfer method is going to be @@ -2136,12 +2136,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance) if (sun3_dma_setup_done != tmp) { int count; - if (!tmp->SCp.this_residual && tmp->SCp.buffers_residual) { - ++tmp->SCp.buffer; - --tmp->SCp.buffers_residual; - tmp->SCp.this_residual = tmp->SCp.buffer->length; - tmp->SCp.ptr = sg_virt(tmp->SCp.buffer); - } + advance_sg_buffer(tmp); count = sun3scsi_dma_xfer_len(hostdata, tmp); -- 2.20.1
next prev parent reply other threads:[~2019-06-17 3:08 UTC|newest] Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-06-17 3:03 [PATCH V4 00/16] use sg helper to operate scatterlist Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 3:03 ` [PATCH V4 01/16] scsi: vmw_pscsi: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 02/16] scsi: advansys: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 03/16] scsi: lpfc: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 04/16] scsi: mvumi: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 8:22 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 05/16] scsi: ipr: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:24 ` Christoph Hellwig 2019-06-17 8:24 ` Christoph Hellwig 2019-06-17 8:50 ` Ming Lei 2019-06-17 8:50 ` Ming Lei 2019-06-17 3:03 ` [PATCH V4 06/16] scsi: pmcraid: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:24 ` Christoph Hellwig 2019-06-17 8:24 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 07/16] usb: image: microtek: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:25 ` Christoph Hellwig 2019-06-17 8:25 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 08/16] staging: unisys: visorhba: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:25 ` Christoph Hellwig 2019-06-17 8:25 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 09/16] staging: rtsx: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:27 ` Christoph Hellwig 2019-06-17 8:27 ` Christoph Hellwig 2019-06-17 9:15 ` Ming Lei 2019-06-17 9:15 ` Ming Lei 2019-06-17 9:24 ` Christoph Hellwig 2019-06-17 9:24 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 10/16] s390: zfcp_fc: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:27 ` Christoph Hellwig 2019-06-17 8:27 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 11/16] scsi: aha152x: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 3:35 ` Finn Thain 2019-06-17 3:35 ` Finn Thain 2019-06-17 23:35 ` Finn Thain 2019-06-17 23:35 ` Finn Thain 2019-06-18 0:15 ` Ming Lei 2019-06-18 0:15 ` Ming Lei 2019-06-17 8:28 ` Christoph Hellwig 2019-06-17 8:28 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 12/16] scsi: imm: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:28 ` Christoph Hellwig 2019-06-17 8:28 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 13/16] scsi: pcmcia: nsp_cs: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:29 ` Christoph Hellwig 2019-06-17 8:29 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 14/16] scsi: ppa: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:29 ` Christoph Hellwig 2019-06-17 8:29 ` Christoph Hellwig 2019-06-17 3:03 ` [PATCH V4 15/16] scsi: wd33c93: " Ming Lei 2019-06-17 3:03 ` Ming Lei 2019-06-17 8:29 ` Christoph Hellwig 2019-06-17 8:29 ` Christoph Hellwig 2019-06-17 3:03 ` Ming Lei [this message] 2019-06-17 3:03 ` [PATCH V4 16/16] NCR5380: Support chained sg lists Ming Lei 2019-06-17 8:30 ` Christoph Hellwig 2019-06-17 8:30 ` Christoph Hellwig 2019-06-17 23:52 ` [PATCH V4 00/16] use sg helper to operate scatterlist Bart Van Assche 2019-06-17 23:52 ` Bart Van Assche
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=20190617030349.26415-17-ming.lei@redhat.com \ --to=ming.lei@redhat.com \ --cc=James.Bottomley@HansenPartnership.com \ --cc=bblock@linux.ibm.com \ --cc=brking@us.ibm.com \ --cc=bvanassche@acm.org \ --cc=cavery@redhat.com \ --cc=dan.carpenter@oracle.com \ --cc=devel@driverdev.osuosl.org \ --cc=emilne@redhat.com \ --cc=fischer@norbit.de \ --cc=fthain@telegraphics.com.au \ --cc=gregkh@linuxfoundation.org \ --cc=hare@suse.com \ --cc=hch@lst.de \ --cc=james.smart@broadcom.com \ --cc=jgill@vmware.com \ --cc=linux-scsi@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=martin.petersen@oracle.com \ --cc=schmitzmic@gmail.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.