diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-12-01 02:34:37 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-12-02 22:01:49 +0100 |
commit | 8496e85c20e7836b3dec97780e40f420a3ae2801 (patch) | |
tree | 9859b6aad0ebc29acd964d46b8236b6af05b8ec4 /include | |
parent | ipv6: judge the accept_ra_defrtr before calling rt6_route_rcv (diff) | |
download | linux-8496e85c20e7836b3dec97780e40f420a3ae2801.tar.xz linux-8496e85c20e7836b3dec97780e40f420a3ae2801.zip |
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>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/pci.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h index 1084a15175e0..25a389566e47 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -960,6 +960,7 @@ void pci_update_resource(struct pci_dev *dev, int resno); int __must_check pci_assign_resource(struct pci_dev *dev, int i); int __must_check pci_reassign_resource(struct pci_dev *dev, int i, resource_size_t add_size, resource_size_t align); int pci_select_bars(struct pci_dev *dev, unsigned long flags); +bool pci_device_is_present(struct pci_dev *pdev); /* ROM control related routines */ int pci_enable_rom(struct pci_dev *pdev); |