• Michael Chan's avatar
    [TG3]: Fix msi issue with kexec/kdump. · ee6a99b5
    Michael Chan authored
    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: default avatarMichael Chan <mchan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ee6a99b5
tg3.c 349 KB