• Konrad Rzeszutek Wilk's avatar
    pci: Introduce __pci_reset_function_locked to be used when holding device_lock. · a96d627a
    Konrad Rzeszutek Wilk authored
    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.
    Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    a96d627a
pci.c 98.1 KB