mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
create /sys/.../power when CONFIG_PM is set
The CONFIG_SUSPEND changes in 2.6.23 caused a regression under certain configuration conditions (SUSPEND=n, USB_AUTOSUSPEND=y) where all USB device attributes in sysfs (idVendor, idProduct, ...) silently disappeared, causing udev breakage and more. The cause of this is that the /sys/.../power subdirectory is now only created when CONFIG_PM_SLEEP is set, however, it should be created whenever CONFIG_PM is set to handle the above situation. The following patch fixes the regression. Signed-off-by: Daniel Drake <dsd@gentoo.org> Acked-by: Rafael J. Wysocki <rjw@sisk.pl> Cc: Alan Stern <stern@rowland.harvard.edu> Cc: Kay Sievers <kay.sievers@vrfy.org> Cc: stable <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
345ee8392d
commit
dec13c1544
4 changed files with 27 additions and 16 deletions
|
@ -770,9 +770,10 @@ int device_add(struct device *dev)
|
|||
error = device_add_attrs(dev);
|
||||
if (error)
|
||||
goto AttrsError;
|
||||
error = device_pm_add(dev);
|
||||
error = dpm_sysfs_add(dev);
|
||||
if (error)
|
||||
goto PMError;
|
||||
device_pm_add(dev);
|
||||
error = bus_add_device(dev);
|
||||
if (error)
|
||||
goto BusError;
|
||||
|
@ -797,6 +798,7 @@ int device_add(struct device *dev)
|
|||
return error;
|
||||
BusError:
|
||||
device_pm_remove(dev);
|
||||
dpm_sysfs_remove(dev);
|
||||
PMError:
|
||||
if (dev->bus)
|
||||
blocking_notifier_call_chain(&dev->bus->bus_notifier,
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
obj-y := shutdown.o
|
||||
obj-$(CONFIG_PM_SLEEP) += main.o sysfs.o
|
||||
obj-$(CONFIG_PM) += sysfs.o
|
||||
obj-$(CONFIG_PM_SLEEP) += main.o
|
||||
obj-$(CONFIG_PM_TRACE) += trace.o
|
||||
|
||||
ifeq ($(CONFIG_DEBUG_DRIVER),y)
|
||||
|
|
|
@ -38,20 +38,14 @@ static DEFINE_MUTEX(dpm_list_mtx);
|
|||
int (*platform_enable_wakeup)(struct device *dev, int is_on);
|
||||
|
||||
|
||||
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));
|
||||
mutex_lock(&dpm_list_mtx);
|
||||
list_add_tail(&dev->power.entry, &dpm_active);
|
||||
error = dpm_sysfs_add(dev);
|
||||
if (error)
|
||||
list_del(&dev->power.entry);
|
||||
mutex_unlock(&dpm_list_mtx);
|
||||
return error;
|
||||
}
|
||||
|
||||
void device_pm_remove(struct device *dev)
|
||||
|
|
|
@ -13,14 +13,29 @@ extern void device_shutdown(void);
|
|||
|
||||
extern struct list_head dpm_active; /* The active device list */
|
||||
|
||||
static inline struct device * to_device(struct list_head * entry)
|
||||
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 void device_pm_add(struct device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void device_pm_remove(struct device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
/*
|
||||
* sysfs.c
|
||||
*/
|
||||
|
@ -28,16 +43,15 @@ extern void device_pm_remove(struct device *);
|
|||
extern int dpm_sysfs_add(struct device *);
|
||||
extern void dpm_sysfs_remove(struct device *);
|
||||
|
||||
#else /* CONFIG_PM_SLEEP */
|
||||
#else /* CONFIG_PM */
|
||||
|
||||
|
||||
static inline int device_pm_add(struct device * dev)
|
||||
static inline int dpm_sysfs_add(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void device_pm_remove(struct device * dev)
|
||||
{
|
||||
|
||||
static inline void dpm_sysfs_remove(struct device *dev)
|
||||
{
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue