]>
Commit | Line | Data |
---|---|---|
01803d42 GKH |
1 | From 286e5b97eb22baab9d9a41ca76c6b933a484252c Mon Sep 17 00:00:00 2001 |
2 | From: Paul Fox <pgf@laptop.org> | |
3 | Date: Fri, 1 Oct 2010 18:17:19 +0100 | |
4 | Subject: x86, olpc: Don't retry EC commands forever | |
5 | ||
6 | From: Paul Fox <pgf@laptop.org> | |
7 | ||
8 | commit 286e5b97eb22baab9d9a41ca76c6b933a484252c upstream. | |
9 | ||
10 | Avoids a potential infinite loop. | |
11 | ||
12 | It was observed once, during an EC hacking/debugging | |
13 | session - not in regular operation. | |
14 | ||
15 | Signed-off-by: Daniel Drake <dsd@laptop.org> | |
16 | Cc: dilinger@queued.net | |
17 | Signed-off-by: Ingo Molnar <mingo@elte.hu> | |
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
19 | ||
20 | --- | |
21 | arch/x86/kernel/olpc.c | 5 ++++- | |
22 | 1 file changed, 4 insertions(+), 1 deletion(-) | |
23 | ||
24 | --- a/arch/x86/kernel/olpc.c | |
25 | +++ b/arch/x86/kernel/olpc.c | |
26 | @@ -117,6 +117,7 @@ int olpc_ec_cmd(unsigned char cmd, unsig | |
27 | unsigned long flags; | |
28 | int ret = -EIO; | |
29 | int i; | |
30 | + int restarts = 0; | |
31 | ||
32 | spin_lock_irqsave(&ec_lock, flags); | |
33 | ||
34 | @@ -173,7 +174,9 @@ restart: | |
35 | if (wait_on_obf(0x6c, 1)) { | |
36 | printk(KERN_ERR "olpc-ec: timeout waiting for" | |
37 | " EC to provide data!\n"); | |
38 | - goto restart; | |
39 | + if (restarts++ < 10) | |
40 | + goto restart; | |
41 | + goto err; | |
42 | } | |
43 | outbuf[i] = inb(0x68); | |
44 | printk(KERN_DEBUG "olpc-ec: received 0x%x\n", |