diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-24 13:30:07 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-24 13:30:07 -0800 |
commit | ad54876ba87edfccf23d106018d2bf9ca283b594 (patch) | |
tree | 3581448865a5bab67b487cfac1edd2b6a4f6fb50 /driver | |
parent | 5c6cad6dac229ea0c07f924c7d5826ec10a3b303 (diff) | |
download | patches-ad54876ba87edfccf23d106018d2bf9ca283b594.tar.gz |
new patches
Diffstat (limited to 'driver')
-rw-r--r-- | driver/fix-userspace-interface-breakage-in-power-state.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/driver/fix-userspace-interface-breakage-in-power-state.patch b/driver/fix-userspace-interface-breakage-in-power-state.patch new file mode 100644 index 0000000000000..174c2c01dfbb9 --- /dev/null +++ b/driver/fix-userspace-interface-breakage-in-power-state.patch @@ -0,0 +1,60 @@ +From pavel@ucw.cz Sun Jan 22 13:39:07 2006 +Date: Sun, 22 Jan 2006 22:38:52 +0100 +From: Pavel Machek <pavel@suse.cz> +To: Andrew Morton <akpm@osdl.org> +Cc: <greg@kroah.com>, <mochel@digitalimplant.org>, <mjg59@srcf.ucam.org>, <benh@kernel.crashing.org> +Subject: Fix Userspace interface breakage in power/state +Message-ID: <20060122213852.GG2043@elf.ucw.cz> +Content-Disposition: inline + + +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> + +--- + drivers/base/power/sysfs.c | 24 ++++++++++++++++-------- + 1 file changed, 16 insertions(+), 8 deletions(-) + +--- gregkh-2.6.orig/drivers/base/power/sysfs.c ++++ gregkh-2.6/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; + } + |