Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 103451 Details for
Bug 157326
gentoo-sources: patch for failing ata_piix / libata on ICH7/ICH8
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
libata patch for 2.6.18-r1
libata.patch (text/plain), 3.21 KB, created by
Sebastiaan
on 2006-12-06 07:15:24 UTC
(
hide
)
Description:
libata patch for 2.6.18-r1
Filename:
MIME Type:
Creator:
Sebastiaan
Created:
2006-12-06 07:15:24 UTC
Size:
3.21 KB
patch
obsolete
>--- linuxorg/drivers/scsi/libata-core.c 2006-12-06 15:30:33.000000000 +0100 >+++ linux/drivers/scsi/libata-core.c 2006-12-06 15:48:11.000000000 +0100 >@@ -2271,11 +2271,14 @@ > * 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 +2286,29 @@ > 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))) { >- msleep(50); >+ while (status != 0xff && (status & ATA_BUSY) && >+ time_before(jiffies, timeout)) { > 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 +2399,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); > >--- linuxorg/include/linux/libata.h 2006-12-06 15:30:39.000000000 +0100 >+++ linux/include/linux/libata.h 2006-12-06 15:38:59.000000000 +0100 >@@ -703,9 +703,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, >@@ -1020,8 +1019,7 @@ > udelay(10); > status = ata_chk_status(ap); > max--; >- } while ((status & bits) && (max > 0)); >- >+ } while (status != 0xff && (status & bits) && (max > 0)); > return status; > } > >@@ -1041,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",
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 157326
: 103451 |
103499