PCI / tg3: Give up chip reset and carrier loss handling if PCI device is not present
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sun, 1 Dec 2013 01:34:37 +0000 (02:34 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Dec 2013 21:01:49 +0000 (16:01 -0500)
commit8496e85c20e7836b3dec97780e40f420a3ae2801
tree9859b6aad0ebc29acd964d46b8236b6af05b8ec4
parent30e56918dd1e6d64350661f186657f6a6f2646e6
PCI / tg3: Give up chip reset and carrier loss handling if PCI device is not present

Modify tg3_chip_reset() and tg3_close() to check if the PCI network
adapter device is accessible at all in order to skip poking it or
trying to handle a carrier loss in vain when that's not the case.
Introduce a special PCI helper function pci_device_is_present()
for this purpose.

Of course, this uncovers the lack of the appropriate RTNL locking
in tg3_suspend() and tg3_resume(), so add that locking in there
too.

These changes prevent tg3 from burning a CPU at 100% load level for
solid several seconds after the Thunderbolt link is disconnected from
a Matrox DS1 docking station.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/tg3.c
drivers/pci/pci.c
include/linux/pci.h