Skip to content

Commit a45aca5

Browse files
apanditrafaeljw
authored andcommitted
PM: sleep: core: Emit changed uevent on wakeup_sysfs_add/remove
Udev rules that depend on the power/wakeup attribute don't get triggered correctly if device_set_wakeup_capable is called after the device is created. This can happen for several reasons (driver sets wakeup after device is created, wakeup is changed on parent device, etc) and it seems reasonable to emit a changed event when adding or removing attributes on the device. Signed-off-by: Abhishek Pandit-Subedi <[email protected]> Reviewed-by: Greg Kroah-Hartman <[email protected]> Reviewed-by: Stephen Boyd <[email protected]> Signed-off-by: Rafael J. Wysocki <[email protected]>
1 parent 11ba468 commit a45aca5

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed

drivers/base/power/sysfs.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-License-Identifier: GPL-2.0
22
/* sysfs entries for device PM */
33
#include <linux/device.h>
4+
#include <linux/kobject.h>
45
#include <linux/string.h>
56
#include <linux/export.h>
67
#include <linux/pm_qos.h>
@@ -739,12 +740,18 @@ int dpm_sysfs_change_owner(struct device *dev, kuid_t kuid, kgid_t kgid)
739740

740741
int wakeup_sysfs_add(struct device *dev)
741742
{
742-
return sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group);
743+
int ret = sysfs_merge_group(&dev->kobj, &pm_wakeup_attr_group);
744+
745+
if (!ret)
746+
kobject_uevent(&dev->kobj, KOBJ_CHANGE);
747+
748+
return ret;
743749
}
744750

745751
void wakeup_sysfs_remove(struct device *dev)
746752
{
747753
sysfs_unmerge_group(&dev->kobj, &pm_wakeup_attr_group);
754+
kobject_uevent(&dev->kobj, KOBJ_CHANGE);
748755
}
749756

750757
int pm_qos_sysfs_add_resume_latency(struct device *dev)

0 commit comments

Comments
 (0)