diff options
| author | Rafael J. Wysocki <rjw@sisk.pl> | 2012-06-21 00:19:33 +0200 | 
|---|---|---|
| committer | Rafael J. Wysocki <rjw@sisk.pl> | 2012-07-01 13:31:23 +0200 | 
| commit | b2df1d4f8b95d9d1e3f064cef02fc5c5116b05cf (patch) | |
| tree | 6e891ad6ad748ea737ab5774983f90d9be720446 | |
| parent | 4b7760ba0dd3319f66886ab2335a0fbecdbc808a (diff) | |
| download | olio-linux-3.10-b2df1d4f8b95d9d1e3f064cef02fc5c5116b05cf.tar.xz olio-linux-3.10-b2df1d4f8b95d9d1e3f064cef02fc5c5116b05cf.zip  | |
PM / Sleep: Separate printing suspend times from initcall_debug
Change the behavior of the newly introduced
/sys/power/pm_print_times attribute so that its initial value
depends on initcall_debug, but setting it to 0 will cause device
suspend/resume times not to be printed, even if initcall_debug has
been set.  This way, the people who use initcall_debug for reasons
other than PM debugging will be able to switch the suspend/resume
times printing off, if need be.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Reviewed-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
| -rw-r--r-- | drivers/base/power/main.c | 4 | ||||
| -rw-r--r-- | drivers/base/power/power.h | 11 | ||||
| -rw-r--r-- | include/linux/suspend.h | 6 | ||||
| -rw-r--r-- | kernel/power/Kconfig | 4 | ||||
| -rw-r--r-- | kernel/power/main.c | 76 | 
5 files changed, 54 insertions, 47 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 6e4db96958d..df5f41d2ec9 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -166,7 +166,7 @@ static ktime_t initcall_debug_start(struct device *dev)  {  	ktime_t calltime = ktime_set(0, 0); -	if (pm_print_times) { +	if (pm_print_times_enabled) {  		pr_info("calling  %s+ @ %i, parent: %s\n",  			dev_name(dev), task_pid_nr(current),  			dev->parent ? dev_name(dev->parent) : "none"); @@ -181,7 +181,7 @@ static void initcall_debug_report(struct device *dev, ktime_t calltime,  {  	ktime_t delta, rettime; -	if (pm_print_times) { +	if (pm_print_times_enabled) {  		rettime = ktime_get();  		delta = ktime_sub(rettime, calltime);  		pr_info("call %s+ returned %d after %Ld usecs\n", dev_name(dev), diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h index 12c77b7ff8e..eeb4bff9505 100644 --- a/drivers/base/power/power.h +++ b/drivers/base/power/power.h @@ -85,14 +85,3 @@ static inline int pm_qos_sysfs_add(struct device *dev) { return 0; }  static inline void pm_qos_sysfs_remove(struct device *dev) {}  #endif - -#ifdef CONFIG_PM_DEBUG - -extern int pm_print_times_enabled; -#define pm_print_times (initcall_debug || pm_print_times_enabled) - -#else /* CONFIG_PM_DEBUG */ - -#define pm_print_times initcall_debug - -#endif /* CONFIG_PM_DEBUG */ diff --git a/include/linux/suspend.h b/include/linux/suspend.h index cd83059fb59..0c808d7fa57 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -408,6 +408,12 @@ static inline void unlock_system_sleep(void) {}  #endif /* !CONFIG_PM_SLEEP */ +#ifdef CONFIG_PM_SLEEP_DEBUG +extern bool pm_print_times_enabled; +#else +#define pm_print_times_enabled	(false) +#endif +  #ifdef CONFIG_PM_AUTOSLEEP  /* kernel/power/autosleep.c */ diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index 8f9b4eb974e..a70518c9d82 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig @@ -175,7 +175,7 @@ config PM_TEST_SUSPEND  	You probably want to have your system's RTC driver statically  	linked, ensuring that it's available when this test runs. -config CAN_PM_TRACE +config PM_SLEEP_DEBUG  	def_bool y  	depends on PM_DEBUG && PM_SLEEP @@ -196,7 +196,7 @@ config PM_TRACE  config PM_TRACE_RTC  	bool "Suspend/resume event tracing" -	depends on CAN_PM_TRACE +	depends on PM_SLEEP_DEBUG  	depends on X86  	select PM_TRACE  	---help--- diff --git a/kernel/power/main.c b/kernel/power/main.c index 7beb3fb3670..f458238109c 100644 --- a/kernel/power/main.c +++ b/kernel/power/main.c @@ -132,38 +132,6 @@ static ssize_t pm_test_store(struct kobject *kobj, struct kobj_attribute *attr,  }  power_attr(pm_test); - -/* - * pm_print_times: print time taken by devices to suspend and resume. - * - * show() returns whether printing of suspend and resume times is enabled. - * store() accepts 0 or 1.  0 disables printing and 1 enables it. - */ -int pm_print_times_enabled; - -static ssize_t pm_print_times_show(struct kobject *kobj, -				   struct kobj_attribute *attr, char *buf) -{ -	return sprintf(buf, "%d\n", pm_print_times_enabled); -} - -static ssize_t pm_print_times_store(struct kobject *kobj, -				    struct kobj_attribute *attr, -				    const char *buf, size_t n) -{ -	unsigned long val; - -	if (kstrtoul(buf, 10, &val)) -		return -EINVAL; - -	if (val > 1) -		return -EINVAL; - -	pm_print_times_enabled = val; -	return n; -} - -power_attr(pm_print_times);  #endif /* CONFIG_PM_DEBUG */  #ifdef CONFIG_DEBUG_FS @@ -267,6 +235,47 @@ late_initcall(pm_debugfs_init);  #endif /* CONFIG_PM_SLEEP */ +#ifdef CONFIG_PM_SLEEP_DEBUG +/* + * pm_print_times: print time taken by devices to suspend and resume. + * + * show() returns whether printing of suspend and resume times is enabled. + * store() accepts 0 or 1.  0 disables printing and 1 enables it. + */ +bool pm_print_times_enabled; + +static ssize_t pm_print_times_show(struct kobject *kobj, +				   struct kobj_attribute *attr, char *buf) +{ +	return sprintf(buf, "%d\n", pm_print_times_enabled); +} + +static ssize_t pm_print_times_store(struct kobject *kobj, +				    struct kobj_attribute *attr, +				    const char *buf, size_t n) +{ +	unsigned long val; + +	if (kstrtoul(buf, 10, &val)) +		return -EINVAL; + +	if (val > 1) +		return -EINVAL; + +	pm_print_times_enabled = !!val; +	return n; +} + +power_attr(pm_print_times); + +static inline void pm_print_times_init(void) +{ +	pm_print_times_enabled = !!initcall_debug; +} +#else /* !CONFIG_PP_SLEEP_DEBUG */ +static inline void pm_print_times_init(void) {} +#endif /* CONFIG_PM_SLEEP_DEBUG */ +  struct kobject *power_kobj;  /** @@ -562,6 +571,8 @@ static struct attribute * g[] = {  #endif  #ifdef CONFIG_PM_DEBUG  	&pm_test_attr.attr, +#endif +#ifdef CONFIG_PM_SLEEP_DEBUG  	&pm_print_times_attr.attr,  #endif  #endif @@ -599,6 +610,7 @@ static int __init pm_init(void)  	error = sysfs_create_group(power_kobj, &attr_group);  	if (error)  		return error; +	pm_print_times_init();  	return pm_autosleep_init();  }  |