From 824f7ef4e7a3b5e6a35aab467bbcf8ce7d9bb529 Mon Sep 17 00:00:00 2001 From: FUJITA Tomonori Date: Sun, 9 Mar 2008 13:44:33 +0900 Subject: [PATCH] --- yaml --- r: 89678 b: refs/heads/master c: 6690bae7e0279451ee92580bf1c5d39a76e3687e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/scsi/ips.c | 50 +++++++--------------------------------- 2 files changed, 9 insertions(+), 43 deletions(-) diff --git a/[refs] b/[refs] index f5f57f940632..190895ce3052 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1a7a2e1a77f29179f997ca5e873c50ae2fb7fcc1 +refs/heads/master: 6690bae7e0279451ee92580bf1c5d39a76e3687e diff --git a/trunk/drivers/scsi/ips.c b/trunk/drivers/scsi/ips.c index 62640366845a..cc4f44fcabb6 100644 --- a/trunk/drivers/scsi/ips.c +++ b/trunk/drivers/scsi/ips.c @@ -3502,28 +3502,11 @@ ips_send_wait(ips_ha_t * ha, ips_scb_t * scb, int timeout, int intr) static void ips_scmd_buf_write(struct scsi_cmnd *scmd, void *data, unsigned int count) { - int i; - unsigned int min_cnt, xfer_cnt; - char *cdata = (char *) data; - unsigned char *buffer; - unsigned long flags; - struct scatterlist *sg = scsi_sglist(scmd); - - for (i = 0, xfer_cnt = 0; - (i < scsi_sg_count(scmd)) && (xfer_cnt < count); - i++, sg = sg_next(sg)) { - min_cnt = min(count - xfer_cnt, sg->length); - - /* kmap_atomic() ensures addressability of the data buffer.*/ - /* local_irq_save() protects the KM_IRQ0 address slot. */ - local_irq_save(flags); - buffer = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset; - memcpy(buffer, &cdata[xfer_cnt], min_cnt); - kunmap_atomic(buffer - sg->offset, KM_IRQ0); - local_irq_restore(flags); + unsigned long flags; - xfer_cnt += min_cnt; - } + local_irq_save(flags); + scsi_sg_copy_from_buffer(scmd, data, count); + local_irq_restore(flags); } /****************************************************************************/ @@ -3536,28 +3519,11 @@ ips_scmd_buf_write(struct scsi_cmnd *scmd, void *data, unsigned int count) static void ips_scmd_buf_read(struct scsi_cmnd *scmd, void *data, unsigned int count) { - int i; - unsigned int min_cnt, xfer_cnt; - char *cdata = (char *) data; - unsigned char *buffer; - unsigned long flags; - struct scatterlist *sg = scsi_sglist(scmd); - - for (i = 0, xfer_cnt = 0; - (i < scsi_sg_count(scmd)) && (xfer_cnt < count); - i++, sg = sg_next(sg)) { - min_cnt = min(count - xfer_cnt, sg->length); - - /* kmap_atomic() ensures addressability of the data buffer.*/ - /* local_irq_save() protects the KM_IRQ0 address slot. */ - local_irq_save(flags); - buffer = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset; - memcpy(&cdata[xfer_cnt], buffer, min_cnt); - kunmap_atomic(buffer - sg->offset, KM_IRQ0); - local_irq_restore(flags); + unsigned long flags; - xfer_cnt += min_cnt; - } + local_irq_save(flags); + scsi_sg_copy_to_buffer(scmd, data, count); + local_irq_restore(flags); } /****************************************************************************/