mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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®