• Rafael J. Wysocki's avatar
    PM / Wakeup: Fix initialization of wakeup-related device sysfs files · 22110faf
    Rafael J. Wysocki authored
    It turns out that some PCI devices are only found to be
    wakeup-capable during registration, in which case, when
    device_set_wakeup_capable() is called, device_is_registered() already
    returns 'true' for the given device, but dpm_sysfs_add() hasn't been
    called for it yet.  This leads to situations in which the device's
    power.can_wakeup flag is not set as requested because of failing
    wakeup_sysfs_add() and its wakeup-related sysfs files are not
    created, although they should be present.  This is a post-2.6.38
    regression introduced by commit cb8f51bd
    (PM: Do not create wakeup sysfs files for devices that cannot wake
    up).
    
    To work around this problem initialize the device's power.entry
    field to an empty list head and make device_set_wakeup_capable()
    check if it is still empty before attempting to add the devices
    wakeup-related sysfs files with wakeup_sysfs_add().  Namely, if
    power.entry is still empty at this point, device_pm_add() hasn't been
    called yet for the device and its wakeup-related files will be
    created later, so device_set_wakeup_capable() doesn't have to create
    them.
    Reported-and-tested-by: default avatarTino Keitel <tino.keitel@tikei.de>
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    22110faf
main.c 26.6 KB