All pastes #205444 Raw Edit

kernel-2.6.18-libata

public c v1 · immutable
#205444 ·published 2006-10-16 20:24 UTC
rendered paste body
diff -ur linux-2.6.18-old/drivers/scsi/libata-core.c linux-2.6.18/drivers/scsi/libata-core.c--- linux-2.6.18-old/drivers/scsi/libata-core.c 2006-09-20 05:42:06.000000000 +0200+++ linux-2.6.18/drivers/scsi/libata-core.c     2006-10-16 10:47:24.000000000 +0200@@ -2271,11 +2271,15 @@  *     Sleep until ATA Status register bit BSY clears,  *     or a timeout occurs.  *- *     LOCKING: None.+ *     LOCKING:+ *     Kernel thread context (may sleep).+ *+ *     RETURNS:+ *     0 on success, -errno otherwise.  */-unsigned int ata_busy_sleep (struct ata_port *ap,-                            unsigned long tmout_pat, unsigned long tmout)+int ata_busy_sleep (struct ata_port *ap,+                   unsigned long tmout_pat, unsigned long tmout) {        unsigned long timer_start, timeout;        u8 status;@@ -2283,25 +2287,30 @@        status = ata_busy_wait(ap, ATA_BUSY, 300);        timer_start = jiffies;        timeout = timer_start + tmout_pat;-       while ((status & ATA_BUSY) && (time_before(jiffies, timeout))) {+       while (status != 0xff && (status & ATA_BUSY) &&+               time_before(jiffies, timeout)) {                msleep(50);                status = ata_busy_wait(ap, ATA_BUSY, 3);        }-       if (status & ATA_BUSY)+       if (status != 0xff && (status & ATA_BUSY))                ata_port_printk(ap, KERN_WARNING,                                "port is slow to respond, please be patient\n");        timeout = timer_start + tmout;-       while ((status & ATA_BUSY) && (time_before(jiffies, timeout))) {+       while (status != 0xff && (status & ATA_BUSY) &&+               time_before(jiffies, timeout)) {                msleep(50);                status = ata_chk_status(ap);        }+       if (status == 0xff)+               return -ENODEV;+        if (status & ATA_BUSY) {                ata_port_printk(ap, KERN_ERR, "port failed to respond "                                "(%lu secs)\n", tmout / HZ);-               return 1;+               return -EBUSY;        }        return 0;@@ -2392,10 +2401,8 @@         * the bus shows 0xFF because the odd clown forgets the D7         * pulldown resistor.         */-       if (ata_check_status(ap) == 0xFF) {-               ata_port_printk(ap, KERN_ERR, "SRST failed (status 0xFF)\n");-               return AC_ERR_OTHER;-       }+       if (ata_check_status(ap) == 0xFF)+               return 0;        ata_bus_post_reset(ap, devmask);diff -ur linux-2.6.18-old/include/linux/libata.h linux-2.6.18/include/linux/libata.h--- linux-2.6.18-old/include/linux/libata.h     2006-09-20 05:42:06.000000000 +0200+++ linux-2.6.18/include/linux/libata.h 2006-10-16 10:59:40.000000000 +0200@@ -702,9 +702,8 @@                                pm_message_t mesg); extern void ata_host_set_resume(struct ata_host_set *host_set); extern int ata_ratelimit(void);-extern unsigned int ata_busy_sleep(struct ata_port *ap,-                                  unsigned long timeout_pat,-                                  unsigned long timeout);+extern int ata_busy_sleep(struct ata_port *ap,+                           unsigned long timeout_pat, unsigned long timeout); extern void ata_port_queue_task(struct ata_port *ap, void (*fn)(void *),                                void *data, unsigned long delay); extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,@@ -1019,7 +1018,7 @@                udelay(10);                status = ata_chk_status(ap);                max--;-       } while ((status & bits) && (max > 0));+       } while (status != 0xff && (status & bits) && (max > 0));        return status; }@@ -1040,7 +1039,7 @@ {        u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);-       if (status & (ATA_BUSY | ATA_DRQ)) {+       if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ))) {                unsigned long l = ap->ioaddr.status_addr;                if (ata_msg_warn(ap))                        printk(KERN_WARNING "ATA: abnormal status 0x%X on port 0x%lX\n",