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>,
Ming Lei <ming.lei@redhat.com>,
Kim Bradley <kim.jamie.bradley@gmail.com>
Subject: [PATCH V5 09/16] staging: rtsx: use sg helper to operate scatterlist
Date: Tue, 18 Jun 2019 09:37:50 +0800 [thread overview]
Message-ID: <20190618013757.22401-10-ming.lei@redhat.com> (raw)
In-Reply-To: <20190618013757.22401-1-ming.lei@redhat.com>
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: Kim Bradley <kim.jamie.bradley@gmail.com>
Cc: devel@driverdev.osuosl.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
---
drivers/staging/rts5208/rtsx_transport.c | 32 +++++++++++-------------
drivers/staging/rts5208/rtsx_transport.h | 2 +-
drivers/staging/rts5208/spi.c | 14 ++++++-----
3 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/drivers/staging/rts5208/rtsx_transport.c b/drivers/staging/rts5208/rtsx_transport.c
index 8277d7895608..7a9f42ccebec 100644
--- a/drivers/staging/rts5208/rtsx_transport.c
+++ b/drivers/staging/rts5208/rtsx_transport.c
@@ -32,7 +32,7 @@
unsigned int rtsx_stor_access_xfer_buf(unsigned char *buffer,
unsigned int buflen,
struct scsi_cmnd *srb,
- unsigned int *index,
+ struct scatterlist **sg,
unsigned int *offset,
enum xfer_buf_dir dir)
{
@@ -60,23 +60,20 @@ unsigned int rtsx_stor_access_xfer_buf(unsigned char *buffer,
* each page has to be kmap()'ed separately.
*/
} else {
- struct scatterlist *sg =
- (struct scatterlist *)scsi_sglist(srb)
- + *index;
-
/*
* This loop handles a single s-g list entry, which may
* include multiple pages. Find the initial page structure
* and the starting offset within the page, and update
- * the *offset and *index values for the next loop.
+ * the *offset and current sg for the next loop.
*/
cnt = 0;
- while (cnt < buflen && *index < scsi_sg_count(srb)) {
- struct page *page = sg_page(sg) +
- ((sg->offset + *offset) >> PAGE_SHIFT);
- unsigned int poff = (sg->offset + *offset) &
+ while (cnt < buflen && *sg) {
+ struct page *page = sg_page(*sg) +
+ (((*sg)->offset + *offset) >>
+ PAGE_SHIFT);
+ unsigned int poff = ((*sg)->offset + *offset) &
(PAGE_SIZE - 1);
- unsigned int sglen = sg->length - *offset;
+ unsigned int sglen = (*sg)->length - *offset;
if (sglen > buflen - cnt) {
/* Transfer ends within this s-g entry */
@@ -85,8 +82,7 @@ unsigned int rtsx_stor_access_xfer_buf(unsigned char *buffer,
} else {
/* Transfer continues to next s-g entry */
*offset = 0;
- ++*index;
- ++sg;
+ *sg = sg_next(*sg);
}
while (sglen > 0) {
@@ -120,9 +116,10 @@ unsigned int rtsx_stor_access_xfer_buf(unsigned char *buffer,
void rtsx_stor_set_xfer_buf(unsigned char *buffer,
unsigned int buflen, struct scsi_cmnd *srb)
{
- unsigned int index = 0, offset = 0;
+ unsigned int offset = 0;
+ struct scatterlist *sg = scsi_sglist(srb);
- rtsx_stor_access_xfer_buf(buffer, buflen, srb, &index, &offset,
+ rtsx_stor_access_xfer_buf(buffer, buflen, srb, &sg, &offset,
TO_XFER_BUF);
if (buflen < scsi_bufflen(srb))
scsi_set_resid(srb, scsi_bufflen(srb) - buflen);
@@ -131,9 +128,10 @@ void rtsx_stor_set_xfer_buf(unsigned char *buffer,
void rtsx_stor_get_xfer_buf(unsigned char *buffer,
unsigned int buflen, struct scsi_cmnd *srb)
{
- unsigned int index = 0, offset = 0;
+ unsigned int offset = 0;
+ struct scatterlist *sg = scsi_sglist(srb);
- rtsx_stor_access_xfer_buf(buffer, buflen, srb, &index, &offset,
+ rtsx_stor_access_xfer_buf(buffer, buflen, srb, &sg, &offset,
FROM_XFER_BUF);
if (buflen < scsi_bufflen(srb))
scsi_set_resid(srb, scsi_bufflen(srb) - buflen);
diff --git a/drivers/staging/rts5208/rtsx_transport.h b/drivers/staging/rts5208/rtsx_transport.h
index 097efed24b79..e3ebc3759d92 100644
--- a/drivers/staging/rts5208/rtsx_transport.h
+++ b/drivers/staging/rts5208/rtsx_transport.h
@@ -20,7 +20,7 @@
unsigned int rtsx_stor_access_xfer_buf(unsigned char *buffer,
unsigned int buflen,
struct scsi_cmnd *srb,
- unsigned int *index,
+ struct scatterlist **sg,
unsigned int *offset,
enum xfer_buf_dir dir);
void rtsx_stor_set_xfer_buf(unsigned char *buffer, unsigned int buflen,
diff --git a/drivers/staging/rts5208/spi.c b/drivers/staging/rts5208/spi.c
index f1e9e80044ed..af10916ff00b 100644
--- a/drivers/staging/rts5208/spi.c
+++ b/drivers/staging/rts5208/spi.c
@@ -554,7 +554,8 @@ int spi_read_flash_id(struct scsi_cmnd *srb, struct rtsx_chip *chip)
int spi_read_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip)
{
int retval;
- unsigned int index = 0, offset = 0;
+ unsigned int offset = 0;
+ struct scatterlist *sg = scsi_sglist(srb);
u8 ins, slow_read;
u32 addr;
u16 len;
@@ -631,7 +632,7 @@ int spi_read_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip)
return STATUS_FAIL;
}
- rtsx_stor_access_xfer_buf(buf, pagelen, srb, &index, &offset,
+ rtsx_stor_access_xfer_buf(buf, pagelen, srb, &sg, &offset,
TO_XFER_BUF);
addr += pagelen;
@@ -651,7 +652,8 @@ int spi_write_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip)
u32 addr;
u16 len;
u8 *buf;
- unsigned int index = 0, offset = 0;
+ unsigned int offset = 0;
+ struct scatterlist *sg = scsi_sglist(srb);
spi_set_err_code(chip, SPI_NO_ERR);
@@ -679,7 +681,7 @@ int spi_write_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip)
return STATUS_FAIL;
}
- rtsx_stor_access_xfer_buf(buf, 1, srb, &index, &offset,
+ rtsx_stor_access_xfer_buf(buf, 1, srb, &sg, &offset,
FROM_XFER_BUF);
rtsx_init_cmd(chip);
@@ -722,7 +724,7 @@ int spi_write_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip)
return STATUS_ERROR;
while (len) {
- rtsx_stor_access_xfer_buf(buf, 1, srb, &index, &offset,
+ rtsx_stor_access_xfer_buf(buf, 1, srb, &sg, &offset,
FROM_XFER_BUF);
rtsx_init_cmd(chip);
@@ -788,7 +790,7 @@ int spi_write_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip)
rtsx_send_cmd_no_wait(chip);
- rtsx_stor_access_xfer_buf(buf, pagelen, srb, &index,
+ rtsx_stor_access_xfer_buf(buf, pagelen, srb, &sg,
&offset, FROM_XFER_BUF);
retval = rtsx_transfer_data(chip, 0, buf, pagelen, 0,
--
2.20.1
next prev parent reply other threads:[~2019-06-18 1:39 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-18 1:37 [PATCH V5 00/16] use sg helper to operate scatterlist Ming Lei
2019-06-18 1:37 ` [PATCH V5 01/16] scsi: vmw_pscsi: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 02/16] scsi: advansys: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 03/16] scsi: lpfc: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 04/16] scsi: mvumi: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 05/16] scsi: ipr: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 06/16] scsi: pmcraid: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 07/16] usb: image: microtek: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 08/16] staging: unisys: visorhba: " Ming Lei
2019-06-18 1:37 ` Ming Lei [this message]
2019-06-18 1:37 ` [PATCH V5 10/16] s390: zfcp_fc: " Ming Lei
2019-06-24 15:13 ` Steffen Maier
2019-06-25 1:19 ` Ming Lei
2019-06-25 2:01 ` Finn Thain
2019-06-25 2:30 ` Ming Lei
2019-06-25 3:42 ` Finn Thain
2019-06-25 10:51 ` Steffen Maier
2019-06-26 3:07 ` Ming Lei
2019-06-26 8:17 ` Steffen Maier
2019-06-18 1:37 ` [PATCH V5 11/16] scsi: aha152x: " Ming Lei
2019-06-18 3:54 ` Finn Thain
2019-06-18 1:37 ` [PATCH V5 12/16] scsi: imm: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 13/16] scsi: pcmcia: nsp_cs: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 14/16] scsi: ppa: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 15/16] scsi: wd33c93: " Ming Lei
2019-06-18 1:37 ` [PATCH V5 16/16] NCR5380: Support chained sg lists Ming Lei
2019-06-19 0:29 ` [PATCH V5 00/16] use sg helper to operate scatterlist Martin K. Petersen
2019-06-19 19:43 ` Bart Van Assche
2019-06-19 19:55 ` Martin K. Petersen
2019-06-24 12:40 ` Ming Lei
2019-06-24 12:54 ` Martin K. Petersen
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=20190618013757.22401-10-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=kim.jamie.bradley@gmail.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: 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).