mirror of https://gitee.com/openkylin/linux.git
staging: cx25821: call disable_pci_device() if pci_probe() failed
Driver should call disable_pci_device() if it returns from pci_probe() with error. Also it must not be called if pci_request_region() fails as it means that somebody uses device resources and rules the device. Signed-off-by: Kulikov Vasiliy <segooon@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
918e3592b9
commit
c37c6d2196
|
@ -962,7 +962,7 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
||||||
dev->pci->subsystem_device);
|
dev->pci->subsystem_device);
|
||||||
|
|
||||||
cx25821_devcount--;
|
cx25821_devcount--;
|
||||||
return -ENODEV;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* PCIe stuff */
|
/* PCIe stuff */
|
||||||
|
@ -1412,9 +1412,12 @@ static int __devinit cx25821_initdev(struct pci_dev *pci_dev,
|
||||||
|
|
||||||
printk(KERN_INFO "cx25821 Athena pci enable !\n");
|
printk(KERN_INFO "cx25821 Athena pci enable !\n");
|
||||||
|
|
||||||
if (cx25821_dev_setup(dev) < 0) {
|
err = cx25821_dev_setup(dev);
|
||||||
err = -EINVAL;
|
if (err) {
|
||||||
goto fail_unregister_device;
|
if (err == -EBUSY)
|
||||||
|
goto fail_unregister_device;
|
||||||
|
else
|
||||||
|
goto fail_unregister_pci;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* print pci info */
|
/* print pci info */
|
||||||
|
@ -1448,6 +1451,8 @@ static int __devinit cx25821_initdev(struct pci_dev *pci_dev,
|
||||||
printk(KERN_INFO "cx25821 cx25821_initdev() can't get IRQ !\n");
|
printk(KERN_INFO "cx25821 cx25821_initdev() can't get IRQ !\n");
|
||||||
cx25821_dev_unregister(dev);
|
cx25821_dev_unregister(dev);
|
||||||
|
|
||||||
|
fail_unregister_pci:
|
||||||
|
pci_disable_device(pci_dev);
|
||||||
fail_unregister_device:
|
fail_unregister_device:
|
||||||
v4l2_device_unregister(&dev->v4l2_dev);
|
v4l2_device_unregister(&dev->v4l2_dev);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue