[TG3]: Fix msi issue with kexec/kdump.
authorMichael Chan <mchan@broadcom.com>
Thu, 19 Jul 2007 04:49:10 +0000 (21:49 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 19 Jul 2007 04:49:10 +0000 (21:49 -0700)
commitee6a99b539a50b4e9398938a0a6d37f8bf911550
tree51547e0b9c299be15cc3f54ff3c33b6e3e9c346c
parent7dc12d6dd6cc1aa489c6f3e34a75e8023c945da8
[TG3]: Fix msi issue with kexec/kdump.

Tina Yang <tina.yang@oracle.com> discovered an MSI related problem
when doing kdump.  The problem is that the kexec kernel is booted
without going through system reset, and as a result, MSI may already
be enabled when tg3_init_one() is called.  tg3_init_one() calls
pci_save_state() which will save the stale MSI state.  Later on in
tg3_open(), we call pci_enable_msi() to reconfigure MSI on the chip
before we reset the chip.  After chip reset, we call
pci_restore_state() which will put the stale MSI address/data back
onto the chip.

This is no longer a problem in the latest kernel because
pci_restore_state() has been changed to restore MSI state from
internal data structures which will guarantee restoring the proper
MSI state.

But I think we should still fix it.  Our save and restore sequence
can still cause very subtle problems down the road.  The fix is to
have our own functions save and restore precisely what we need.  We
also change it to save and restore state inside tg3_chip_reset() in a
more straight forward way.

Thanks to Tina for helping to test and debug the problem.

[ Bump driver version and release date. -DaveM ]

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tg3.c
drivers/net/tg3.h