Commit:     03116d67e0973bb493fe9307e28973a24a272bcc
Parent:     48166fd9b065005ece8ceae594c1c50b3d955a80
Author:     Mikael Pettersson <[EMAIL PROTECTED]>
AuthorDate: Wed Oct 31 13:21:29 2007 +0100
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Sat Nov 3 08:46:54 2007 -0400

    sata_promise: fix endianess bug in ASIC PRD bug workaround
    The original workaround for the Promise ASIC PRD bug
    contained an endianess bug which I failed to detect:
    the adjustment of the last PRD entry's length field
    applied host arithmetic to little-endian data, which
    is incorrect on big-endian machines.
    We have the length available in host-endian format, so
    do the adjustment on host-endian data and then convert
    and store it in the PRD entry's little-endian data field.
    Thanks to an anonymous reviewer for detecting this bug.
    Signed-off-by: Mikael Pettersson <[EMAIL PROTECTED]>
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
 drivers/ata/sata_promise.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c
index 825e717..7914def 100644
--- a/drivers/ata/sata_promise.c
+++ b/drivers/ata/sata_promise.c
@@ -587,7 +587,7 @@ static void pdc_fill_sg(struct ata_queued_cmd *qc)
                        VPRINTK("Splitting last PRD.\n");
                        addr = le32_to_cpu(ap->prd[idx - 1].addr);
-                       ap->prd[idx - 1].flags_len -= 
+                       ap->prd[idx - 1].flags_len = cpu_to_le32(len - 
                        VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx - 1, addr, 
                        addr = addr + len - SG_COUNT_ASIC_BUG;
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to