From: Logan Gunthorpe <logang@deltatee.com>
To: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org,
linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org,
intel-gfx@lists.freedesktop.org, linux-raid@vger.kernel.org,
linux-mmc@vger.kernel.org, linux-nvdimm@ml01.01.org,
linux-scsi@vger.kernel.org, open-iscsi@googlegroups.com,
megaraidlinux.pdl@broadcom.com, sparmaintainer@unisys.com,
devel@driverdev.osuosl.org, target-devel@vger.kernel.org,
netdev@vger.kernel.org, linux-rdma@vger.kernel.org,
dm-devel@redhat.com
Cc: Christoph Hellwig <hch@lst.de>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
"James E.J. Bottomley" <jejb@linux.vnet.ibm.com>,
Jens Axboe <axboe@kernel.dk>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Dan Williams <dan.j.williams@intel.com>,
Ross Zwisler <ross.zwisler@linux.intel.com>,
Matthew Wilcox <mawilcox@microsoft.com>,
Sumit Semwal <sumit.semwal@linaro.org>,
Stephen Bates <sbates@raithlin.com>,
Logan Gunthorpe <logang@deltatee.com>,
Johannes Thumshirn <jth@kernel.org>
Subject: [PATCH v2 14/21] scsi: libfc, csiostor: Change to sg_copy_buffer in two drivers
Date: Tue, 25 Apr 2017 12:21:01 -0600 [thread overview]
Message-ID: <1493144468-22493-15-git-send-email-logang@deltatee.com> (raw)
In-Reply-To: <1493144468-22493-1-git-send-email-logang@deltatee.com>
These two drivers appear to duplicate the functionality of
sg_copy_buffer. So we clean them up to use the common code.
This helps us remove a couple of instances that would otherwise be
slightly tricky sg_map usages.
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Cc: Johannes Thumshirn <jth@kernel.org>
---
drivers/scsi/csiostor/csio_scsi.c | 54 +++------------------------------------
drivers/scsi/libfc/fc_libfc.c | 49 ++++++++---------------------------
2 files changed, 14 insertions(+), 89 deletions(-)
diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
index a1ff75f..bd9d062 100644
--- a/drivers/scsi/csiostor/csio_scsi.c
+++ b/drivers/scsi/csiostor/csio_scsi.c
@@ -1489,60 +1489,14 @@ static inline uint32_t
csio_scsi_copy_to_sgl(struct csio_hw *hw, struct csio_ioreq *req)
{
struct scsi_cmnd *scmnd = (struct scsi_cmnd *)csio_scsi_cmnd(req);
- struct scatterlist *sg;
- uint32_t bytes_left;
- uint32_t bytes_copy;
- uint32_t buf_off = 0;
- uint32_t start_off = 0;
- uint32_t sg_off = 0;
- void *sg_addr;
- void *buf_addr;
struct csio_dma_buf *dma_buf;
+ size_t copied;
- bytes_left = scsi_bufflen(scmnd);
- sg = scsi_sglist(scmnd);
dma_buf = (struct csio_dma_buf *)csio_list_next(&req->gen_list);
+ copied = sg_copy_from_buffer(scsi_sglist(scmnd), scsi_sg_count(scmnd),
+ dma_buf->vaddr, scsi_bufflen(scmnd));
- /* Copy data from driver buffer to SGs of SCSI CMD */
- while (bytes_left > 0 && sg && dma_buf) {
- if (buf_off >= dma_buf->len) {
- buf_off = 0;
- dma_buf = (struct csio_dma_buf *)
- csio_list_next(dma_buf);
- continue;
- }
-
- if (start_off >= sg->length) {
- start_off -= sg->length;
- sg = sg_next(sg);
- continue;
- }
-
- buf_addr = dma_buf->vaddr + buf_off;
- sg_off = sg->offset + start_off;
- bytes_copy = min((dma_buf->len - buf_off),
- sg->length - start_off);
- bytes_copy = min((uint32_t)(PAGE_SIZE - (sg_off & ~PAGE_MASK)),
- bytes_copy);
-
- sg_addr = kmap_atomic(sg_page(sg) + (sg_off >> PAGE_SHIFT));
- if (!sg_addr) {
- csio_err(hw, "failed to kmap sg:%p of ioreq:%p\n",
- sg, req);
- break;
- }
-
- csio_dbg(hw, "copy_to_sgl:sg_addr %p sg_off %d buf %p len %d\n",
- sg_addr, sg_off, buf_addr, bytes_copy);
- memcpy(sg_addr + (sg_off & ~PAGE_MASK), buf_addr, bytes_copy);
- kunmap_atomic(sg_addr);
-
- start_off += bytes_copy;
- buf_off += bytes_copy;
- bytes_left -= bytes_copy;
- }
-
- if (bytes_left > 0)
+ if (copied != scsi_bufflen(scmnd))
return DID_ERROR;
else
return DID_OK;
diff --git a/drivers/scsi/libfc/fc_libfc.c b/drivers/scsi/libfc/fc_libfc.c
index d623d08..ce0805a 100644
--- a/drivers/scsi/libfc/fc_libfc.c
+++ b/drivers/scsi/libfc/fc_libfc.c
@@ -113,45 +113,16 @@ u32 fc_copy_buffer_to_sglist(void *buf, size_t len,
u32 *nents, size_t *offset,
u32 *crc)
{
- size_t remaining = len;
- u32 copy_len = 0;
-
- while (remaining > 0 && sg) {
- size_t off, sg_bytes;
- void *page_addr;
-
- if (*offset >= sg->length) {
- /*
- * Check for end and drop resources
- * from the last iteration.
- */
- if (!(*nents))
- break;
- --(*nents);
- *offset -= sg->length;
- sg = sg_next(sg);
- continue;
- }
- sg_bytes = min(remaining, sg->length - *offset);
-
- /*
- * The scatterlist item may be bigger than PAGE_SIZE,
- * but we are limited to mapping PAGE_SIZE at a time.
- */
- off = *offset + sg->offset;
- sg_bytes = min(sg_bytes,
- (size_t)(PAGE_SIZE - (off & ~PAGE_MASK)));
- page_addr = kmap_atomic(sg_page(sg) + (off >> PAGE_SHIFT));
- if (crc)
- *crc = crc32(*crc, buf, sg_bytes);
- memcpy((char *)page_addr + (off & ~PAGE_MASK), buf, sg_bytes);
- kunmap_atomic(page_addr);
- buf += sg_bytes;
- *offset += sg_bytes;
- remaining -= sg_bytes;
- copy_len += sg_bytes;
- }
- return copy_len;
+ size_t copied;
+
+ copied = sg_pcopy_from_buffer(sg, sg_nents(sg),
+ buf, len, *offset);
+
+ *offset += copied;
+ if (crc)
+ *crc = crc32(*crc, buf, copied);
+
+ return copied;
}
/**
--
2.1.4
next prev parent reply other threads:[~2017-04-25 18:32 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-25 18:20 [PATCH v2 00/21] Introduce common scatterlist map function Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 01/21] scatterlist: Introduce sg_map helper functions Logan Gunthorpe
2017-04-26 7:44 ` Christoph Hellwig
2017-04-26 18:11 ` Logan Gunthorpe
2017-04-27 6:53 ` Christoph Hellwig
2017-04-27 15:27 ` Jason Gunthorpe
2017-04-27 15:57 ` Logan Gunthorpe
2017-04-27 15:44 ` Logan Gunthorpe
2017-04-27 20:13 ` Logan Gunthorpe
2017-04-26 8:59 ` Christian König
2017-04-26 23:30 ` Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 02/21] libiscsi: Add an internal error code Logan Gunthorpe
2017-04-26 7:48 ` Christoph Hellwig
2017-04-25 18:20 ` [PATCH v2 03/21] libiscsi: Make use of new the sg_map helper function Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 04/21] target: Make use of the new sg_map function at 16 call sites Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 05/21] drm/i915: Make use of the new sg_map helper function Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 06/21] crypto: hifn_795x: " Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 07/21] crypto: shash, caam: " Logan Gunthorpe
2017-04-27 3:56 ` Herbert Xu
2017-04-27 15:45 ` Logan Gunthorpe
2017-04-28 6:30 ` Herbert Xu
2017-04-28 16:53 ` Logan Gunthorpe
2017-04-28 17:51 ` Herbert Xu
2017-04-28 19:01 ` Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 08/21] dm-crypt: Make use of the new sg_map helper in 4 call sites Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 09/21] staging: unisys: visorbus: Make use of the new sg_map helper function Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 10/21] RDS: " Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 11/21] scsi: ipr, pmcraid, isci: Make use of the new sg_map helper Logan Gunthorpe
2017-04-25 18:20 ` [PATCH v2 12/21] scsi: hisi_sas, mvsas, gdth: Make use of the new sg_map helper function Logan Gunthorpe
2017-04-25 18:21 ` [PATCH v2 13/21] scsi: arcmsr, ips, megaraid: " Logan Gunthorpe
2017-04-25 18:21 ` Logan Gunthorpe [this message]
2017-04-25 18:21 ` [PATCH v2 15/21] xen-blkfront: " Logan Gunthorpe
2017-04-26 7:37 ` Roger Pau Monné
2017-04-27 20:19 ` Logan Gunthorpe
2017-04-27 20:53 ` Jason Gunthorpe
2017-04-27 21:53 ` Logan Gunthorpe
2017-04-27 22:11 ` Jason Gunthorpe
2017-04-27 23:03 ` Logan Gunthorpe
2017-04-27 23:20 ` Jason Gunthorpe
2017-04-27 23:29 ` Logan Gunthorpe
2017-04-25 18:21 ` [PATCH v2 16/21] mmc: sdhci: " Logan Gunthorpe
2017-04-25 18:21 ` [PATCH v2 17/21] mmc: spi: " Logan Gunthorpe
2017-04-25 18:21 ` [PATCH v2 18/21] mmc: tmio: " Logan Gunthorpe
2017-04-25 18:21 ` [PATCH v2 19/21] mmc: sdricoh_cs: " Logan Gunthorpe
2017-04-25 18:21 ` [PATCH v2 20/21] mmc: tifm_sd: " Logan Gunthorpe
2017-04-25 18:21 ` [PATCH v2 21/21] memstick: " Logan Gunthorpe
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=1493144468-22493-15-git-send-email-logang@deltatee.com \
--to=logang@deltatee.com \
--cc=axboe@kernel.dk \
--cc=dan.j.williams@intel.com \
--cc=devel@driverdev.osuosl.org \
--cc=dm-devel@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=hch@lst.de \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jejb@linux.vnet.ibm.com \
--cc=jth@kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-nvdimm@ml01.01.org \
--cc=linux-raid@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=mawilcox@microsoft.com \
--cc=megaraidlinux.pdl@broadcom.com \
--cc=netdev@vger.kernel.org \
--cc=open-iscsi@googlegroups.com \
--cc=ross.zwisler@linux.intel.com \
--cc=sbates@raithlin.com \
--cc=sparmaintainer@unisys.com \
--cc=sumit.semwal@linaro.org \
--cc=target-devel@vger.kernel.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).