diff options
| author | Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> | 2011-12-07 22:29:54 +0100 | 
|---|---|---|
| committer | Rafael J. Wysocki <rjw@sisk.pl> | 2011-12-08 23:22:29 +0100 | 
| commit | bcda53faf5814c0c6025a0bd47108adfcbe9f199 (patch) | |
| tree | a8768204a16b24436f33fac00c1bb4dcfb4fafd5 /kernel/power/hibernate.c | |
| parent | 9b6fc5dc879bc90f765db0e95eefcf123d0d06dd (diff) | |
| download | olio-linux-3.10-bcda53faf5814c0c6025a0bd47108adfcbe9f199.tar.xz olio-linux-3.10-bcda53faf5814c0c6025a0bd47108adfcbe9f199.zip  | |
PM / Sleep: Replace mutex_[un]lock(&pm_mutex) with [un]lock_system_sleep()
Using [un]lock_system_sleep() is safer than directly using mutex_[un]lock()
on 'pm_mutex', since the latter could lead to freezing failures. Hence convert
all the present users of mutex_[un]lock(&pm_mutex) to use these safe APIs
instead.
Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Reviewed-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'kernel/power/hibernate.c')
| -rw-r--r-- | kernel/power/hibernate.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 605149a6d21..6d6d2887033 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -69,14 +69,14 @@ void hibernation_set_ops(const struct platform_hibernation_ops *ops)  		WARN_ON(1);  		return;  	} -	mutex_lock(&pm_mutex); +	lock_system_sleep();  	hibernation_ops = ops;  	if (ops)  		hibernation_mode = HIBERNATION_PLATFORM;  	else if (hibernation_mode == HIBERNATION_PLATFORM)  		hibernation_mode = HIBERNATION_SHUTDOWN; -	mutex_unlock(&pm_mutex); +	unlock_system_sleep();  }  static bool entering_platform_hibernation; @@ -597,7 +597,7 @@ int hibernate(void)  {  	int error; -	mutex_lock(&pm_mutex); +	lock_system_sleep();  	/* The snapshot device should not be opened while we're running */  	if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {  		error = -EBUSY; @@ -665,7 +665,7 @@ int hibernate(void)  	pm_restore_console();  	atomic_inc(&snapshot_device_available);   Unlock: -	mutex_unlock(&pm_mutex); +	unlock_system_sleep();  	return error;  } @@ -893,7 +893,7 @@ static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr,  	p = memchr(buf, '\n', n);  	len = p ? p - buf : n; -	mutex_lock(&pm_mutex); +	lock_system_sleep();  	for (i = HIBERNATION_FIRST; i <= HIBERNATION_MAX; i++) {  		if (len == strlen(hibernation_modes[i])  		    && !strncmp(buf, hibernation_modes[i], len)) { @@ -919,7 +919,7 @@ static ssize_t disk_store(struct kobject *kobj, struct kobj_attribute *attr,  	if (!error)  		pr_debug("PM: Hibernation mode set to '%s'\n",  			 hibernation_modes[mode]); -	mutex_unlock(&pm_mutex); +	unlock_system_sleep();  	return error ? error : n;  } @@ -946,9 +946,9 @@ static ssize_t resume_store(struct kobject *kobj, struct kobj_attribute *attr,  	if (maj != MAJOR(res) || min != MINOR(res))  		goto out; -	mutex_lock(&pm_mutex); +	lock_system_sleep();  	swsusp_resume_device = res; -	mutex_unlock(&pm_mutex); +	unlock_system_sleep();  	printk(KERN_INFO "PM: Starting manual resume from disk\n");  	noresume = 0;  	software_resume();  |