]> www.infradead.org Git - users/jedix/linux-maple.git/commit
PCI: Introduce __pci_reset_function_locked to be used when holding device_lock.
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Thu, 12 Jan 2012 17:06:46 +0000 (12:06 -0500)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Thu, 19 Apr 2012 21:06:50 +0000 (17:06 -0400)
commitd2c0f6026a369823b8490a2407ca5eb1e4489117
tree58983b5b6fcc3f719614ced3de1a7a4ec8cc87fa
parentb7d1af4acf8624b2b32fde7bf0acaee5dc8cd2e8
PCI: Introduce __pci_reset_function_locked to be used when holding device_lock.

The use case of this is when a driver wants to call FLR when a device
is attached to it using the SysFS "bind" or "unbind" functionality.

The call chain when a user does "bind" looks as so:

 echo "0000:01.07.0" > /sys/bus/pci/drivers/XXXX/bind

and ends up calling:
  driver_bind:
    device_lock(dev);  <=== TAKES LOCK
    XXXX_probe:
         .. pci_enable_device()
         ...__pci_reset_function(), which calls
                 pci_dev_reset(dev, 0):
                        if (!0) {
                                device_lock(dev) <==== DEADLOCK

The __pci_reset_function_locked function allows the the drivers
'probe' function to call the "pci_reset_function" while still holding
the driver mutex lock.

[git commit 6fbf9e7]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
drivers/pci/pci.c
include/linux/pci.h