diff options
Diffstat (limited to 'drivers/ata/ahci.c')
-rw-r--r-- | drivers/ata/ahci.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 5eee91c73c90..cffad07c65bf 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -1483,28 +1483,24 @@ static void ahci_tf_read(struct ata_port *ap, struct ata_taskfile *tf) | |||
1483 | static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl) | 1483 | static unsigned int ahci_fill_sg(struct ata_queued_cmd *qc, void *cmd_tbl) |
1484 | { | 1484 | { |
1485 | struct scatterlist *sg; | 1485 | struct scatterlist *sg; |
1486 | struct ahci_sg *ahci_sg; | 1486 | struct ahci_sg *ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ; |
1487 | unsigned int n_sg = 0; | 1487 | unsigned int si; |
1488 | 1488 | ||
1489 | VPRINTK("ENTER\n"); | 1489 | VPRINTK("ENTER\n"); |
1490 | 1490 | ||
1491 | /* | 1491 | /* |
1492 | * Next, the S/G list. | 1492 | * Next, the S/G list. |
1493 | */ | 1493 | */ |
1494 | ahci_sg = cmd_tbl + AHCI_CMD_TBL_HDR_SZ; | 1494 | for_each_sg(qc->sg, sg, qc->n_elem, si) { |
1495 | ata_for_each_sg(sg, qc) { | ||
1496 | dma_addr_t addr = sg_dma_address(sg); | 1495 | dma_addr_t addr = sg_dma_address(sg); |
1497 | u32 sg_len = sg_dma_len(sg); | 1496 | u32 sg_len = sg_dma_len(sg); |
1498 | 1497 | ||
1499 | ahci_sg->addr = cpu_to_le32(addr & 0xffffffff); | 1498 | ahci_sg[si].addr = cpu_to_le32(addr & 0xffffffff); |
1500 | ahci_sg->addr_hi = cpu_to_le32((addr >> 16) >> 16); | 1499 | ahci_sg[si].addr_hi = cpu_to_le32((addr >> 16) >> 16); |
1501 | ahci_sg->flags_size = cpu_to_le32(sg_len - 1); | 1500 | ahci_sg[si].flags_size = cpu_to_le32(sg_len - 1); |
1502 | |||
1503 | ahci_sg++; | ||
1504 | n_sg++; | ||
1505 | } | 1501 | } |
1506 | 1502 | ||
1507 | return n_sg; | 1503 | return si; |
1508 | } | 1504 | } |
1509 | 1505 | ||
1510 | static void ahci_qc_prep(struct ata_queued_cmd *qc) | 1506 | static void ahci_qc_prep(struct ata_queued_cmd *qc) |