[PATCH] libata: Don't believe bogus claims in the older PIO mode register
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Fri, 29 Sep 2006 17:26:47 +0000 (18:26 +0100)
committerJeff Garzik <jeff@garzik.org>
Thu, 5 Oct 2006 10:55:00 +0000 (06:55 -0400)
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c

index dce6565..ad8e2c6 100644 (file)
@@ -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