[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