summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Cox2006-09-29 19:26:47 +0200
committerJeff Garzik2006-10-05 12:55:00 +0200
commit46767aeba58ca9357a2309765201bad38d8f5e9b (patch)
tree8274aafaf9c3e2232c12493fd1a79cb9483f6f90
parentLinux 2.6.19-rc1 (diff)
downloadkernel-qcow2-linux-46767aeba58ca9357a2309765201bad38d8f5e9b.tar.gz
kernel-qcow2-linux-46767aeba58ca9357a2309765201bad38d8f5e9b.tar.xz
kernel-qcow2-linux-46767aeba58ca9357a2309765201bad38d8f5e9b.zip
[PATCH] libata: Don't believe bogus claims in the older PIO mode register
Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r--drivers/ata/libata-core.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index dce65651d858..ad8e2c64c867 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -870,7 +870,11 @@ static unsigned int ata_id_xfermask(const u16 *id)
* the PIO timing number for the maximum. Turn it into
* a mask.
*/
- pio_mask = (2 << (id[ATA_ID_OLD_PIO_MODES] & 0xFF)) - 1 ;
+ u8 mode = id[ATA_ID_OLD_PIO_MODES] & 0xFF;
+ if (mode < 5) /* Valid PIO range */
+ pio_mask = (2 << mode) - 1;
+ else
+ pio_mask = 1;
/* But wait.. there's more. Design your standards by
* committee and you too can get a free iordy field to