aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/3w-9xxx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/3w-9xxx.c')
-rw-r--r--drivers/scsi/3w-9xxx.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index b4912d1cee2a..fa922f806357 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -1838,12 +1838,11 @@ static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id,
1838 if (scsi_sg_count(srb)) { 1838 if (scsi_sg_count(srb)) {
1839 if ((scsi_sg_count(srb) == 1) && 1839 if ((scsi_sg_count(srb) == 1) &&
1840 (scsi_bufflen(srb) < TW_MIN_SGL_LENGTH)) { 1840 (scsi_bufflen(srb) < TW_MIN_SGL_LENGTH)) {
1841 if (srb->sc_data_direction == DMA_TO_DEVICE || srb->sc_data_direction == DMA_BIDIRECTIONAL) { 1841 if (srb->sc_data_direction == DMA_TO_DEVICE ||
1842 struct scatterlist *sg = scsi_sglist(srb); 1842 srb->sc_data_direction == DMA_BIDIRECTIONAL)
1843 char *buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset; 1843 scsi_sg_copy_to_buffer(srb,
1844 memcpy(tw_dev->generic_buffer_virt[request_id], buf, sg->length); 1844 tw_dev->generic_buffer_virt[request_id],
1845 kunmap_atomic(buf - sg->offset, KM_IRQ0); 1845 TW_SECTOR_SIZE);
1846 }
1847 command_packet->sg_list[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[request_id]); 1846 command_packet->sg_list[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[request_id]);
1848 command_packet->sg_list[0].length = cpu_to_le32(TW_MIN_SGL_LENGTH); 1847 command_packet->sg_list[0].length = cpu_to_le32(TW_MIN_SGL_LENGTH);
1849 } else { 1848 } else {
@@ -1915,13 +1914,11 @@ static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int re
1915 (cmd->sc_data_direction == DMA_FROM_DEVICE || 1914 (cmd->sc_data_direction == DMA_FROM_DEVICE ||
1916 cmd->sc_data_direction == DMA_BIDIRECTIONAL)) { 1915 cmd->sc_data_direction == DMA_BIDIRECTIONAL)) {
1917 if (scsi_sg_count(cmd) == 1) { 1916 if (scsi_sg_count(cmd) == 1) {
1918 struct scatterlist *sg = scsi_sglist(tw_dev->srb[request_id]); 1917 unsigned long flags;
1919 char *buf; 1918 void *buf = tw_dev->generic_buffer_virt[request_id];
1920 unsigned long flags = 0; 1919
1921 local_irq_save(flags); 1920 local_irq_save(flags);
1922 buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset; 1921 scsi_sg_copy_from_buffer(cmd, buf, TW_SECTOR_SIZE);
1923 memcpy(buf, tw_dev->generic_buffer_virt[request_id], sg->length);
1924 kunmap_atomic(buf - sg->offset, KM_IRQ0);
1925 local_irq_restore(flags); 1922 local_irq_restore(flags);
1926 } 1923 }
1927 } 1924 }