diff options
| author | Pavel Machek <pavel@suse.cz> | 2006-01-22 22:38:52 +0100 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-02-06 12:17:17 -0800 | 
| commit | 022f7b07bf2b384ece7fbd7edb90e54cd78db252 (patch) | |
| tree | 7eae52ca103253babb194b8bae92c15340d82c0b | |
| parent | 68f5f996347dc2724a0dd511683643a2b6912380 (diff) | |
| download | olio-linux-3.10-022f7b07bf2b384ece7fbd7edb90e54cd78db252.tar.xz olio-linux-3.10-022f7b07bf2b384ece7fbd7edb90e54cd78db252.zip  | |
[PATCH] Fix Userspace interface breakage in power/state
Prevent passing invalid values down to the drivers.
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
| -rw-r--r-- | drivers/base/power/sysfs.c | 24 | 
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c index f3a0c562bcb..40d7242a07c 100644 --- a/drivers/base/power/sysfs.c +++ b/drivers/base/power/sysfs.c @@ -27,22 +27,30 @@  static ssize_t state_show(struct device * dev, struct device_attribute *attr, char * buf)  { -	return sprintf(buf, "%u\n", dev->power.power_state.event); +	if (dev->power.power_state.event) +		return sprintf(buf, "2\n"); +	else +		return sprintf(buf, "0\n");  }  static ssize_t state_store(struct device * dev, struct device_attribute *attr, const char * buf, size_t n)  {  	pm_message_t state; -	char * rest; -	int error = 0; +	int error = -EINVAL; -	state.event = simple_strtoul(buf, &rest, 10); -	if (*rest) -		return -EINVAL; -	if (state.event) +	state.event = PM_EVENT_SUSPEND; +	/* Older apps expected to write "3" here - confused with PCI D3 */ +	if ((n == 1) && !strcmp(buf, "3"))  		error = dpm_runtime_suspend(dev, state); -	else + +	if ((n == 1) && !strcmp(buf, "2")) +		error = dpm_runtime_suspend(dev, state); + +	if ((n == 1) && !strcmp(buf, "0")) {  		dpm_runtime_resume(dev); +		error = 0; +	} +  	return error ? error : n;  }  |