linux/drivers
Mikael Pettersson b9ccd4a90b sata_promise: ASIC PRD table bug workaround, take 2
Second-generation Promise SATA controllers have an ASIC bug
which can trigger if the last PRD entry is larger than 164 bytes,
resulting in intermittent errors and possible data corruption.

Work around this by replacing calls to ata_qc_prep() with a
private version that fills the PRD, checks the size of the
last entry, and if necessary splits it to avoid the bug.
Also reduce sg_tablesize by 1 to accommodate the new entry.

Tested on the second-generation SATA300 TX4 and SATA300 TX2plus,
and the first-generation PDC20378.

Thanks to Alexander Sabourenkov for verifying the bug by
studying the vendor driver, and for writing the initial patch
upon which this one is based.

Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
--
Changes since previous version:
* use new PDC_MAX_PRD constant to initialise sg_tablesize

 drivers/ata/sata_promise.c |   87 ++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 83 insertions(+), 4 deletions(-)
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2007-10-30 09:27:57 -04:00
..
acorn/char unicode diacritics support 2007-10-17 08:42:52 -07:00
acpi Fix /proc/acpi/alarm BCD alarm encodings 2007-10-25 15:08:03 -07:00
amba
ata sata_promise: ASIC PRD table bug workaround, take 2 2007-10-30 09:27:57 -04:00
atm Eliminate pointless casts from void* in a few driver irq handlers. 2007-10-23 19:53:16 -04:00
auxdisplay
base memory hotplug: rearrange memory hotplug notifier 2007-10-22 08:13:17 -07:00
block cciss: update copyright notices 2007-10-29 11:33:05 +01:00
bluetooth [Bluetooth] Add generic driver for Bluetooth USB devices 2007-10-22 02:59:46 -07:00
cdrom SG: audit of drivers that use blk_rq_map_sg() 2007-10-24 13:21:21 +02:00
char x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
clocksource
connector
cpufreq
cpuidle
crypto [CRYPTO] users: Fix up scatterlist conversion errors 2007-10-27 00:52:07 -07:00
dca
dio
dma I/OAT: Add completion callback for async_tx interface use 2007-10-18 14:37:32 -07:00
edac NULL terminate the pci_device_ids in pasemi_edac 2007-10-19 11:53:56 -07:00
eisa
firewire firewire: fw-ohci: shut up a superfluous compiler warning 2007-10-22 19:48:56 +02:00
firmware define global BIT macro 2007-10-19 11:53:42 -07:00
hid changed email 2007-10-20 00:47:32 +02:00
hwmon Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2007-10-19 20:36:17 -07:00
i2c typo fixes 2007-10-20 01:34:40 +02:00
ide Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6 2007-10-28 12:03:14 -07:00
ieee1394 SG: Change sg_set_page() to take length and offset argument 2007-10-24 11:20:47 +02:00
infiniband SG: Change sg_set_page() to take length and offset argument 2007-10-24 11:20:47 +02:00
input [PARPORT] Remove unused 'irq' argument from parport irq functions 2007-10-23 19:53:16 -04:00
isdn [ISDN] capidrv: address two longstanding warnings 2007-10-29 04:45:06 -04:00
kvm Consolidate host virtualization support under Virtualization menu 2007-10-23 15:49:47 +10:00
leds fix typo "sort" -> "short" 2007-10-20 01:55:58 +02:00
lguest lguest: documentation update 2007-10-25 15:02:50 +10:00
macintosh Merge git://git.kernel.org/pub/scm/linux/kernel/git/bunk/trivial 2007-10-19 20:36:17 -07:00
mca
md x86 merge fallout: uml 2007-10-29 07:41:32 -07:00
media SG: Change sg_set_page() to take length and offset argument 2007-10-24 11:20:47 +02:00
message SG: audit of drivers that use blk_rq_map_sg() 2007-10-24 13:21:21 +02:00
mfd typo fixes 2007-10-20 01:34:40 +02:00
misc typo fixes 2007-10-20 01:34:40 +02:00
mmc Correction of "Update drivers to use sg helpers" patch for IMXMMC driver 2007-10-29 09:18:04 +01:00
mtd Eliminate pointless casts from void* in a few driver irq handlers. 2007-10-23 19:53:16 -04:00
net Fix ethernet multicast for ucc_geth. 2007-10-29 06:11:11 -04:00
nubus
of [SPARC/64]: Consolidate of_register_driver 2007-10-17 21:17:42 -07:00
oprofile
parisc parisc: fix sg_page() fallout 2007-10-23 09:49:31 +02:00
parport [PARPORT] Remove unused 'irq' argument from parport irq functions 2007-10-23 19:53:16 -04:00
pci intel-iommu fixes 2007-10-29 07:41:32 -07:00
pcmcia remove asm/bitops.h includes 2007-10-19 11:53:41 -07:00
pnp PNP: add debug message for adding new device 2007-10-17 08:43:04 -07:00
power Merge git://git.infradead.org/battery-2.6 2007-10-22 19:20:52 -07:00
ps3 remove asm/bitops.h includes 2007-10-19 11:53:41 -07:00
rapidio
rtc typo fixes 2007-10-20 01:34:40 +02:00
s390 SG: s390-scsi: missing size parameter in zfcp_address_to_sg() 2007-10-29 09:18:03 +01:00
sbus vfc_dev conversion to mutex: fallout 2007-10-20 15:04:06 -07:00
scsi Merge branch 'sg' of git://git.kernel.dk/linux-2.6-block 2007-10-29 07:49:10 -07:00
serial netdrvr/pcmcia: use IRQ_TYPE_DYNAMIC_SHARING flag for irq.Attributes. 2007-10-29 06:07:05 -04:00
sh
sn
spi fix abuses of ptrdiff_t 2007-10-29 07:41:33 -07:00
ssb [PATCH] ssb: fix build failure 2007-10-16 21:04:11 -04:00
tc lk201: remove obsolete driver 2007-10-17 08:42:57 -07:00
telephony
uio
usb USB: open disconnect race in usblcd 2007-10-25 12:18:46 -07:00
video cirrusfb nonsense 2007-10-27 22:18:12 -07:00
virtio Virtio helper routines for a descriptor ringbuffer implementation 2007-10-23 15:49:55 +10:00
w1 Add missing newlines to some uses of dev_<level> messages 2007-10-18 14:37:28 -07:00
watchdog [WATCHDOG] AR7: watchdog timer 2007-10-23 20:35:13 +00:00
xen Add missing newlines to some uses of dev_<level> messages 2007-10-18 14:37:28 -07:00
zorro Convert files to UTF-8 and some cleanups 2007-10-19 23:21:04 +02:00
Kconfig Virtio interface 2007-10-23 15:49:54 +10:00
Makefile Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2007-10-23 16:37:29 -07:00