]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/3w-9xxx.c
[SCSI] 3w-9xxx: use sg buffer copy helper functions
[linux-2.6-omap-h63xx.git] / drivers / scsi / 3w-9xxx.c
index b4912d1cee2aa164e81a82ffaefd9e01d991b2b0..fa922f80635717749e4cf3f74a0344babd8232a6 100644 (file)
@@ -1838,12 +1838,11 @@ static int twa_scsiop_execute_scsi(TW_Device_Extension *tw_dev, int request_id,
                if (scsi_sg_count(srb)) {
                        if ((scsi_sg_count(srb) == 1) &&
                            (scsi_bufflen(srb) < TW_MIN_SGL_LENGTH)) {
-                               if (srb->sc_data_direction == DMA_TO_DEVICE || srb->sc_data_direction == DMA_BIDIRECTIONAL) {
-                                       struct scatterlist *sg = scsi_sglist(srb);
-                                       char *buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset;
-                                       memcpy(tw_dev->generic_buffer_virt[request_id], buf, sg->length);
-                                       kunmap_atomic(buf - sg->offset, KM_IRQ0);
-                               }
+                               if (srb->sc_data_direction == DMA_TO_DEVICE ||
+                                   srb->sc_data_direction == DMA_BIDIRECTIONAL)
+                                       scsi_sg_copy_to_buffer(srb,
+                                                              tw_dev->generic_buffer_virt[request_id],
+                                                              TW_SECTOR_SIZE);
                                command_packet->sg_list[0].address = TW_CPU_TO_SGL(tw_dev->generic_buffer_phys[request_id]);
                                command_packet->sg_list[0].length = cpu_to_le32(TW_MIN_SGL_LENGTH);
                        } else {
@@ -1915,13 +1914,11 @@ static void twa_scsiop_execute_scsi_complete(TW_Device_Extension *tw_dev, int re
            (cmd->sc_data_direction == DMA_FROM_DEVICE ||
             cmd->sc_data_direction == DMA_BIDIRECTIONAL)) {
                if (scsi_sg_count(cmd) == 1) {
-                       struct scatterlist *sg = scsi_sglist(tw_dev->srb[request_id]);
-                       char *buf;
-                       unsigned long flags = 0;
+                       unsigned long flags;
+                       void *buf = tw_dev->generic_buffer_virt[request_id];
+
                        local_irq_save(flags);
-                       buf = kmap_atomic(sg_page(sg), KM_IRQ0) + sg->offset;
-                       memcpy(buf, tw_dev->generic_buffer_virt[request_id], sg->length);
-                       kunmap_atomic(buf - sg->offset, KM_IRQ0);
+                       scsi_sg_copy_from_buffer(cmd, buf, TW_SECTOR_SIZE);
                        local_irq_restore(flags);
                }
        }