aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pcmcia/cardbus.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pcmcia/cardbus.c')
-rw-r--r--drivers/pcmcia/cardbus.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/pcmcia/cardbus.c b/drivers/pcmcia/cardbus.c
index b2a98cdbd0d2..8bde61952d20 100644
--- a/drivers/pcmcia/cardbus.c
+++ b/drivers/pcmcia/cardbus.c
@@ -70,6 +70,8 @@ int __ref cb_alloc(struct pcmcia_socket *s)
70 struct pci_dev *dev; 70 struct pci_dev *dev;
71 unsigned int max, pass; 71 unsigned int max, pass;
72 72
73 pci_lock_rescan_remove();
74
73 s->functions = pci_scan_slot(bus, PCI_DEVFN(0, 0)); 75 s->functions = pci_scan_slot(bus, PCI_DEVFN(0, 0));
74 pci_fixup_cardbus(bus); 76 pci_fixup_cardbus(bus);
75 77
@@ -93,6 +95,7 @@ int __ref cb_alloc(struct pcmcia_socket *s)
93 95
94 pci_bus_add_devices(bus); 96 pci_bus_add_devices(bus);
95 97
98 pci_unlock_rescan_remove();
96 return 0; 99 return 0;
97} 100}
98 101
@@ -115,6 +118,10 @@ void cb_free(struct pcmcia_socket *s)
115 if (!bus) 118 if (!bus)
116 return; 119 return;
117 120
121 pci_lock_rescan_remove();
122
118 list_for_each_entry_safe(dev, tmp, &bus->devices, bus_list) 123 list_for_each_entry_safe(dev, tmp, &bus->devices, bus_list)
119 pci_stop_and_remove_bus_device(dev); 124 pci_stop_and_remove_bus_device(dev);
125
126 pci_unlock_rescan_remove();
120} 127}