diff options
author | Alexander Chiang <achiang@hp.com> | 2009-06-10 15:55:45 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-06-17 23:22:16 -0400 |
commit | 97719a8726fe8d3ea12a85fbf4f514a915ba30ec (patch) | |
tree | 3cb4ef4498be5d22cddd93601e490f5be5e14a8c /drivers/acpi/pci_bind.c | |
parent | d9efae3688addb15994c9ad9761dada6f988bc14 (diff) |
ACPI: acpi_pci_unbind should clean up properly after acpi_pci_bind
In acpi_pci_bind, we set device->ops.bind and device->ops.unbind, but
never clear them out.
Signed-off-by: Alex Chiang <achiang@hp.com>
Acked-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/pci_bind.c')
-rw-r--r-- | drivers/acpi/pci_bind.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/acpi/pci_bind.c b/drivers/acpi/pci_bind.c index 62cb383222f8..a205769f1d00 100644 --- a/drivers/acpi/pci_bind.c +++ b/drivers/acpi/pci_bind.c | |||
@@ -109,12 +109,15 @@ static int acpi_pci_unbind(struct acpi_device *device) | |||
109 | struct pci_dev *dev; | 109 | struct pci_dev *dev; |
110 | 110 | ||
111 | dev = acpi_get_pci_dev(device->handle); | 111 | dev = acpi_get_pci_dev(device->handle); |
112 | if (!dev) | 112 | if (!dev || !dev->subordinate) |
113 | return 0; | 113 | goto out; |
114 | 114 | ||
115 | if (dev->subordinate) | 115 | acpi_pci_irq_del_prt(dev->subordinate); |
116 | acpi_pci_irq_del_prt(dev->subordinate); | 116 | |
117 | device->ops.bind = NULL; | ||
118 | device->ops.unbind = NULL; | ||
117 | 119 | ||
120 | out: | ||
118 | pci_dev_put(dev); | 121 | pci_dev_put(dev); |
119 | return 0; | 122 | return 0; |
120 | } | 123 | } |