All of lore.kernel.org
 help / color / mirror / Atom feed
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


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>,
	Kim Bradley <kim.jamie.bradley@gmail.com>,
	"Juergen E . Fischer" <fischer@norbit.de>,
	Ming Lei <ming.lei@redhat.com>, Christoph Hellwig <hch@lst.de>,
	Dan Carpenter <dan.carpenter@oracle.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

  parent reply	other threads:[~2019-06-18  1:39 UTC|newest]

Thread overview: 65+ 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 ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 01/16] scsi: vmw_pscsi: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 02/16] scsi: advansys: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 03/16] scsi: lpfc: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 04/16] scsi: mvumi: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 05/16] scsi: ipr: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 06/16] scsi: pmcraid: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 07/16] usb: image: microtek: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 08/16] staging: unisys: visorhba: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` Ming Lei [this message]
2019-06-18  1:37   ` [PATCH V5 09/16] staging: rtsx: " Ming Lei
2019-06-18  1:37 ` [PATCH V5 10/16] s390: zfcp_fc: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-24 15:13   ` Steffen Maier
2019-06-24 15:13     ` Steffen Maier
2019-06-25  1:19     ` Ming Lei
2019-06-25  1:19       ` Ming Lei
2019-06-25  2:01       ` Finn Thain
2019-06-25  2:01         ` Finn Thain
2019-06-25  2:30         ` Ming Lei
2019-06-25  2:30           ` Ming Lei
2019-06-25  3:42           ` Finn Thain
2019-06-25  3:42             ` Finn Thain
2019-06-25 10:51       ` Steffen Maier
2019-06-25 10:51         ` Steffen Maier
2019-06-26  3:07         ` Ming Lei
2019-06-26  3:07           ` Ming Lei
2019-06-26  8:17           ` Steffen Maier
2019-06-26  8:17             ` Steffen Maier
2019-06-18  1:37 ` [PATCH V5 11/16] scsi: aha152x: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  3:54   ` Finn Thain
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   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 13/16] scsi: pcmcia: nsp_cs: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 14/16] scsi: ppa: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 15/16] scsi: wd33c93: " Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-18  1:37 ` [PATCH V5 16/16] NCR5380: Support chained sg lists Ming Lei
2019-06-18  1:37   ` Ming Lei
2019-06-19  0:29 ` [PATCH V5 00/16] use sg helper to operate scatterlist Martin K. Petersen
2019-06-19  0:29   ` Martin K. Petersen
2019-06-19  0:29   ` Martin K. Petersen
2019-06-19 19:43   ` Bart Van Assche
2019-06-19 19:43     ` Bart Van Assche
2019-06-19 19:55     ` Martin K. Petersen
2019-06-19 19:55       ` Martin K. Petersen
2019-06-19 19:55       ` Martin K. Petersen
2019-06-24 12:40       ` Ming Lei
2019-06-24 12:40         ` Ming Lei
2019-06-24 12:54         ` Martin K. Petersen
2019-06-24 12:54           ` Martin K. Petersen
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 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.