• R
    ACPI / PM: Split device wakeup management routines · dee8370c
    Rafael J. Wysocki 提交于
    Two device wakeup management routines in device_pm.c and sleep.c,
    acpi_pm_device_run_wake() and acpi_pm_device_sleep_wake(), take a
    device pointer argument and use it to obtain the ACPI handle of the
    corresponding ACPI namespace node.  That handle is then used to get
    the address of the struct acpi_device object corresponding to the
    struct device passed as the argument.
    
    Unfortunately, that last operation may be costly, because it involves
    taking the global ACPI namespace mutex, so it shouldn't be carried
    out too often.  However, the callers of those routines usually call
    them in a row with acpi_pm_device_sleep_state() which also takes that
    mutex for the same reason, so it would be more efficient if they ran
    acpi_bus_get_device() themselves to obtain a pointer to the struct
    acpi_device object in question and then passed that pointer to the
    appropriate PM routines.
    
    To make that possible, split each of the PM routines mentioned above
    in two parts, one taking a struct acpi_device pointer argument and
    the other implementing the current interface for compatibility.
    
    Additionally, change acpi_pm_device_run_wake() to actually return
    an error code if there is an error while setting up runtime remote
    wakeup for the device.
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    dee8370c
acpi_bus.h 13.9 KB