Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757820AbYHDOpi (ORCPT ); Mon, 4 Aug 2008 10:45:38 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1756796AbYHDOpR (ORCPT ); Mon, 4 Aug 2008 10:45:17 -0400 Received: from iolanthe.rowland.org ([192.131.102.54]:35195 "HELO iolanthe.rowland.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1756659AbYHDOpQ (ORCPT ); Mon, 4 Aug 2008 10:45:16 -0400 Date: Mon, 4 Aug 2008 10:45:15 -0400 (EDT) From: Alan Stern X-X-Sender: stern@iolanthe.rowland.org To: "Dasgupta, Romit" cc: "Rafael J. Wysocki" , 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 In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3276 Lines: 119 On Sun, 3 Aug 2008, Dasgupta, Romit wrote: > Alan, > Here is a patch for you. Tested with > > 1) CONFIG_SUSPEND, CONFIG_HIBERNATION i.e. with CONFIG_PM_SLEEP > 2) without CONFIG_PM_SLEEP but with CONFIG_PM > 3) without CONFIG_PM I'd prefer to use the patch below. Although it's a little longer, the end result is slightly less complicated. Also, it fixes two problems: dpm_sysfs_add/remove should be called whenever CONFIG_PM is defined, regardless of CONFIG_PM_SLEEP. dev->power.status should be initialized to DPM_ON even if CONFIG_PM isn't defined. Can you make sure it compiles properly under all three configurations? Rafael, any objections? 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 /* 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,6 +899,9 @@ int device_add(struct device *dev) error = bus_add_device(dev); if (error) goto BusError; + error = dpm_sysfs_add(dev); + if (error) + goto DPMError; error = device_pm_add(dev); if (error) goto PMError; @@ -922,6 +926,8 @@ int device_add(struct device *dev) put_device(dev); return error; PMError: + dpm_sysfs_remove(dev); + DPMError: bus_remove_device(dev); BusError: if (dev->bus) @@ -1008,6 +1014,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 @@ -69,7 +69,7 @@ void device_pm_unlock(void) */ int device_pm_add(struct device *dev) { - int error; + int error = 0; pr_debug("PM: Adding info for %s:%s\n", dev->bus ? dev->bus->name : "No Bus", @@ -89,11 +89,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 +107,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); } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/