diff options
Diffstat (limited to 'drivers/pci/hotplug')
-rw-r--r-- | drivers/pci/hotplug/acpiphp_glue.c | 6 | ||||
-rw-r--r-- | drivers/pci/hotplug/sgi_hotplug.c | 5 |
2 files changed, 10 insertions, 1 deletions
diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index d1a6f4a25da8..a951c22921d1 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c | |||
@@ -1218,6 +1218,8 @@ static void _handle_hotplug_event_bridge(struct work_struct *work) | |||
1218 | handle = hp_work->handle; | 1218 | handle = hp_work->handle; |
1219 | type = hp_work->type; | 1219 | type = hp_work->type; |
1220 | 1220 | ||
1221 | acpi_scan_lock_acquire(); | ||
1222 | |||
1221 | if (acpi_bus_get_device(handle, &device)) { | 1223 | if (acpi_bus_get_device(handle, &device)) { |
1222 | /* This bridge must have just been physically inserted */ | 1224 | /* This bridge must have just been physically inserted */ |
1223 | handle_bridge_insertion(handle, type); | 1225 | handle_bridge_insertion(handle, type); |
@@ -1295,6 +1297,7 @@ static void _handle_hotplug_event_bridge(struct work_struct *work) | |||
1295 | } | 1297 | } |
1296 | 1298 | ||
1297 | out: | 1299 | out: |
1300 | acpi_scan_lock_release(); | ||
1298 | kfree(hp_work); /* allocated in handle_hotplug_event_bridge */ | 1301 | kfree(hp_work); /* allocated in handle_hotplug_event_bridge */ |
1299 | } | 1302 | } |
1300 | 1303 | ||
@@ -1341,6 +1344,8 @@ static void _handle_hotplug_event_func(struct work_struct *work) | |||
1341 | 1344 | ||
1342 | func = (struct acpiphp_func *)context; | 1345 | func = (struct acpiphp_func *)context; |
1343 | 1346 | ||
1347 | acpi_scan_lock_acquire(); | ||
1348 | |||
1344 | switch (type) { | 1349 | switch (type) { |
1345 | case ACPI_NOTIFY_BUS_CHECK: | 1350 | case ACPI_NOTIFY_BUS_CHECK: |
1346 | /* bus re-enumerate */ | 1351 | /* bus re-enumerate */ |
@@ -1371,6 +1376,7 @@ static void _handle_hotplug_event_func(struct work_struct *work) | |||
1371 | break; | 1376 | break; |
1372 | } | 1377 | } |
1373 | 1378 | ||
1379 | acpi_scan_lock_release(); | ||
1374 | kfree(hp_work); /* allocated in handle_hotplug_event_func */ | 1380 | kfree(hp_work); /* allocated in handle_hotplug_event_func */ |
1375 | } | 1381 | } |
1376 | 1382 | ||
diff --git a/drivers/pci/hotplug/sgi_hotplug.c b/drivers/pci/hotplug/sgi_hotplug.c index ae606b3e991e..574421bc2fa6 100644 --- a/drivers/pci/hotplug/sgi_hotplug.c +++ b/drivers/pci/hotplug/sgi_hotplug.c | |||
@@ -425,6 +425,7 @@ static int enable_slot(struct hotplug_slot *bss_hotplug_slot) | |||
425 | pdevice = NULL; | 425 | pdevice = NULL; |
426 | } | 426 | } |
427 | 427 | ||
428 | acpi_scan_lock_acquire(); | ||
428 | /* | 429 | /* |
429 | * Walk the rootbus node's immediate children looking for | 430 | * Walk the rootbus node's immediate children looking for |
430 | * the slot's device node(s). There can be more than | 431 | * the slot's device node(s). There can be more than |
@@ -458,6 +459,7 @@ static int enable_slot(struct hotplug_slot *bss_hotplug_slot) | |||
458 | } | 459 | } |
459 | } | 460 | } |
460 | } | 461 | } |
462 | acpi_scan_lock_release(); | ||
461 | } | 463 | } |
462 | 464 | ||
463 | /* Call the driver for the new device */ | 465 | /* Call the driver for the new device */ |
@@ -508,6 +510,7 @@ static int disable_slot(struct hotplug_slot *bss_hotplug_slot) | |||
508 | /* Get the rootbus node pointer */ | 510 | /* Get the rootbus node pointer */ |
509 | phandle = PCI_CONTROLLER(slot->pci_bus)->acpi_handle; | 511 | phandle = PCI_CONTROLLER(slot->pci_bus)->acpi_handle; |
510 | 512 | ||
513 | acpi_scan_lock_acquire(); | ||
511 | /* | 514 | /* |
512 | * Walk the rootbus node's immediate children looking for | 515 | * Walk the rootbus node's immediate children looking for |
513 | * the slot's device node(s). There can be more than | 516 | * the slot's device node(s). There can be more than |
@@ -538,7 +541,7 @@ static int disable_slot(struct hotplug_slot *bss_hotplug_slot) | |||
538 | acpi_bus_trim(device); | 541 | acpi_bus_trim(device); |
539 | } | 542 | } |
540 | } | 543 | } |
541 | 544 | acpi_scan_lock_release(); | |
542 | } | 545 | } |
543 | 546 | ||
544 | /* Free the SN resources assigned to the Linux device.*/ | 547 | /* Free the SN resources assigned to the Linux device.*/ |