All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	Michael Krufky <mkrufky@linuxtv.org>,
	Chuck Ebbert <cebbert@redhat.com>,
	Domenico Andreoli <cavokz@gmail.com>, Willy Tarreau <w@1wt.eu>,
	Rodrigo Rubira Branco <rbranco@la.checkpoint.com>,
	Jake Edge <jake@lwn.net>, Eugene Teo <eteo@redhat.com>,
	torvalds@linux-foundation.org, akpm@linux-foundation.org,
	alan@lxorguk.ukuu.org.uk,
	Alexey Starikovskiy <astarikovskiy@suse.de>,
	Len Brown <len.brown@intel.com>,
	"Rafael J. Wysocki" <rjw@sisk.pl>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: [patch 44/46] ACPI: EC: restart failed command
Date: Sun, 16 Nov 2008 23:17:17 -0800	[thread overview]
Message-ID: <20081117071717.GS29522@kroah.com> (raw)
In-Reply-To: <20081117071333.GA29522@kroah.com>

[-- Attachment #1: acpi-ec-restart-failed-command.patch --]
[-- Type: text/plain, Size: 3283 bytes --]

2.6.27-stable review patch.  If anyone has any objections, please let us know.

------------------

From: Alexey Starikovskiy <astarikovskiy@suse.de>

commit a2f93aeadf97e870ff385030633a73e21146815d upstream.

Restart current transaction if we recieved unexpected GPEs instead
of needed ones.

http://bugzilla.kernel.org/show_bug.cgi?id=11896

Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: Len Brown <len.brown@intel.com>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/acpi/ec.c |   41 +++++++++++++++++++++++++++++------------
 1 file changed, 29 insertions(+), 12 deletions(-)

--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -100,6 +100,8 @@ struct transaction {
 	u8 *rdata;
 	unsigned short irq_count;
 	u8 command;
+	u8 wi;
+	u8 ri;
 	u8 wlen;
 	u8 rlen;
 	bool done;
@@ -185,26 +187,34 @@ static int ec_transaction_done(struct ac
 	return ret;
 }
 
+static void start_transaction(struct acpi_ec *ec)
+{
+	ec->curr->irq_count = ec->curr->wi = ec->curr->ri = 0;
+	ec->curr->done = false;
+	acpi_ec_write_cmd(ec, ec->curr->command);
+}
+
 static void gpe_transaction(struct acpi_ec *ec, u8 status)
 {
 	unsigned long flags;
 	spin_lock_irqsave(&ec->curr_lock, flags);
 	if (!ec->curr)
 		goto unlock;
-	if (ec->curr->wlen > 0) {
-		if ((status & ACPI_EC_FLAG_IBF) == 0) {
-			acpi_ec_write_data(ec, *(ec->curr->wdata++));
-			--ec->curr->wlen;
-		} else
+	if (ec->curr->wlen > ec->curr->wi) {
+		if ((status & ACPI_EC_FLAG_IBF) == 0)
+			acpi_ec_write_data(ec,
+				ec->curr->wdata[ec->curr->wi++]);
+		else
 			goto err;
-	} else if (ec->curr->rlen > 0) {
+	} else if (ec->curr->rlen > ec->curr->ri) {
 		if ((status & ACPI_EC_FLAG_OBF) == 1) {
-			*(ec->curr->rdata++) = acpi_ec_read_data(ec);
-			if (--ec->curr->rlen == 0)
+			ec->curr->rdata[ec->curr->ri++] = acpi_ec_read_data(ec);
+			if (ec->curr->rlen == ec->curr->ri)
 				ec->curr->done = true;
 		} else
 			goto err;
-	} else if (ec->curr->wlen == 0 && (status & ACPI_EC_FLAG_IBF) == 0)
+	} else if (ec->curr->wlen == ec->curr->wi &&
+		   (status & ACPI_EC_FLAG_IBF) == 0)
 		ec->curr->done = true;
 	goto unlock;
 err:
@@ -219,6 +229,15 @@ static int acpi_ec_wait(struct acpi_ec *
 	if (wait_event_timeout(ec->wait, ec_transaction_done(ec),
 			       msecs_to_jiffies(ACPI_EC_DELAY)))
 		return 0;
+	/* try restart command if we get any false interrupts */
+	if (ec->curr->irq_count &&
+	    (acpi_ec_read_status(ec) & ACPI_EC_FLAG_IBF) == 0) {
+		pr_debug(PREFIX "controller reset, restart transaction\n");
+		start_transaction(ec);
+		if (wait_event_timeout(ec->wait, ec_transaction_done(ec),
+					msecs_to_jiffies(ACPI_EC_DELAY)))
+			return 0;
+	}
 	/* missing GPEs, switch back to poll mode */
 	if (printk_ratelimit())
 		pr_info(PREFIX "missing confirmations, "
@@ -268,10 +287,8 @@ static int acpi_ec_transaction_unlocked(
 	/* start transaction */
 	spin_lock_irqsave(&ec->curr_lock, tmp);
 	/* following two actions should be kept atomic */
-	t->irq_count = 0;
-	t->done = false;
 	ec->curr = t;
-	acpi_ec_write_cmd(ec, ec->curr->command);
+	start_transaction(ec);
 	if (ec->curr->command == ACPI_EC_COMMAND_QUERY)
 		clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags);
 	spin_unlock_irqrestore(&ec->curr_lock, tmp);

-- 

  parent reply	other threads:[~2008-11-17  7:37 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081117070621.430169021@blue.kroah.org>
2008-11-17  7:13 ` [patch 00/46] 2.6.27.7-stable review Greg KH
2008-11-17  7:14   ` [patch 01/46] touch_mnt_namespace when the mount flags change Greg KH
2008-11-17  7:14   ` [patch 02/46] iwlagn: avoid sleep in softirq context Greg KH
2008-11-17  7:14   ` [patch 03/46] ath5k: fix suspend-related oops on rmmod Greg KH
2008-11-17  7:14   ` [patch 04/46] ath5k: Fix reset sequence for AR5212 in general and RF5111 in particular Greg KH
2008-11-17  7:14   ` [patch 05/46] bnx2x: Removing the PMF indication when unloading Greg KH
2008-11-17  7:14   ` [patch 06/46] bnx2x: PCI configuration bug on big-endian Greg KH
2008-11-17  7:14   ` [patch 07/46] bnx2x: Calling netif_carrier_off at the end of the probe Greg KH
2008-11-17  7:14   ` [patch 08/46] ARM: 5329/1: Feroceon: fix feroceon_l2_inv_range Greg KH
2008-11-17  7:14   ` [patch 09/46] Fix platform drivers that crash on suspend/resume Greg KH
2008-11-17  7:14   ` [patch 10/46] hostap: pad the skb->cb usage in lieu of a proper fix Greg KH
2008-11-17  7:14   ` [patch 11/46] ACPI: avoid empty file name in sysfs Greg KH
2008-11-17  7:14   ` [patch 12/46] ACPI: EC: make kernel messages more useful when GPE storm is detected Greg KH
2008-11-17  7:15   ` [patch 13/46] hugetlb: make unmap_ref_private multi-size-aware Greg KH
2008-11-17  7:15   ` [patch 14/46] rtl8187: Add Abocom USB ID Greg KH
2008-11-17  7:15   ` [patch 15/46] rtl8187 : support for Sitecom WL-168 0001 v4 Greg KH
2008-11-17  7:15   ` [patch 16/46] kbuild: Fixup deb-pkg target to generate separate firmware deb Greg KH
2008-11-17  7:15   ` [patch 17/46] block: fix nr_phys_segments miscalculation bug Greg KH
2008-11-17  7:15   ` [patch 18/46] powerpc/mpic: Fix regression caused by change of default IRQ affinity Greg KH
2008-11-17  7:15   ` [patch 19/46] Input: ALPS - add signature for DualPoint found in Dell Latitude E6500 Greg KH
2008-11-17  7:15   ` [patch 20/46] memory hotplug: fix page_zone() calculation in test_pages_isolated() Greg KH
2008-11-17  7:15   ` [patch 21/46] r8169: select MII in Kconfig Greg KH
2008-11-17  7:15   ` [patch 22/46] sony-laptop: ignore missing _DIS method on pic device Greg KH
2008-11-17  7:15   ` [patch 23/46] net: fix /proc/net/snmp as memory corruptor Greg KH
2008-11-17  7:15   ` [patch 24/46] Fix broken ownership of /proc/sys/ files Greg KH
2008-11-17 20:09     ` Theodore Tso
2008-11-17 21:35       ` [stable] " Greg KH
2008-11-17 22:25         ` Rafael J. Wysocki
2008-11-17 23:45           ` Peter Palfrader
2008-11-17  7:15   ` [patch 25/46] V4L/DVB (9624): CVE-2008-5033: fix OOPS on tvaudio when controlling bass/treble Greg KH
2008-11-17 13:31     ` Mauro Carvalho Chehab
2008-11-17  7:15   ` [patch 26/46] S390: cpu topology: fix locking Greg KH
2008-11-17  7:15   ` [patch 27/46] ACPI : Load device driver according to the status of acpi device Greg KH
2008-11-17  7:16   ` [patch 28/46] m68k: Fix off-by-one in m68k_setup_user_interrupt() Greg KH
2008-11-17  7:16   ` [patch 29/46] SCSI: qla2xxx: Return a FAILED status when abort mailbox-command fails Greg KH
2008-11-17  7:16   ` [patch 30/46] SCSI: qla2xxx: Do not honour max_vports from firmware for 2G ISPs and below Greg KH
2008-11-17  7:16   ` [patch 31/46] SCSI: qla2xxx: Correct Atmel flash-part handling Greg KH
2008-11-17  7:16   ` [patch 32/46] SCSI: dpt_i2o: fix transferred data length for scsi_set_resid() Greg KH
2008-11-17  7:16   ` [patch 33/46] dm raid1: flush workqueue before destruction Greg KH
2008-11-17  7:16   ` [patch 34/46] USB: remove optional bus bindings in isp1760, fixing runtime warning Greg KH
2008-11-17  7:16   ` [patch 35/46] USB: gadget: cdc-acm deadlock fix Greg KH
2008-11-17  7:16   ` [patch 36/46] USB: unusual_devs entry for Argosy USB mass-storage interface Greg KH
2008-11-17  7:16   ` [patch 37/46] USB: Fix PS3 USB shutdown problems Greg KH
2008-11-17  7:16   ` [patch 38/46] USB: cdc-acm.c: fix recursive lock in acm_start_wb error path Greg KH
2008-11-17  7:16   ` [patch 39/46] USB: EHCI: fix divide-by-zero bug Greg KH
2008-11-17  7:16   ` [patch 40/46] USB: EHCI: fix handling of dead controllers Greg KH
2008-11-17  7:17   ` [patch 41/46] USB: dont register endpoints for interfaces that are going away Greg KH
2008-11-17  7:17   ` [patch 42/46] ACPI: EC: revert msleep patch Greg KH
2008-11-17  7:17   ` [patch 43/46] ACPI: EC: wait for last write gpe Greg KH
2008-11-17  7:17   ` Greg KH [this message]
2008-11-17  7:17   ` [patch 45/46] ACPI: EC: lower interrupt storm treshold Greg KH
2008-11-17  7:17   ` [patch 46/46] ACPI: EC: Dont do transaction from GPE handler in poll mode Greg KH

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=20081117071717.GS29522@kroah.com \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=astarikovskiy@suse.de \
    --cc=cavokz@gmail.com \
    --cc=cebbert@redhat.com \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=eteo@redhat.com \
    --cc=jake@lwn.net \
    --cc=jmforbes@linuxtx.org \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mkrufky@linuxtv.org \
    --cc=rbranco@la.checkpoint.com \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=rjw@sisk.pl \
    --cc=stable@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    --cc=w@1wt.eu \
    --cc=zwane@arm.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.