Paul Mundt wrote: > On Wed, May 23, 2007 at 10:07:08AM +0200, Tejun Heo wrote: >> Paul Mundt wrote: >>> On a number of boards the current prereset logic seems to misbehave: >>> >>> scsi0 : pata_platform >>> ata1: PATA max PIO0 cmd 0xb06001f0 ctl 0xb06003f6 bmdma 0x00000000 irq 0 >>> ata1: device not ready (errno=-19), forcing hardreset >>> ata1: BUG: prereset() requested invalid reset type >>> >>> This triggers when there is no card inserted in the slot. >>> >>> Simply disabling the prereset gets rid of this, and doesn't seem to cause >>> any problems for either PCMCIA or CF cards when they're actually present. >> NACK. The BUG printking needs fixing but you can't just kill >> prereset(). Did it work properly on 2.6.21.1? Can you modify >> ata_wait_ready() such that it prints out the status value while waiting? >> > ata_wait_ready() works fine, it reports 0xff immediately (and this is > what I would expect when there is no card inserted). Does the attached patch fix your problem? -- tejun
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index a6de57e..79f2175 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -3368,7 +3368,7 @@ int ata_std_prereset(struct ata_port *ap */ if (!(ap->flags & ATA_FLAG_SKIP_D2H_BSY) && !ata_port_offline(ap)) { rc = ata_wait_ready(ap, deadline); - if (rc) { + if (rc && rc != -ENODEV) { ata_port_printk(ap, KERN_WARNING, "device not ready " "(errno=%d), forcing hardreset\n", rc); ehc->i.action |= ATA_EH_HARDRESET;