2014-12-10 20:57:07

by Mark Salter

[permalink] [raw]
Subject: arm64 hitting BUG in arch_timer.h

Using Linus' tree from this morning, I am hitting:

[ 0.000000] BUG: failure at ./arch/arm64/include/asm/arch_timer.h:112/arch_counter_get_cntpct!

This is triggered by commit 0b46b8a718 ("clocksource: arch_timer: Fix
code to use physical timers when requested") which addresses an armv7
problem. Arm64 wants to always use a virtual timer. I used this to avoid
the BUG and get a booting kernel:

diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch
index 71846f9..4d8a01e 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -468,7 +468,7 @@ static void __init arch_counter_register(unsigned type)

/* Register the CP15 based counter if we have one */
if (type & ARCH_CP15_TIMER) {
- if (arch_timer_use_virtual)
+ if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
arch_timer_read_counter = arch_counter_get_cntvct;
else
arch_timer_read_counter = arch_counter_get_cntpct;


2014-12-10 22:44:17

by Sonny Rao

[permalink] [raw]
Subject: Re: arm64 hitting BUG in arch_timer.h

On Wed, Dec 10, 2014 at 12:56 PM, Mark Salter <[email protected]> wrote:
> Using Linus' tree from this morning, I am hitting:
>
> [ 0.000000] BUG: failure at ./arch/arm64/include/asm/arch_timer.h:112/arch_counter_get_cntpct!
>
> This is triggered by commit 0b46b8a718 ("clocksource: arch_timer: Fix
> code to use physical timers when requested") which addresses an armv7
> problem. Arm64 wants to always use a virtual timer. I used this to avoid
> the BUG and get a booting kernel:
>
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch
> index 71846f9..4d8a01e 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -468,7 +468,7 @@ static void __init arch_counter_register(unsigned type)
>
> /* Register the CP15 based counter if we have one */
> if (type & ARCH_CP15_TIMER) {
> - if (arch_timer_use_virtual)
> + if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
> arch_timer_read_counter = arch_counter_get_cntvct;
> else
> arch_timer_read_counter = arch_counter_get_cntpct;
>
>

Yes Catalin has prepared a similar patch:
https://patchwork.kernel.org/patch/5468031/

2014-12-11 17:52:41

by Catalin Marinas

[permalink] [raw]
Subject: Re: arm64 hitting BUG in arch_timer.h

On Wed, Dec 10, 2014 at 10:43:54PM +0000, Sonny Rao wrote:
> On Wed, Dec 10, 2014 at 12:56 PM, Mark Salter <[email protected]> wrote:
> > Using Linus' tree from this morning, I am hitting:
> >
> > [ 0.000000] BUG: failure at ./arch/arm64/include/asm/arch_timer.h:112/arch_counter_get_cntpct!
> >
> > This is triggered by commit 0b46b8a718 ("clocksource: arch_timer: Fix
> > code to use physical timers when requested") which addresses an armv7
> > problem. Arm64 wants to always use a virtual timer. I used this to avoid
> > the BUG and get a booting kernel:
> >
> > diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch
> > index 71846f9..4d8a01e 100644
> > --- a/drivers/clocksource/arm_arch_timer.c
> > +++ b/drivers/clocksource/arm_arch_timer.c
> > @@ -468,7 +468,7 @@ static void __init arch_counter_register(unsigned type)
> >
> > /* Register the CP15 based counter if we have one */
> > if (type & ARCH_CP15_TIMER) {
> > - if (arch_timer_use_virtual)
> > + if (IS_ENABLED(CONFIG_ARM64) || arch_timer_use_virtual)
> > arch_timer_read_counter = arch_counter_get_cntvct;
> > else
> > arch_timer_read_counter = arch_counter_get_cntpct;
> >
> >
>
> Yes Catalin has prepared a similar patch:
> https://patchwork.kernel.org/patch/5468031/

Indeed. Daniel will be pushing it upstream.

--
Catalin

2014-12-11 19:00:48

by Sergei Shtylyov

[permalink] [raw]
Subject: Re: arm64 hitting BUG in arch_timer.h

Hello.

On 12/10/2014 11:56 PM, Mark Salter wrote:

> Using Linus' tree from this morning, I am hitting:

> [ 0.000000] BUG: failure at ./arch/arm64/include/asm/arch_timer.h:112/arch_counter_get_cntpct!

> This is triggered by commit 0b46b8a718 ("clocksource: arch_timer: Fix
> code to use physical timers when requested") which addresses an armv7
> problem. Arm64 wants to always use a virtual timer. I used this to avoid
> the BUG and get a booting kernel:

You didn't sign off on the patch, so it can't be applied.

[...]

WBR, Sergei

2014-12-11 19:20:22

by Mark Salter

[permalink] [raw]
Subject: Re: arm64 hitting BUG in arch_timer.h

On Thu, 2014-12-11 at 22:00 +0300, Sergei Shtylyov wrote:
> Hello.
>
> On 12/10/2014 11:56 PM, Mark Salter wrote:
>
> > Using Linus' tree from this morning, I am hitting:
>
> > [ 0.000000] BUG: failure at ./arch/arm64/include/asm/arch_timer.h:112/arch_counter_get_cntpct!
>
> > This is triggered by commit 0b46b8a718 ("clocksource: arch_timer: Fix
> > code to use physical timers when requested") which addresses an armv7
> > problem. Arm64 wants to always use a virtual timer. I used this to avoid
> > the BUG and get a booting kernel:
>
> You didn't sign off on the patch, so it can't be applied.
>
> [...]
>
> WBR, Sergei
>

Right. That was more for discussion. I wasn't sure if that was the best
way to fix the problem so I just included what I did to work around it.
As it turns out, I wasn't the first to spot the problem or come up with
a patch. So, the first patch will go in without my further involvement.