lkml.org 
[lkml]   [2008]   [Aug]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] [PM] Fixes missing PM entries in sysfs without CONFIG_PM_SLEEP
    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@rowland.harvard.edu]
    >> Sent: Monday, August 04, 2008 9:15 PM
    >> To: Rafael J. Wysocki
    >> Cc: Dasgupta, Romit; David Engraf; Greg KH; linux-usb@vger.kernel.org; linux-
    >> kernel@vger.kernel.org; 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);
    >> }
    >>
    >
    >



    \
     
     \ /
      Last update: 2008-08-05 15:05    [W:0.052 / U:31.888 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site