[git patches] 2.6.x libata fixes

From: Jeff Garzik
Date: Thu Jun 09 2005 - 03:11:42 EST



Please pull from the 'misc-fixes' branches of
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git

to obtain the two fixes described in the attached diffstat/shortlog/patch.

Jeff



drivers/scsi/libata-core.c | 4 +---
drivers/scsi/sata_sil.c | 8 +++++++-
2 files changed, 8 insertions(+), 4 deletions(-)


Albert Lee:
sg traverse fix for __atapi_pio_bytes()

Jens Axboe:
sata_sil: Fix FIFO PCI Bus Arbitration kernel oops



diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -2577,7 +2577,6 @@ static void __atapi_pio_bytes(struct ata
next_sg:
sg = &qc->sg[qc->cursg];

-next_page:
page = sg->page;
offset = sg->offset + qc->cursg_ofs;

@@ -2585,6 +2584,7 @@ next_page:
page = nth_page(page, (offset >> PAGE_SHIFT));
offset %= PAGE_SIZE;

+ /* don't overrun current sg */
count = min(sg->length - qc->cursg_ofs, bytes);

/* don't cross page boundaries */
@@ -2609,8 +2609,6 @@ next_page:
kunmap(page);

if (bytes) {
- if (qc->cursg_ofs < sg->length)
- goto next_page;
goto next_sg;
}
}
diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c
--- a/drivers/scsi/sata_sil.c
+++ b/drivers/scsi/sata_sil.c
@@ -432,7 +432,13 @@ static int sil_init_one (struct pci_dev
writeb(cls, mmio_base + SIL_FIFO_R0);
writeb(cls, mmio_base + SIL_FIFO_W0);
writeb(cls, mmio_base + SIL_FIFO_R1);
- writeb(cls, mmio_base + SIL_FIFO_W2);
+ writeb(cls, mmio_base + SIL_FIFO_W1);
+ if (ent->driver_data == sil_3114) {
+ writeb(cls, mmio_base + SIL_FIFO_R2);
+ writeb(cls, mmio_base + SIL_FIFO_W2);
+ writeb(cls, mmio_base + SIL_FIFO_R3);
+ writeb(cls, mmio_base + SIL_FIFO_W3);
+ }
} else
printk(KERN_WARNING DRV_NAME "(%s): cache line size not set. Driver may not function\n",
pci_name(pdev));