Tejun Heo wrote:
How about putting a bunch of printks inside the interrupt handler? That
would tell us if it's even reaching the interrupt handler..
If you give me a patch, I'll apply it and cause lock up and report the
result. Just shoot the patches my way. But maybe reproducing the lock
up on your machine would be the better solution. It isn't difficult at
all. Plug in, fire up IO, disconnect, wait. Connect different drive.
Rinse and repeat. It will lock up pretty soon.
Unfortunately my nForce4 machine is my main box with 2 drives, neither
of which exactly have expendable contents, so random hotplug/unplug
tests with IO in progress seem a bit risky..
However, how about putting in a printk in nv_adma_interrupt handler here:
/* freeze if hotplugged or controller error */
if (unlikely(status & (NV_ADMA_STAT_HOTPLUG |
NV_ADMA_STAT_HOTUNPLUG |
NV_ADMA_STAT_TIMEOUT |
NV_ADMA_STAT_SERROR))) {
struct ata_eh_info *ehi = &ap->link.eh_info;
ata_ehi_clear_desc(ehi);
---> ata_port_printk("ADMA status 0x%08x: ", status);
__ata_ehi_push_desc(ehi, "ADMA status 0x%08x: ", status);
That should tell us if it reaches the point of the hotplug/unplug
interrupt but failed before or during the error handling.
If that doesn't give anything useful, you can try and move that printk
before the if, but that will likely flood you with a lot of output from
every interrupt that fires..
-
To unsubscribe from this list: 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