* [PATCH] avr32: balance cpu_idle_poll_ctrl calls
@ 2013-09-25 9:31 Gabor Juhos
2013-09-25 11:10 ` Hans-Christian Egtvedt
0 siblings, 1 reply; 2+ messages in thread
From: Gabor Juhos @ 2013-09-25 9:31 UTC (permalink / raw)
To: Hans-Christian Egtvedt
Cc: Haavard Skinnemoen, Thomas Gleixner, linux-kernel, Gabor Juhos, stable
Since commit 01426478df3a8791ff5c8b6b82d409e699cfaf38
(avr32: Use generic idle loop) the kernel throws the
following warning on avr32:
WARNING: at 900322e4 [verbose debug info unavailable]
Modules linked in:
CPU: 0 PID: 0 Comm: swapper Not tainted 3.12.0-rc2 #117
task: 901c3ecc ti: 901c0000 task.ti: 901c0000
PC is at cpu_idle_poll_ctrl+0x1c/0x38
LR is at comparator_mode+0x3e/0x40
pc : [<900322e4>] lr : [<90014882>] Not tainted
sp : 901c1f74 r12: 00000000 r11: 901c74a0
r10: 901d2510 r9 : 00000001 r8 : 901db4de
r7 : 901c74a0 r6 : 00000001 r5 : 00410020 r4 : 901db574
r3 : 00410024 r2 : 90206fe0 r1 : 00000000 r0 : 007f0000
Flags: qvnzc
Mode bits: hjmde....G
CPU Mode: Supervisor
Call trace:
[<90039ede>] clockevents_set_mode+0x16/0x2e
[<90039f00>] clockevents_shutdown+0xa/0x1e
[<9003a078>] clockevents_exchange_device+0x58/0x70
[<9003a78c>] tick_check_new_device+0x38/0x54
[<9003a1a2>] clockevents_register_device+0x32/0x90
[<900035c4>] time_init+0xa8/0x108
[<90000520>] start_kernel+0x128/0x23c
When the 'avr32_comparator' clockevent device is registered,
the clockevent core sets the mode of that clockevent device
to CLOCK_EVT_MODE_SHUTDOWN. Due to this, the 'comparator_mode'
function calls the 'cpu_idle_poll_ctrl' to disables idle poll.
This results in the aforementioned warning because the polling
is not enabled yet.
Change the code to only disable idle poll if it is enabled by
the same function to avoid the warning.
Cc: stable@vger.kernel.org
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
---
Note: the patch is against v3.12-rc2.
---
arch/avr32/kernel/time.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/avr32/kernel/time.c b/arch/avr32/kernel/time.c
index 869a1c6..12f828a 100644
--- a/arch/avr32/kernel/time.c
+++ b/arch/avr32/kernel/time.c
@@ -98,7 +98,14 @@ static void comparator_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_SHUTDOWN:
sysreg_write(COMPARE, 0);
pr_debug("%s: stop\n", evdev->name);
- cpu_idle_poll_ctrl(false);
+ if (evdev->mode == CLOCK_EVT_MODE_ONESHOT ||
+ evdev->mode == CLOCK_EVT_MODE_RESUME) {
+ /*
+ * Only disable idle poll if we have forced that
+ * in a previous call.
+ */
+ cpu_idle_poll_ctrl(false);
+ }
break;
default:
BUG();
--
1.7.10
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] avr32: balance cpu_idle_poll_ctrl calls
2013-09-25 9:31 [PATCH] avr32: balance cpu_idle_poll_ctrl calls Gabor Juhos
@ 2013-09-25 11:10 ` Hans-Christian Egtvedt
0 siblings, 0 replies; 2+ messages in thread
From: Hans-Christian Egtvedt @ 2013-09-25 11:10 UTC (permalink / raw)
To: Gabor Juhos; +Cc: Haavard Skinnemoen, Thomas Gleixner, linux-kernel, stable
Around Wed 25 Sep 2013 11:31:19 +0200 or thereabout, Gabor Juhos wrote:
> Since commit 01426478df3a8791ff5c8b6b82d409e699cfaf38
> (avr32: Use generic idle loop) the kernel throws the
> following warning on avr32:
>
> WARNING: at 900322e4 [verbose debug info unavailable]
> Modules linked in:
> CPU: 0 PID: 0 Comm: swapper Not tainted 3.12.0-rc2 #117
> task: 901c3ecc ti: 901c0000 task.ti: 901c0000
> PC is at cpu_idle_poll_ctrl+0x1c/0x38
> LR is at comparator_mode+0x3e/0x40
> pc : [<900322e4>] lr : [<90014882>] Not tainted
> sp : 901c1f74 r12: 00000000 r11: 901c74a0
> r10: 901d2510 r9 : 00000001 r8 : 901db4de
> r7 : 901c74a0 r6 : 00000001 r5 : 00410020 r4 : 901db574
> r3 : 00410024 r2 : 90206fe0 r1 : 00000000 r0 : 007f0000
> Flags: qvnzc
> Mode bits: hjmde....G
> CPU Mode: Supervisor
> Call trace:
> [<90039ede>] clockevents_set_mode+0x16/0x2e
> [<90039f00>] clockevents_shutdown+0xa/0x1e
> [<9003a078>] clockevents_exchange_device+0x58/0x70
> [<9003a78c>] tick_check_new_device+0x38/0x54
> [<9003a1a2>] clockevents_register_device+0x32/0x90
> [<900035c4>] time_init+0xa8/0x108
> [<90000520>] start_kernel+0x128/0x23c
>
> When the 'avr32_comparator' clockevent device is registered,
> the clockevent core sets the mode of that clockevent device
> to CLOCK_EVT_MODE_SHUTDOWN. Due to this, the 'comparator_mode'
> function calls the 'cpu_idle_poll_ctrl' to disables idle poll.
> This results in the aforementioned warning because the polling
> is not enabled yet.
>
> Change the code to only disable idle poll if it is enabled by
> the same function to avoid the warning.
Thank you for fixing.
> Cc: stable@vger.kernel.org
> Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Acked-by: Hans-Christian Egtvedt <egtvedt@samfundet.no>
> ---
> Note: the patch is against v3.12-rc2.
> ---
I'll add this to my for-linus branch, which I'll send a pull request for
soon.
> arch/avr32/kernel/time.c | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/arch/avr32/kernel/time.c b/arch/avr32/kernel/time.c
> index 869a1c6..12f828a 100644
> --- a/arch/avr32/kernel/time.c
> +++ b/arch/avr32/kernel/time.c
> @@ -98,7 +98,14 @@ static void comparator_mode(enum clock_event_mode mode,
> case CLOCK_EVT_MODE_SHUTDOWN:
> sysreg_write(COMPARE, 0);
> pr_debug("%s: stop\n", evdev->name);
> - cpu_idle_poll_ctrl(false);
> + if (evdev->mode == CLOCK_EVT_MODE_ONESHOT ||
> + evdev->mode == CLOCK_EVT_MODE_RESUME) {
> + /*
> + * Only disable idle poll if we have forced that
> + * in a previous call.
> + */
> + cpu_idle_poll_ctrl(false);
> + }
> break;
> default:
> BUG();
--
mvh
Hans-Christian Egtvedt
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-09-25 11:10 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-09-25 9:31 [PATCH] avr32: balance cpu_idle_poll_ctrl calls Gabor Juhos
2013-09-25 11:10 ` Hans-Christian Egtvedt
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®