Lars Michael Jogback wrote: > * Tejun Heo <tj@xxxxxxxxxx> [2008-10-14 14:51:54]: > >> Hmmm.. drives usually make reset wait while they're spinning up so >> that's where the spin wait logic is implemented. Strange. Can you >> post full boot log and the result of "hdparm -I" on the drive? Also, >> if you first spin up the drive by conneciting only the power connector >> and then connect the SATA cable a bit later, does it work? > > OK, The drives are placed in hotswap-cages in an external enclosure with > it's own powersupply. I have no possibility to connect the power to the > actual drive before signal when I'm hotswapping. I don't think that'll > make a difference though, since I have the same issue when I do a "cold > boot". > > With "cold boot" I mean that I turn the power on the enclosure first and > then boot the PC. With a "warm boot" I reboot the PC a second time > without powercycling the disc enclosure or the discs. Okay, that's enough. That means spinning up doesn't have anything to do with the detection failure. > When I boot the first drive on the PMP is detected by the Sil3124. If > it's a "cold boot", the second drive is not detected in Linux with the > same error as when I hotplug the drive. > > When I "warm boot" everything detects and is fine until I hotplug a > disc. > > Attached is dmesg from cold and warm boot, and hdparm -I on one of the > disks. Can you please try the followings? 1. If you swap the drive on the second slot with another one, does the detection problem stay with the port or follow the drive? 2. Does "libata.force=1.5Gbps" make any difference? 3. Apply the patch and post log after failed hotplug. Thanks. -- tejun
--- drivers/ata/sata_sil24.c | 1 + 1 file changed, 1 insertion(+) Index: tree0/drivers/ata/sata_sil24.c =================================================================== --- tree0.orig/drivers/ata/sata_sil24.c +++ tree0/drivers/ata/sata_sil24.c @@ -978,6 +978,7 @@ static void sil24_error_intr(struct ata_ ehi = &link->eh_info; ata_ehi_clear_desc(ehi); + ata_port_printk(ap, "XXX error_intr irq_stat=0x%x\n", irq_stat); ata_ehi_push_desc(ehi, "irq_stat 0x%08x", irq_stat); if (irq_stat & PORT_IRQ_SDB_NOTIFY) {