int get_hp_hw_control_from_firmware(struct pci_dev *dev)
 {
        acpi_status status;
+       acpi_handle handle = DEVICE_ACPI_HANDLE(&(dev->dev));
        /*
         * Per PCI firmware specification, we should run the ACPI _OSC
         * method to get control of hotplug hardware before using it
         */
-       /* Fixme: run _OSC for a specific host bridge, not all of them */
-       status = pci_osc_control_set(OSC_PCI_EXPRESS_NATIVE_HP_CONTROL);
+       status = pci_osc_control_set(handle,
+                       OSC_PCI_EXPRESS_NATIVE_HP_CONTROL);
 
        /* Fixme: fail native hotplug if _OSC does not exist for root ports */
        if (status == AE_NOT_FOUND) {
                 * Some older BIOS's don't support _OSC but support
                 * OSHP to do the same thing
                 */
-               acpi_handle handle = DEVICE_ACPI_HANDLE(&(dev->dev));
-               if (handle)
-                       status = acpi_run_oshp(handle);
+               status = acpi_run_oshp(handle);
        }
        if (ACPI_FAILURE(status)) {
                err("Cannot get control of hotplug hardware\n");
 
 static acpi_status  
 acpi_run_osc (
        acpi_handle     handle,
-       u32             level,
-       void            *context,
-       void            **retval )
+       void            *context)
 {
        acpi_status             status;
        struct acpi_object_list input;
  *
  * Attempt to take control from Firmware on requested control bits.
  **/
-acpi_status pci_osc_control_set(u32 flags)
+acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
 {
        acpi_status     status;
        u32             ctrlset;
                return AE_SUPPORT;
        }
        ctrlset_buf[OSC_CONTROL_TYPE] |= ctrlset;
-       status = acpi_get_devices ( PCI_ROOT_HID_STRING,
-                               acpi_run_osc,
-                               ctrlset_buf,
-                               NULL );
+       status = acpi_run_osc(handle, ctrlset_buf);
        if (ACPI_FAILURE (status)) {
                ctrlset_buf[OSC_CONTROL_TYPE] &= ~ctrlset;
        }
 
                                OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL)
 
 #ifdef CONFIG_ACPI
-extern acpi_status pci_osc_control_set(u32 flags);
+extern acpi_status pci_osc_control_set(acpi_handle handle, u32 flags);
 extern acpi_status pci_osc_support_set(u32 flags);
 #else
 #if !defined(acpi_status)
 typedef u32            acpi_status;
 #define AE_ERROR       (acpi_status) (0x0001)
 #endif    
-static inline acpi_status pci_osc_control_set(u32 flags) {return AE_ERROR;}
+static inline acpi_status pci_osc_control_set(acpi_handle handle, u32 flags)
+{return AE_ERROR;}
 static inline acpi_status pci_osc_support_set(u32 flags) {return AE_ERROR;} 
 #endif