2.6.x libata fixes
PATCH 1/1 2.6.x libata fixes
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
drivers/scsi/libata-core.c +1 -3
@@ -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; } }
drivers/scsi/sata_sil.c +7 -1
@@ -432,7 +432,13 @@ static int sil_init_one (struct pci_devwriteb (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));