Alan's patch is working on my system with CONFIG_PM and without CONFIG_PM_SLEEP/CONFIG_USB_SUSPEND. Romit, I couldn't check your patch because I was getting errors from the patch program (maybe the tabs). Thanks again, David Engraf > A minor change below: Removed old goto label PMError and introduced SysFSError. > Tested with CONFIG_PM, CONFIG_PM_SLEEP, without CONFIG_PM and ofcourse with CONFIG_USB_SUSPEND. Works fine. > > > diff --git a/drivers/base/core.c b/drivers/base/core.c > index 068aa1c..9c77939 100644 > --- a/drivers/base/core.c > +++ b/drivers/base/core.c > @@ -541,6 +541,7 @@ void device_initialize(struct device *dev) > spin_lock_init(&dev->devres_lock); > INIT_LIST_HEAD(&dev->devres_head); > device_init_wakeup(dev, 0); > + device_pm_init(dev); > set_dev_node(dev, -1); > } > > @@ -897,9 +898,10 @@ int device_add(struct device *dev) > error = bus_add_device(dev); > if (error) > goto BusError; > - error = device_pm_add(dev); > + error = dpm_sysfs_add(dev); > if (error) > - goto PMError; > + goto SysFSError; > + device_pm_add(dev); > kobject_uevent(&dev->kobj, KOBJ_ADD); > bus_attach_device(dev); > if (parent) > @@ -920,7 +922,7 @@ int device_add(struct device *dev) > Done: > put_device(dev); > return error; > - PMError: > + SysFSError: > bus_remove_device(dev); > BusError: > if (dev->bus) > @@ -1007,6 +1009,7 @@ void device_del(struct device *dev) > struct class_interface *class_intf; > > device_pm_remove(dev); > + dpm_sysfs_remove(dev); > if (parent) > klist_del(&dev->knode_parent); > if (MAJOR(dev->devt)) { > diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c > index 3250c52..d1f752b 100644 > --- a/drivers/base/power/main.c > +++ b/drivers/base/power/main.c > @@ -67,10 +67,8 @@ void device_pm_unlock(void) > * device_pm_add - add a device to the list of active devices > * @dev: Device to be added to the list > */ > -int device_pm_add(struct device *dev) > +void device_pm_add(struct device *dev) > { > - int error; > - > pr_debug("PM: Adding info for %s:%s\n", > dev->bus ? dev->bus->name : "No Bus", > kobject_name(&dev->kobj)); > @@ -89,13 +87,8 @@ int device_pm_add(struct device *dev) > */ > WARN_ON(true); > } > - error = dpm_sysfs_add(dev); > - if (!error) { > - dev->power.status = DPM_ON; > - list_add_tail(&dev->power.entry, &dpm_list); > - } > + list_add_tail(&dev->power.entry, &dpm_list); > mutex_unlock(&dpm_list_mtx); > - return error; > } > > /** > @@ -110,7 +103,6 @@ void device_pm_remove(struct device *dev) > dev->bus ? dev->bus->name : "No Bus", > kobject_name(&dev->kobj)); > mutex_lock(&dpm_list_mtx); > - dpm_sysfs_remove(dev); > list_del_init(&dev->power.entry); > mutex_unlock(&dpm_list_mtx); > } > diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h > index a3252c0..41f51fa 100644 > --- a/drivers/base/power/power.h > +++ b/drivers/base/power/power.h > @@ -1,3 +1,8 @@ > +static inline void device_pm_init(struct device *dev) > +{ > + dev->power.status = DPM_ON; > +} > + > #ifdef CONFIG_PM_SLEEP > > /* > @@ -11,12 +16,12 @@ static inline struct device *to_device(struct list_head *entry) > return container_of(entry, struct device, power.entry); > } > > -extern int device_pm_add(struct device *); > +extern void device_pm_add(struct device *); > extern void device_pm_remove(struct device *); > > #else /* CONFIG_PM_SLEEP */ > > -static inline int device_pm_add(struct device *dev) { return 0; } > +static inline void device_pm_add(struct device *dev) {} > static inline void device_pm_remove(struct device *dev) {} > > #endif > > >> -----Original Message----- >> From: Alan Stern [mailto:stern@xxxxxxxxxxxxxxxxxxx] >> Sent: Monday, August 04, 2008 9:15 PM >> To: Rafael J. Wysocki >> Cc: Dasgupta, Romit; David Engraf; Greg KH; linux-usb@xxxxxxxxxxxxxxx; linux- >> kernel@xxxxxxxxxxxxxxx; Linux-pm mailing list >> Subject: Re: [PATCH] [PM] Fixes missing PM entries in sysfs without >> CONFIG_PM_SLEEP >> >> On Mon, 4 Aug 2008, Rafael J. Wysocki wrote: >> >> >>>> Do you think we will want to make device_pm_add() return an error at >>>> some point in the future? >>>> >>> Well, maybe, but not any time soon. :-) >>> >> Okay, here's the updated patch. Awaiting comments from the testers... >> >> Alan Stern >> >> >> >> Index: usb-2.6/drivers/base/power/power.h >> ================================================================ >> === >> --- usb-2.6.orig/drivers/base/power/power.h >> +++ usb-2.6/drivers/base/power/power.h >> @@ -1,3 +1,8 @@ >> +static inline void device_pm_init(struct device *dev) >> +{ >> + dev->power.status = DPM_ON; >> +} >> + >> #ifdef CONFIG_PM_SLEEP >> >> /* >> @@ -11,12 +16,12 @@ static inline struct device *to_device(s >> return container_of(entry, struct device, power.entry); >> } >> >> -extern int device_pm_add(struct device *); >> +extern void device_pm_add(struct device *); >> extern void device_pm_remove(struct device *); >> >> #else /* CONFIG_PM_SLEEP */ >> >> -static inline int device_pm_add(struct device *dev) { return 0; } >> +static inline void device_pm_add(struct device *dev) {} >> static inline void device_pm_remove(struct device *dev) {} >> >> #endif >> Index: usb-2.6/drivers/base/core.c >> ================================================================ >> === >> --- usb-2.6.orig/drivers/base/core.c >> +++ usb-2.6/drivers/base/core.c >> @@ -542,6 +542,7 @@ void device_initialize(struct device *de >> spin_lock_init(&dev->devres_lock); >> INIT_LIST_HEAD(&dev->devres_head); >> device_init_wakeup(dev, 0); >> + device_pm_init(dev); >> set_dev_node(dev, -1); >> } >> >> @@ -898,9 +899,10 @@ int device_add(struct device *dev) >> error = bus_add_device(dev); >> if (error) >> goto BusError; >> - error = device_pm_add(dev); >> + error = dpm_sysfs_add(dev); >> if (error) >> goto PMError; >> + device_pm_add(dev); >> kobject_uevent(&dev->kobj, KOBJ_ADD); >> bus_attach_device(dev); >> if (parent) >> @@ -1008,6 +1010,7 @@ void device_del(struct device *dev) >> struct class_interface *class_intf; >> >> device_pm_remove(dev); >> + dpm_sysfs_remove(dev); >> if (parent) >> klist_del(&dev->knode_parent); >> if (MAJOR(dev->devt)) { >> Index: usb-2.6/drivers/base/power/main.c >> ================================================================ >> === >> --- usb-2.6.orig/drivers/base/power/main.c >> +++ usb-2.6/drivers/base/power/main.c >> @@ -67,10 +67,8 @@ void device_pm_unlock(void) >> * device_pm_add - add a device to the list of active devices >> * @dev: Device to be added to the list >> */ >> -int device_pm_add(struct device *dev) >> +void device_pm_add(struct device *dev) >> { >> - int error; >> - >> pr_debug("PM: Adding info for %s:%s\n", >> dev->bus ? dev->bus->name : "No Bus", >> kobject_name(&dev->kobj)); >> @@ -89,13 +87,9 @@ int device_pm_add(struct device *dev) >> */ >> WARN_ON(true); >> } >> - error = dpm_sysfs_add(dev); >> - if (!error) { >> - dev->power.status = DPM_ON; >> - list_add_tail(&dev->power.entry, &dpm_list); >> - } >> + >> + list_add_tail(&dev->power.entry, &dpm_list); >> mutex_unlock(&dpm_list_mtx); >> - return error; >> } >> >> /** >> @@ -110,7 +104,6 @@ void device_pm_remove(struct device *dev >> dev->bus ? dev->bus->name : "No Bus", >> kobject_name(&dev->kobj)); >> mutex_lock(&dpm_list_mtx); >> - dpm_sysfs_remove(dev); >> list_del_init(&dev->power.entry); >> mutex_unlock(&dpm_list_mtx); >> } >> > > _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm