aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-01-24 13:30:07 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2006-01-24 13:30:07 -0800
commitad54876ba87edfccf23d106018d2bf9ca283b594 (patch)
tree3581448865a5bab67b487cfac1edd2b6a4f6fb50 /driver
parent5c6cad6dac229ea0c07f924c7d5826ec10a3b303 (diff)
downloadpatches-ad54876ba87edfccf23d106018d2bf9ca283b594.tar.gz
new patches
Diffstat (limited to 'driver')
-rw-r--r--driver/fix-userspace-interface-breakage-in-power-state.patch60
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 00000000000000..174c2c01dfbb95
--- /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;
+ }
+