From: Tony Lindgren <tony@atomide.com>
To: Kevin Hilman <khilman@linaro.org>
Cc: Vladimir Murzin <murzin.v@gmail.com>,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux@arm.linux.org.uk
Subject: Re: [PATCH] ARM: OMAP4: cpuidle: fix: call cpu_cluster_pm_exit conditionally
Date: Tue, 17 Sep 2013 16:47:17 -0700 [thread overview]
Message-ID: <20130917234717.GQ9994@atomide.com> (raw)
In-Reply-To: <87sixvw2n5.fsf@linaro.org>
* Kevin Hilman <khilman@linaro.org> [130827 09:01]:
> Vladimir Murzin <murzin.v@gmail.com> writes:
>
> > We call cpu_cluster_pm_enter for dev->cpu == 0 only, but
> > cpu_cluster_pm_exit called without that check.
> >
> > Because of that unhandled page fault may happen:
> >
> > [ 3.803405] Unable to handle kernel paging request at virtual address 00002500
> > [ 3.810974] pgd = c0004000
> > [ 3.813812] [00002500] *pgd=00000000
> > [ 3.817596] Internal error: Oops: 5 [#1] SMP ARM
> > [ 3.822418] Modules linked in:
> > [ 3.825653] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.11.0-rc6+ #21
> > [ 3.832397] task: ed86ef40 ti: ed896000 task.ti: ed896000
> > [ 3.838073] PC is at irq_notifier+0x234/0x25c
> > [ 3.842651] LR is at irq_notifier+0x218/0x25c
> > [ 3.847229] pc : [<c0029ed8>] lr : [<c0029ebc>] psr: 80000193
> > [ 3.847229] sp : ed897ee8 ip : 00000005 fp : 00000001
> > [ 3.859283] r10: c0b395f0 r9 : c0b30594 r8 : c0b8c2ac
> > [ 3.864776] r7 : ffffffff r6 : 00000000 r5 : 00000005 r4 : 00000000
> > [ 3.871643] r3 : 00002500 r2 : 00000000 r1 : 00000005 r0 : 44302244
> > [ 3.878479] Flags: Nzcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
> > [ 3.886260] Control: 10c5387d Table: 8000404a DAC: 00000015
> > [ 3.892272] Process swapper/1 (pid: 0, stack limit = 0xed896240)
> > [ 3.898590] Stack: (0xed897ee8 to 0xed898000)
> > [ 3.903167] 7ee0: c0979c3a 00000001 ed897ef8 ed896000 c0014f7c 00000000
> > [ 3.911743] 7f00: 00000005 00000000 ffffffff c0b8c2ac c0b395f0 c077c04c c0c94b48 c0b3953c
> > [ 3.920318] 7f20: c0bcd928 00000002 c0b39524 c00cfad8 00000000 ffffffff 00000000 c00cfb10
> > [ 3.928924] 7f40: c14e62c0 c002c1c8 c002c0ac c14e62c0 00000002 e251c37d 00000000 c0b39548
> > [ 3.937499] 7f60: c0b395f0 c05a1bc4 e251c37d 00000000 00000005 c05a3870 edc90380 edc90380
> > [ 3.946105] 7f80: edc90394 c14e62c0 c0b39548 00000002 c0784064 c05a3c78 c0b395e0 c14e62c0
> > [ 3.954681] 7fa0: 00000002 c0b39548 c0bc9db8 00000000 00000001 c05a1dc0 ed896000 00000015
> > [ 3.963287] 7fc0: c0bc9db8 ed896000 8000406a c0b30594 c0784064 c000e504 00000746 c007a528
> > [ 3.971862] 7fe0: 00000001 0000001d 600001d3 c0bcc004 00000000 800086c4 ee0aa6a7 d2aabaa9
> > [ 3.980499] [<c0029ed8>] (irq_notifier+0x234/0x25c) from [<c077c04c>] (notifier_call_chain+0x38/0x68)
> > [ 3.990173] [<c077c04c>] (notifier_call_chain+0x38/0x68) from [<c00cfad8>] (cpu_pm_notify+0x20/0x38)
> > [ 3.999786] [<c00cfad8>] (cpu_pm_notify+0x20/0x38) from [<c00cfb10>] (cpu_cluster_pm_exit+0x20/0x50)
> > [ 4.009399] [<c00cfb10>] (cpu_cluster_pm_exit+0x20/0x50) from [<c002c1c8>] (omap_enter_idle_coupled+0x11c/0x14c)
> > [ 4.020111] [<c002c1c8>] (omap_enter_idle_coupled+0x11c/0x14c) from [<c05a1bc4>] (cpuidle_enter_state+0x40/0xec)
> > [ 4.030822] [<c05a1bc4>] (cpuidle_enter_state+0x40/0xec) from [<c05a3c78>] (cpuidle_enter_state_coupled+0x1f4/0x240)
> > [ 4.041870] [<c05a3c78>] (cpuidle_enter_state_coupled+0x1f4/0x240) from [<c05a1dc0>] (cpuidle_idle_call+0x150/0x228)
> > [ 4.052947] [<c05a1dc0>] (cpuidle_idle_call+0x150/0x228) from [<c000e504>] (arch_cpu_idle+0x8/0x38)
> > [ 4.062499] [<c000e504>] (arch_cpu_idle+0x8/0x38) from [<c007a528>] (cpu_startup_entry+0x178/0x1e4)
> > [ 4.071990] [<c007a528>] (cpu_startup_entry+0x178/0x1e4) from [<800086c4>] (0x800086c4)
> > [ 4.080383] Code: e5922288 03a03b0a 13a03c25 e0823003 (e5932000)
> > [ 4.086791] ---[ end trace d83954a84a6fa69e ]---
> >
> > It is supposed that sar_base is initialized in irq_save_context, which
> > is called on CPU_CLUSTER_PM_ENTER notification. If this notification
> > has been missed and CPU_CLUSTER_PM_EXIT is received sar_base is NULL.
> >
> > Fix it by calling CPU_CLUSTER_PM_{ENTER,EXIT} under the same condition.
> >
> > Signed-off-by: Vladimir Murzin <murzin.v@gmail.com>
>
> Good catch.
>
> Acked-by: Kevin Hilman <khilman@linaro.org>
Thanks applying into omap-for-v3.12/fixes.
Tony
> > ---
> > arch/arm/mach-omap2/cpuidle44xx.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
> > index c443f2e..4c8982a 100644
> > --- a/arch/arm/mach-omap2/cpuidle44xx.c
> > +++ b/arch/arm/mach-omap2/cpuidle44xx.c
> > @@ -143,7 +143,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
> > * Call idle CPU cluster PM exit notifier chain
> > * to restore GIC and wakeupgen context.
> > */
> > - if ((cx->mpu_state == PWRDM_POWER_RET) &&
> > + if (dev->cpu == 0 && (cx->mpu_state == PWRDM_POWER_RET) &&
> > (cx->mpu_logic_state == PWRDM_POWER_OFF))
> > cpu_cluster_pm_exit();
WARNING: multiple messages have this Message-ID (diff)
From: tony@atomide.com (Tony Lindgren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: OMAP4: cpuidle: fix: call cpu_cluster_pm_exit conditionally
Date: Tue, 17 Sep 2013 16:47:17 -0700 [thread overview]
Message-ID: <20130917234717.GQ9994@atomide.com> (raw)
In-Reply-To: <87sixvw2n5.fsf@linaro.org>
* Kevin Hilman <khilman@linaro.org> [130827 09:01]:
> Vladimir Murzin <murzin.v@gmail.com> writes:
>
> > We call cpu_cluster_pm_enter for dev->cpu == 0 only, but
> > cpu_cluster_pm_exit called without that check.
> >
> > Because of that unhandled page fault may happen:
> >
> > [ 3.803405] Unable to handle kernel paging request at virtual address 00002500
> > [ 3.810974] pgd = c0004000
> > [ 3.813812] [00002500] *pgd=00000000
> > [ 3.817596] Internal error: Oops: 5 [#1] SMP ARM
> > [ 3.822418] Modules linked in:
> > [ 3.825653] CPU: 1 PID: 0 Comm: swapper/1 Not tainted 3.11.0-rc6+ #21
> > [ 3.832397] task: ed86ef40 ti: ed896000 task.ti: ed896000
> > [ 3.838073] PC is at irq_notifier+0x234/0x25c
> > [ 3.842651] LR is at irq_notifier+0x218/0x25c
> > [ 3.847229] pc : [<c0029ed8>] lr : [<c0029ebc>] psr: 80000193
> > [ 3.847229] sp : ed897ee8 ip : 00000005 fp : 00000001
> > [ 3.859283] r10: c0b395f0 r9 : c0b30594 r8 : c0b8c2ac
> > [ 3.864776] r7 : ffffffff r6 : 00000000 r5 : 00000005 r4 : 00000000
> > [ 3.871643] r3 : 00002500 r2 : 00000000 r1 : 00000005 r0 : 44302244
> > [ 3.878479] Flags: Nzcv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
> > [ 3.886260] Control: 10c5387d Table: 8000404a DAC: 00000015
> > [ 3.892272] Process swapper/1 (pid: 0, stack limit = 0xed896240)
> > [ 3.898590] Stack: (0xed897ee8 to 0xed898000)
> > [ 3.903167] 7ee0: c0979c3a 00000001 ed897ef8 ed896000 c0014f7c 00000000
> > [ 3.911743] 7f00: 00000005 00000000 ffffffff c0b8c2ac c0b395f0 c077c04c c0c94b48 c0b3953c
> > [ 3.920318] 7f20: c0bcd928 00000002 c0b39524 c00cfad8 00000000 ffffffff 00000000 c00cfb10
> > [ 3.928924] 7f40: c14e62c0 c002c1c8 c002c0ac c14e62c0 00000002 e251c37d 00000000 c0b39548
> > [ 3.937499] 7f60: c0b395f0 c05a1bc4 e251c37d 00000000 00000005 c05a3870 edc90380 edc90380
> > [ 3.946105] 7f80: edc90394 c14e62c0 c0b39548 00000002 c0784064 c05a3c78 c0b395e0 c14e62c0
> > [ 3.954681] 7fa0: 00000002 c0b39548 c0bc9db8 00000000 00000001 c05a1dc0 ed896000 00000015
> > [ 3.963287] 7fc0: c0bc9db8 ed896000 8000406a c0b30594 c0784064 c000e504 00000746 c007a528
> > [ 3.971862] 7fe0: 00000001 0000001d 600001d3 c0bcc004 00000000 800086c4 ee0aa6a7 d2aabaa9
> > [ 3.980499] [<c0029ed8>] (irq_notifier+0x234/0x25c) from [<c077c04c>] (notifier_call_chain+0x38/0x68)
> > [ 3.990173] [<c077c04c>] (notifier_call_chain+0x38/0x68) from [<c00cfad8>] (cpu_pm_notify+0x20/0x38)
> > [ 3.999786] [<c00cfad8>] (cpu_pm_notify+0x20/0x38) from [<c00cfb10>] (cpu_cluster_pm_exit+0x20/0x50)
> > [ 4.009399] [<c00cfb10>] (cpu_cluster_pm_exit+0x20/0x50) from [<c002c1c8>] (omap_enter_idle_coupled+0x11c/0x14c)
> > [ 4.020111] [<c002c1c8>] (omap_enter_idle_coupled+0x11c/0x14c) from [<c05a1bc4>] (cpuidle_enter_state+0x40/0xec)
> > [ 4.030822] [<c05a1bc4>] (cpuidle_enter_state+0x40/0xec) from [<c05a3c78>] (cpuidle_enter_state_coupled+0x1f4/0x240)
> > [ 4.041870] [<c05a3c78>] (cpuidle_enter_state_coupled+0x1f4/0x240) from [<c05a1dc0>] (cpuidle_idle_call+0x150/0x228)
> > [ 4.052947] [<c05a1dc0>] (cpuidle_idle_call+0x150/0x228) from [<c000e504>] (arch_cpu_idle+0x8/0x38)
> > [ 4.062499] [<c000e504>] (arch_cpu_idle+0x8/0x38) from [<c007a528>] (cpu_startup_entry+0x178/0x1e4)
> > [ 4.071990] [<c007a528>] (cpu_startup_entry+0x178/0x1e4) from [<800086c4>] (0x800086c4)
> > [ 4.080383] Code: e5922288 03a03b0a 13a03c25 e0823003 (e5932000)
> > [ 4.086791] ---[ end trace d83954a84a6fa69e ]---
> >
> > It is supposed that sar_base is initialized in irq_save_context, which
> > is called on CPU_CLUSTER_PM_ENTER notification. If this notification
> > has been missed and CPU_CLUSTER_PM_EXIT is received sar_base is NULL.
> >
> > Fix it by calling CPU_CLUSTER_PM_{ENTER,EXIT} under the same condition.
> >
> > Signed-off-by: Vladimir Murzin <murzin.v@gmail.com>
>
> Good catch.
>
> Acked-by: Kevin Hilman <khilman@linaro.org>
Thanks applying into omap-for-v3.12/fixes.
Tony
> > ---
> > arch/arm/mach-omap2/cpuidle44xx.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/arch/arm/mach-omap2/cpuidle44xx.c b/arch/arm/mach-omap2/cpuidle44xx.c
> > index c443f2e..4c8982a 100644
> > --- a/arch/arm/mach-omap2/cpuidle44xx.c
> > +++ b/arch/arm/mach-omap2/cpuidle44xx.c
> > @@ -143,7 +143,7 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,
> > * Call idle CPU cluster PM exit notifier chain
> > * to restore GIC and wakeupgen context.
> > */
> > - if ((cx->mpu_state == PWRDM_POWER_RET) &&
> > + if (dev->cpu == 0 && (cx->mpu_state == PWRDM_POWER_RET) &&
> > (cx->mpu_logic_state == PWRDM_POWER_OFF))
> > cpu_cluster_pm_exit();
next prev parent reply other threads:[~2013-09-17 23:47 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-27 10:10 [PATCH] ARM: OMAP4: cpuidle: fix: call cpu_cluster_pm_exit conditionally Vladimir Murzin
2013-08-27 10:10 ` Vladimir Murzin
2013-08-27 15:54 ` Kevin Hilman
2013-08-27 15:54 ` Kevin Hilman
2013-08-29 15:20 ` Strashko, Grygorii
2013-08-29 15:20 ` Strashko, Grygorii
2013-08-29 15:26 ` Santosh Shilimkar
2013-08-29 15:26 ` Santosh Shilimkar
2013-08-29 16:03 ` Strashko, Grygorii
2013-08-29 16:03 ` Strashko, Grygorii
2013-08-29 17:15 ` Kevin Hilman
2013-08-29 17:15 ` Kevin Hilman
2013-08-29 17:29 ` Santosh Shilimkar
2013-08-29 17:29 ` Santosh Shilimkar
2013-09-17 23:47 ` Tony Lindgren [this message]
2013-09-17 23:47 ` Tony Lindgren
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=20130917234717.GQ9994@atomide.com \
--to=tony@atomide.com \
--cc=khilman@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=murzin.v@gmail.com \
/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.