mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Len Brown <lenb@kernel.org>
To: linux-acpi@vger.kernel.org, linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Feng Tang <feng.tang@intel.com>,
	Len Brown <len.brown@intel.com>,
	stable@vger.kernel.org
Subject: [PATCH 26/30] ACPI: EC: Make the GPE storm threshold a module parameter
Date: Tue,  9 Oct 2012 01:54:16 -0400	[thread overview]
Message-ID: <a520d52e99b14ba7db135e916348f12f2a6e09be.1349761836.git.len.brown@intel.com> (raw)
In-Reply-To: <1349762060-25334-1-git-send-email-lenb@kernel.org>
In-Reply-To: <e3f25e6e5836c4790fbe395ff42e241f372d859d.1349761836.git.len.brown@intel.com>

From: Feng Tang <feng.tang@intel.com>

The Linux EC driver includes a mechanism to detect GPE storms,
and switch from interrupt-mode to polling mode.  However, polling
mode sometimes doesn't work, so the workaround is problematic.
Also, different systems seem to need the threshold for detecting
the GPE storm at different levels.

ACPI_EC_STORM_THRESHOLD was initially 20 when it's created, and
was changed to 8 in 2.6.28 commit 06cf7d3c7 "ACPI: EC: lower interrupt storm
threshold" to fix kernel bug 11892 by forcing the laptop in that bug to
work in polling mode. However in bug 45151, it works fine in interrupt
mode if we lift the threshold back to 20.

This patch makes the threshold a module parameter so that user has a
flexible option to debug/workaround this issue.

The default is unchanged.

This is also a preparation patch to fix specific systems:
	https://bugzilla.kernel.org/show_bug.cgi?id=45151

Signed-off-by: Feng Tang <feng.tang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
cc: stable@vger.kernel.org
---
 drivers/acpi/ec.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 7edaccc..615264c 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -71,9 +71,6 @@ enum ec_command {
 #define ACPI_EC_UDELAY_GLK	1000	/* Wait 1ms max. to get global lock */
 #define ACPI_EC_MSI_UDELAY	550	/* Wait 550us for MSI EC */
 
-#define ACPI_EC_STORM_THRESHOLD 8	/* number of false interrupts
-					   per one transaction */
-
 enum {
 	EC_FLAGS_QUERY_PENDING,		/* Query is pending */
 	EC_FLAGS_GPE_STORM,		/* GPE storm detected */
@@ -87,6 +84,15 @@ static unsigned int ec_delay __read_mostly = ACPI_EC_DELAY;
 module_param(ec_delay, uint, 0644);
 MODULE_PARM_DESC(ec_delay, "Timeout(ms) waited until an EC command completes");
 
+/*
+ * If the number of false interrupts per one transaction exceeds
+ * this threshold, will think there is a GPE storm happened and
+ * will disable the GPE for normal transaction.
+ */
+static unsigned int ec_storm_threshold  __read_mostly = 8;
+module_param(ec_storm_threshold, uint, 0644);
+MODULE_PARM_DESC(ec_storm_threshold, "Maxim false GPE numbers not considered as GPE storm");
+
 /* If we find an EC via the ECDT, we need to keep a ptr to its context */
 /* External interfaces use first EC only, so remember */
 typedef int (*acpi_ec_query_func) (void *data);
@@ -319,7 +325,7 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t)
 		msleep(1);
 		/* It is safe to enable the GPE outside of the transaction. */
 		acpi_enable_gpe(NULL, ec->gpe);
-	} else if (t->irq_count > ACPI_EC_STORM_THRESHOLD) {
+	} else if (t->irq_count > ec_storm_threshold) {
 		pr_info(PREFIX "GPE storm detected, "
 			"transactions will use polling mode\n");
 		set_bit(EC_FLAGS_GPE_STORM, &ec->flags);
-- 
1.8.0.rc1


  parent reply	other threads:[~2012-10-09  6:05 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-09  5:53 ACPI & Thermal patches for Linux-3.7-merge Len Brown
2012-10-09  5:53 ` [PATCH 01/30] Thermal: Introduce multiple cooling states support Len Brown
2012-10-09  5:53   ` [PATCH 02/30] Thermal: Introduce cooling states range support Len Brown
2012-10-09  5:53   ` [PATCH 03/30] Thermal: set upper and lower limits Len Brown
2012-10-09  5:53   ` [PATCH 04/30] Thermal: Introduce .get_trend() callback Len Brown
2012-10-09  5:53   ` [PATCH 05/30] Thermal: Remove tc1/tc2 in generic thermal layer Len Brown
2012-10-09  5:53   ` [PATCH 06/30] Thermal: Introduce thermal_zone_trip_update() Len Brown
2012-10-09  5:53   ` [PATCH 07/30] Thermal: rename structure thermal_cooling_device_instance to thermal_instance Len Brown
2012-10-09  5:53   ` [PATCH 08/30] Thermal: Rename thermal_zone_device.cooling_devices Len Brown
2012-10-09  5:53   ` [PATCH 09/30] Thermal: Rename thermal_instance.node to thermal_instance.tz_node Len Brown
2012-10-09  5:54   ` [PATCH 10/30] Thermal: List thermal_instance in thermal_cooling_device Len Brown
2012-10-09  5:54   ` [PATCH 11/30] Thermal: Introduce simple arbitrator for setting device cooling state Len Brown
2012-10-09  5:54   ` [PATCH 12/30] Thermal: Unify the code for both active and passive cooling Len Brown
2012-10-09  5:54   ` [PATCH 13/30] Thermal: Introduce locking for cdev.thermal_instances list Len Brown
2012-10-09  5:54   ` [PATCH 14/30] thermal: fix potential out-of-bounds memory access Len Brown
2012-10-09  5:54   ` [PATCH 15/30] thermal: add Renesas R-Car thermal sensor support Len Brown
2012-10-09  5:54   ` [PATCH 16/30] thermal: Fix potential NULL pointer accesses Len Brown
2012-10-09  5:54   ` [PATCH 17/30] Fix a build error Len Brown
2012-10-09  5:54   ` [PATCH 18/30] thermal: add generic cpufreq cooling implementation Len Brown
2012-10-09  5:54   ` [PATCH 19/30] hwmon: exynos4: move thermal sensor driver to driver/thermal directory Len Brown
2012-10-09  5:54   ` [PATCH 20/30] thermal: exynos5: add exynos5250 thermal sensor driver support Len Brown
2012-10-09  5:54   ` [PATCH 21/30] thermal: exynos: register the tmu sensor with the kernel thermal layer Len Brown
2012-10-09  5:54   ` [PATCH 22/30] ARM: exynos: add thermal sensor driver platform data support Len Brown
2012-10-09  5:54   ` [PATCH 23/30] thermal: exynos: Use devm_* functions Len Brown
2012-10-09  5:54   ` [PATCH 24/30] Thermal: Fix bug on cpu_cooling, cooling device's id conflict problem Len Brown
2012-10-09  5:54   ` [PATCH 25/30] thermal: Exynos: Fix NULL pointer dereference in exynos_unregister_thermal() Len Brown
2012-10-09  5:54   ` Len Brown [this message]
2012-10-09  5:54   ` [PATCH 27/30] ACPI: EC: Add a quirk for CLEVO M720T/M730T laptop Len Brown
2012-10-09  6:16     ` Jonathan Nieder
2012-10-09  6:22       ` Feng Tang
2012-10-09  6:59         ` Jonathan Nieder
2012-10-09  7:19           ` Feng Tang
2012-10-09  5:54   ` [PATCH 28/30] cpuidle / ACPI: fix potential NULL pointer dereference Len Brown
2012-10-09  5:54   ` [PATCH 29/30] ACPI idle, CPU hotplug: Fix NULL pointer dereference during hotplug Len Brown
2012-10-09  5:54   ` [PATCH 30/30] tools/power/acpi/acpidump: remove duplicated include from acpidump.c Len Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a520d52e99b14ba7db135e916348f12f2a6e09be.1349761836.git.len.brown@intel.com \
    --to=lenb@kernel.org \
    --cc=feng.tang@intel.com \
    --cc=len.brown@intel.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®