odhcp6c: filter similar RAs spammed by some ISPs
[openwrt.git] / target / linux / avr32 / patches-3.10 / 100-avr32-balance-cpu_idle_poll_ctrl-calls.patch
1 From 1b2bdd19742d4a336a4865d9b352c7a0ca7028ee Mon Sep 17 00:00:00 2001
2 From: Gabor Juhos <juhosg@openwrt.org>
3 Date: Wed, 25 Sep 2013 10:00:10 +0200
4 Subject: [PATCH] avr32: balance cpu_idle_poll_ctrl calls
5
6 Since commit 01426478df3a8791ff5c8b6b82d409e699cfaf38
7 (avr32: Use generic idle loop) the kernel throws the
8 following warning on avr32:
9
10   WARNING: at 900322e4 [verbose debug info unavailable]
11   Modules linked in:
12   CPU: 0 PID: 0 Comm: swapper Not tainted 3.12.0-rc2 #117
13   task: 901c3ecc ti: 901c0000 task.ti: 901c0000
14   PC is at cpu_idle_poll_ctrl+0x1c/0x38
15   LR is at comparator_mode+0x3e/0x40
16   pc : [<900322e4>]    lr : [<90014882>]    Not tainted
17   sp : 901c1f74  r12: 00000000  r11: 901c74a0
18   r10: 901d2510  r9 : 00000001  r8 : 901db4de
19   r7 : 901c74a0  r6 : 00000001  r5 : 00410020  r4 : 901db574
20   r3 : 00410024  r2 : 90206fe0  r1 : 00000000  r0 : 007f0000
21   Flags: qvnzc
22   Mode bits: hjmde....G
23   CPU Mode: Supervisor
24   Call trace:
25    [<90039ede>] clockevents_set_mode+0x16/0x2e
26    [<90039f00>] clockevents_shutdown+0xa/0x1e
27    [<9003a078>] clockevents_exchange_device+0x58/0x70
28    [<9003a78c>] tick_check_new_device+0x38/0x54
29    [<9003a1a2>] clockevents_register_device+0x32/0x90
30    [<900035c4>] time_init+0xa8/0x108
31    [<90000520>] start_kernel+0x128/0x23c
32
33 When the 'avr32_comparator' clockevent device is registered,
34 the clockevent core sets the mode of that clockevent device
35 to CLOCK_EVT_MODE_SHUTDOWN. Due to this, the 'comparator_mode'
36 function calls the 'cpu_idle_poll_ctrl' to disables idle poll.
37 This results in the aforementioned warning because the polling
38 is not enabled yet.
39
40 Change the code to only disable idle poll if it is enabled by
41 the same function to avoid the warning.
42
43 Cc: stable@vger.kernel.org
44 Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
45 ---
46 Note: the patch is against v3.12-rc2.
47 ---
48  arch/avr32/kernel/time.c |    9 ++++++++-
49  1 file changed, 8 insertions(+), 1 deletion(-)
50
51 --- a/arch/avr32/kernel/time.c
52 +++ b/arch/avr32/kernel/time.c
53 @@ -98,7 +98,14 @@ static void comparator_mode(enum clock_e
54         case CLOCK_EVT_MODE_SHUTDOWN:
55                 sysreg_write(COMPARE, 0);
56                 pr_debug("%s: stop\n", evdev->name);
57 -               cpu_idle_poll_ctrl(false);
58 +               if (evdev->mode == CLOCK_EVT_MODE_ONESHOT ||
59 +                   evdev->mode == CLOCK_EVT_MODE_RESUME) {
60 +                       /*
61 +                        * Only disable idle poll if we have forced that
62 +                        * in a previous call.
63 +                        */
64 +                       cpu_idle_poll_ctrl(false);
65 +               }
66                 break;
67         default:
68                 BUG();