OSDN Git Service

[libata irq-pio] reorganize ata_pio_sector() and __atapi_pio_bytes()
authorAlbert Lee <albertcc@tw.ibm.com>
Sun, 9 Oct 2005 13:46:07 +0000 (09:46 -0400)
committerJeff Garzik <jgarzik@pobox.com>
Sun, 9 Oct 2005 13:46:07 +0000 (09:46 -0400)
   - move some code out of the kmap_atomic() / kunmap_atomic() zone
   - remove the redundant "do_write = (qc->tf.flags & ATA_TFLAG_WRITE);"

Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
drivers/scsi/libata-core.c

index 2c9275e..f893126 100644 (file)
@@ -2763,22 +2763,21 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
        local_irq_save(flags);
        buf = kmap_atomic(page, KM_IRQ0) + offset;
 
-       qc->cursect++;
-       qc->cursg_ofs++;
-
-       if ((qc->cursg_ofs * ATA_SECT_SIZE) == (&sg[qc->cursg])->length) {
-               qc->cursg++;
-               qc->cursg_ofs = 0;
-       }
-
        DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
 
        /* do the actual data transfer */
-       do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
        ata_data_xfer(ap, buf, ATA_SECT_SIZE, do_write);
 
        kunmap_atomic(buf - offset, KM_IRQ0);
        local_irq_restore(flags);
+
+       qc->cursect++;
+       qc->cursg_ofs++;
+
+       if ((qc->cursg_ofs * ATA_SECT_SIZE) == (&sg[qc->cursg])->length) {
+               qc->cursg++;
+               qc->cursg_ofs = 0;
+       }
 }
 
 /**
@@ -2956,6 +2955,14 @@ next_sg:
        local_irq_save(flags);
        buf = kmap_atomic(page, KM_IRQ0) + offset;
 
+       DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
+
+       /* do the actual data transfer */
+       ata_data_xfer(ap, buf, count, do_write);
+
+       kunmap_atomic(buf - offset, KM_IRQ0);
+       local_irq_restore(flags);
+
        bytes -= count;
        qc->curbytes += count;
        qc->cursg_ofs += count;
@@ -2965,14 +2972,6 @@ next_sg:
                qc->cursg_ofs = 0;
        }
 
-       DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
-
-       /* do the actual data transfer */
-       ata_data_xfer(ap, buf, count, do_write);
-
-       kunmap_atomic(buf - offset, KM_IRQ0);
-       local_irq_restore(flags);
-
        if (bytes)
                goto next_sg;
 }