Software Environment: 2.6.19 with MSI enabled
After a S3 resume, I got "irq 20 nobody cared...",
and then IRQ 20 is disabled.
I tried different workarounds and finally found the two below make sense to me:
1. boot option "pci=nomsi". At this time, eth0 interrupt is routed to irq #20
rather than PCI-MSI-edge 219.
2. rmmod tg3 driver before suspend and modprobe it after resume.
So, I think it's a tg3 driver S3 problem.
IMO, after resume from S3, tg3 driver forgets the whole "PCI-MSI" thing and
routes the net card interrupt to irq #20, while leaves the actual interrupt
handler waiting for PCI-MSI-edge *219.
This explains why kernel can not find a handler for irq #20 and the eth0
interrupts from /proc/interrupts stop growing after resume.
steps to reproduce:
Build kernel with CONFIG_PCI_MSI enabled.
echo mem >/sys/power/state
press the power button
Created attachment 10359 [details]
/proc/interrupts w/ and w/o "pci=nomsi"
Created attachment 10360 [details]
save pci state in suspend method and don't call tg3_halt
I knew nothing about the tg3 hardware, so this patch may be totally wrong.
But at least it can help network works well after S3 resume on my laptop.
So I think this may be useful for you to find the problem.
Created attachment 10371 [details]
bug fix patch
Thanks for reporting this problem and providing the initial patch. I've
attached a better patch which preserves the reset during suspend. We'll push
out the patch after more testing.
Sorry for the delay. :)
I tested the patch on my laptop and it works well.
I think we can close this bug.