Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=03116d67e0973bb493fe9307e28973a24a272bcc
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 -= 
cpu_to_le32(SG_COUNT_ASIC_BUG);
+                       ap->prd[idx - 1].flags_len = cpu_to_le32(len - 
SG_COUNT_ASIC_BUG);
                        VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx - 1, addr, 
SG_COUNT_ASIC_BUG);
 
                        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  http://vger.kernel.org/majordomo-info.html

Reply via email to