On Thu, Apr 20, 2006 at 02:01:12PM +0800, zhao, forrest wrote: > > Hi, Tejun > > When testing hotplug and reading your patches, I thought an interrupt > lost might occur on AHCI in the following case: > > 1 system boot up with SATA disk A attached to port 1 and disk B attached > to port 2 > 2 disk B at port 2 is hot-unplugged > 3 ata_eh_revive() will execute several round of soft-reset/hard-reset as > we observed in dmesg > 4 now imagine ata_eh_revive() start to execute the last round of > hard-reset, so the code path comes into ata_do_reset(), then into > ahci_hardreset() > 5 disk B is hot-plugged to port 2, and an interrupt is triggered > 6 CPU respond to this interrupt when code path execute between > ahci_start_engine(); in ahci_hardreset() and > ap->flags &= ~ATA_FLAG_FROZEN; in ata_do_reset(); > 7 then this interrupt is lost since no EH is scheduled to handle it. > > I think invoking ata_eh_schedule_port() in ahci_postreset() can fix > the problem, is it right? Hello, Forrest. Yes, you're right. The problem is that we cannot tell whether such interrupts are due to the reset or some other events. The goal was to make sure existing devices are okay on EH completion. If new devices get connected during EH, we might lose the event, which IMHO is okay. Maybe this can be solved by merging EH and probe into one. Probing and EH revive are pretty similar in the first place. I'll think about that. But I still think it's okay to lose hotplug interrupt during EH. All the user has to do is simply replug the device or issue manual scan. Thanks. -- tejun - : send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html