[kernel] r15428 - in dists/sid/linux-2.6/debian: . patches/bugfix/x86 patches/series
Ben Hutchings
benh at alioth.debian.org
Sat Mar 20 18:16:10 UTC 2010
Author: benh
Date: Sat Mar 20 18:16:01 2010
New Revision: 15428
Log:
eeepc-laptop: Disable CPU speed control on 701 and 702 since it can cause the system to hang (Closes: #559578)
Added:
dists/sid/linux-2.6/debian/patches/bugfix/x86/eeepc-laptop-disable-cpu-speed-control-on-EeePC-701.patch
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/patches/series/11
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog Sat Mar 20 15:29:20 2010 (r15427)
+++ dists/sid/linux-2.6/debian/changelog Sat Mar 20 18:16:01 2010 (r15428)
@@ -8,6 +8,8 @@
* linux-base: Handle duplicates in /etc/udev/rules.d/70-persistent-cd.rules
(Closes: #574630)
* iwlwifi: Fix repeated warnings about tfds_in_queue (Closes: #574526)
+ * eeepc-laptop: Disable CPU speed control on 701 and 702 since it can
+ cause the system to hang (Closes: #559578)
[ maximilian attems]
* [alpha, hppa] Disable oprofile as tracing code is unsupported here.
Added: dists/sid/linux-2.6/debian/patches/bugfix/x86/eeepc-laptop-disable-cpu-speed-control-on-EeePC-701.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/x86/eeepc-laptop-disable-cpu-speed-control-on-EeePC-701.patch Sat Mar 20 18:16:01 2010 (r15428)
@@ -0,0 +1,175 @@
+From: Alan Jenkins <alan-jenkins at tuffmail.co.uk>
+Date: Wed, 6 Jan 2010 22:07:37 +0100
+Subject: [PATCH] eeepc-laptop: disable cpu speed control on EeePC 701
+
+The EeePC 4G ("701") implements CFVS, but it is not supported by the
+pre-installed OS, and the original option to change it in the BIOS
+setup screen was removed in later versions. Judging by the lack of
+"Super Hybrid Engine" on Asus product pages, this applies to all "701"
+models (4G/4G Surf/2G Surf).
+
+So Asus made a deliberate decision not to support it on this model.
+We have several reports that using it can cause the system to hang [1].
+That said, it does not happen all the time. Some users do not
+experience it at all (and apparently wish to continue "right-clocking").
+
+Check for the EeePC 701 using DMI. If met, then disable writes to the
+"cpufv" sysfs attribute and log an explanatory message.
+
+Add a "cpufv_disabled" attribute which allow users to override this
+policy. Writing to this attribute will log a second message.
+
+The sysfs attribute is more useful than a module option, because it
+makes it easier for userspace scripts to provide consistent behaviour
+(according to user configuration), regardless of whether the kernel
+includes this change.
+
+[1] <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559578>
+
+Signed-off-by: Alan Jenkins <alan-jenkins at tuffmail.co.uk>
+Signed-off-by: Corentin Chary <corentincj at iksaif.net>
+Signed-off-by: Len Brown <len.brown at intel.com>
+[bwh: Backported to 2.6.32]
+
+--- a/drivers/platform/x86/eeepc-laptop.c
++++ b/drivers/platform/x86/eeepc-laptop.c
+@@ -35,6 +35,7 @@
+ #include <linux/rfkill.h>
+ #include <linux/pci.h>
+ #include <linux/pci_hotplug.h>
++#include <linux/dmi.h>
+
+ #define EEEPC_LAPTOP_VERSION "0.1"
+ #define EEEPC_LAPTOP_NAME "Eee PC Hotkey Driver"
+@@ -159,6 +160,7 @@ struct eeepc_laptop {
+ acpi_handle handle; /* the handle of the acpi device */
+ u32 cm_supported; /* the control methods supported
+ by this BIOS */
++ bool cpufv_disabled;
+ uint init_flag; /* Init flags */
+ u16 event_count[128]; /* count for each event */
+
+@@ -378,6 +380,8 @@ static ssize_t store_cpufv(struct device *dev,
+ struct eeepc_cpufv c;
+ int rv, value;
+
++ if (ehotk->cpufv_disabled)
++ return -EPERM;
+ if (get_cpufv(&c))
+ return -ENODEV;
+ rv = parse_arg(buf, count, &value);
+@@ -389,6 +393,38 @@ static ssize_t store_cpufv(struct device *dev,
+ return rv;
+ }
+
++static ssize_t show_cpufv_disabled(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ return sprintf(buf, "%d\n", ehotk->cpufv_disabled);
++}
++
++static ssize_t store_cpufv_disabled(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ int rv, value;
++
++ rv = parse_arg(buf, count, &value);
++ if (rv < 0)
++ return rv;
++
++ switch (value) {
++ case 0:
++ if (ehotk->cpufv_disabled)
++ pr_warning("cpufv enabled (not officially supported "
++ "on this model)\n");
++ ehotk->cpufv_disabled = false;
++ return rv;
++ case 1:
++ return -EPERM;
++ default:
++ return -EINVAL;
++ }
++}
++
++
+ static struct device_attribute dev_attr_cpufv = {
+ .attr = {
+ .name = "cpufv",
+@@ -404,12 +443,22 @@ static struct device_attribute dev_attr_available_cpufv = {
+ .show = show_available_cpufv
+ };
+
++static struct device_attribute dev_attr_cpufv_disabled = {
++ .attr = {
++ .name = "cpufv_disabled",
++ .mode = 0644 },
++ .show = show_cpufv_disabled,
++ .store = store_cpufv_disabled
++};
++
++
+ static struct attribute *platform_attributes[] = {
+ &dev_attr_camera.attr,
+ &dev_attr_cardr.attr,
+ &dev_attr_disp.attr,
+ &dev_attr_cpufv.attr,
+ &dev_attr_available_cpufv.attr,
++ &dev_attr_cpufv_disabled.attr,
+ NULL
+ };
+
+@@ -1261,6 +1310,42 @@ static void eeepc_acpi_notify(struct acpi_device *device, u32 event)
+ }
+ }
+
++static void eeepc_dmi_check(void)
++{
++ const char *model;
++
++ /*
++ * Blacklist for setting cpufv (cpu speed).
++ *
++ * EeePC 4G ("701") implements CFVS, but it is not supported
++ * by the pre-installed OS, and the original option to change it
++ * in the BIOS setup screen was removed in later versions.
++ *
++ * Judging by the lack of "Super Hybrid Engine" on Asus product pages,
++ * this applies to all "701" models (4G/4G Surf/2G Surf).
++ *
++ * So Asus made a deliberate decision not to support it on this model.
++ * We have several reports that using it can cause the system to hang
++ *
++ * The hang has also been reported on a "702" (Model name "8G"?).
++ *
++ * We avoid dmi_check_system() / dmi_match(), because they use
++ * substring matching. We don't want to affect the "701SD"
++ * and "701SDX" models, because they do support S.H.E.
++ */
++
++ model = dmi_get_system_info(DMI_PRODUCT_NAME);
++ if (!model)
++ return;
++
++ if (strcmp(model, "701") == 0 || strcmp(model, "702") == 0) {
++ ehotk->cpufv_disabled = true;
++ pr_info("model %s does not officially support setting cpu "
++ "speed\n", model);
++ pr_info("cpufv disabled to avoid instability\n");
++ }
++}
++
+ static void cmsg_quirk(int cm, const char *name)
+ {
+ int dummy;
+@@ -1342,6 +1427,8 @@ static int __devinit eeepc_acpi_add(struct acpi_device *device)
+ device->driver_data = ehokt;
+ ehotk->device = device;
+
++ eeepc_dmi_check();
++
+ result = eeepc_hotk_check();
+ if (result)
+ goto fail_platform_driver;
+
Modified: dists/sid/linux-2.6/debian/patches/series/11
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/11 Sat Mar 20 15:29:20 2010 (r15427)
+++ dists/sid/linux-2.6/debian/patches/series/11 Sat Mar 20 18:16:01 2010 (r15428)
@@ -1,3 +1,4 @@
+ bugfix/all/tracing-do-not-disable-interrupts-for-trace_clock_lo.patch
+ bugfix/sparc/sparc-Provide-io-read-write-16-32-be.patch
+ bugfix/all/iwlwifi-fix-nfreed.patch
++ bugfix/x86/eeepc-laptop-disable-cpu-speed-control-on-EeePC-701.patch
More information about the Kernel-svn-changes
mailing list