|
@@ -288,13 +288,16 @@ static ssize_t enable_store(struct device *dev, struct device_attribute *attr,
|
|
|
if (!capable(CAP_SYS_ADMIN))
|
|
|
return -EPERM;
|
|
|
|
|
|
- if (!val) {
|
|
|
- if (pci_is_enabled(pdev))
|
|
|
- pci_disable_device(pdev);
|
|
|
- else
|
|
|
- result = -EIO;
|
|
|
- } else
|
|
|
+ device_lock(dev);
|
|
|
+ if (dev->driver)
|
|
|
+ result = -EBUSY;
|
|
|
+ else if (val)
|
|
|
result = pci_enable_device(pdev);
|
|
|
+ else if (pci_is_enabled(pdev))
|
|
|
+ pci_disable_device(pdev);
|
|
|
+ else
|
|
|
+ result = -EIO;
|
|
|
+ device_unlock(dev);
|
|
|
|
|
|
return result < 0 ? result : count;
|
|
|
}
|