linux-pm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* bisected: [PATCH V4] x86/apic: Always explicitly disarm TSC-deadline timer
@ 2024-11-28 11:18 Sergey Senozhatsky
  2024-11-28 11:22 ` Sergey Senozhatsky
  2024-11-30 11:21 ` Thomas Gleixner
  0 siblings, 2 replies; 10+ messages in thread
From: Sergey Senozhatsky @ 2024-11-28 11:18 UTC (permalink / raw)
  To: Zhang Rui
  Cc: hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, tglx, mingo, bp,
	dave.hansen, rafael.j.wysocki, x86, linux-pm, Sergey Senozhatsky

Hi folks,
sorry if messed something up, this email has never been in my inbox.

> Disable the TSC Deadline timer in lapic_timer_shutdown() by writing to
> MSR_IA32_TSC_DEADLINE when in TSC-deadline mode. Also avoid writing
> to the initial-count register (APIC_TMICT) which is ignored in
> TSC-deadline mode.

So this commit hit stable and we now see section mismatch errors:

// stripped

WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference from the (unknown reference) (unknown) to the (unknown reference) .irqentry.text:(unknown)
The relocation at __ex_table+0x447c references
section ".irqentry.text" which is not in the list of
authorized sections.

WARNING: vmlinux.o(__ex_table+0x4480): Section mismatch in reference from the (unknown reference) (unknown) to the (unknown reference) .irqentry.text:(unknown)
The relocation at __ex_table+0x4480 references
section ".irqentry.text" which is not in the list of
authorized sections.

FATAL: modpost: Section mismatches detected.


Specifically because of wrmsrl.

I'm aware of the section mismatch errors on linux-5.4 (I know), not
aware of any other stable versions (but I haven't checked).  Is this
something specific to linux-5.4?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: bisected: [PATCH V4] x86/apic: Always explicitly disarm TSC-deadline timer
  2024-11-28 11:18 bisected: [PATCH V4] x86/apic: Always explicitly disarm TSC-deadline timer Sergey Senozhatsky
@ 2024-11-28 11:22 ` Sergey Senozhatsky
  2024-11-30 11:21 ` Thomas Gleixner
  1 sibling, 0 replies; 10+ messages in thread
From: Sergey Senozhatsky @ 2024-11-28 11:22 UTC (permalink / raw)
  To: Zhang Rui
  Cc: hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, tglx, mingo, bp,
	dave.hansen, rafael.j.wysocki, x86, linux-pm, Sergey Senozhatsky

On (24/11/28 20:18), Sergey Senozhatsky wrote:
> > Disable the TSC Deadline timer in lapic_timer_shutdown() by writing to
> > MSR_IA32_TSC_DEADLINE when in TSC-deadline mode. Also avoid writing
> > to the initial-count register (APIC_TMICT) which is ignored in
> > TSC-deadline mode.

Upstream commit ffd95846c6ec6cf1f93da411ea10d504036cab42 (forgot
to mention)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: bisected: [PATCH V4] x86/apic: Always explicitly disarm TSC-deadline timer
  2024-11-28 11:18 bisected: [PATCH V4] x86/apic: Always explicitly disarm TSC-deadline timer Sergey Senozhatsky
  2024-11-28 11:22 ` Sergey Senozhatsky
@ 2024-11-30 11:21 ` Thomas Gleixner
  2024-11-30 11:45   ` Sergey Senozhatsky
  1 sibling, 1 reply; 10+ messages in thread
From: Thomas Gleixner @ 2024-11-30 11:21 UTC (permalink / raw)
  To: 20241015061522.25288-1-rui.zhang, Zhang Rui
  Cc: hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Sergey Senozhatsky

On Thu, Nov 28 2024 at 20:18, Sergey Senozhatsky wrote:
>> Disable the TSC Deadline timer in lapic_timer_shutdown() by writing to
>> MSR_IA32_TSC_DEADLINE when in TSC-deadline mode. Also avoid writing
>> to the initial-count register (APIC_TMICT) which is ignored in
>> TSC-deadline mode.
>
> So this commit hit stable and we now see section mismatch errors:
>
> // stripped
>
> WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference from the (unknown reference) (unknown) to the (unknown reference) .irqentry.text:(unknown)
> The relocation at __ex_table+0x447c references
> section ".irqentry.text" which is not in the list of
> authorized sections.
>
> WARNING: vmlinux.o(__ex_table+0x4480): Section mismatch in reference from the (unknown reference) (unknown) to the (unknown reference) .irqentry.text:(unknown)
> The relocation at __ex_table+0x4480 references
> section ".irqentry.text" which is not in the list of
> authorized sections.
>
> FATAL: modpost: Section mismatches detected.
>
> Specifically because of wrmsrl.
>
> I'm aware of the section mismatch errors on linux-5.4 (I know), not
> aware of any other stable versions (but I haven't checked).  Is this
> something specific to linux-5.4?

So it seems the compiler inlines the inner guts of
sysvec_apic_timer_interrupt() and local_apic_timer_interrupt().

Can you try the patch below?

Thanks,

        tglx
---
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -1007,7 +1007,7 @@ void setup_secondary_APIC_clock(void)
 /*
  * The guts of the apic timer interrupt
  */
-static void local_apic_timer_interrupt(void)
+static noinline void local_apic_timer_interrupt(void)
 {
 	struct clock_event_device *evt = this_cpu_ptr(&lapic_events);
 



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: bisected: [PATCH V4] x86/apic: Always explicitly disarm TSC-deadline timer
  2024-11-30 11:21 ` Thomas Gleixner
@ 2024-11-30 11:45   ` Sergey Senozhatsky
  2024-12-01 11:17     ` [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS Thomas Gleixner
  0 siblings, 1 reply; 10+ messages in thread
From: Sergey Senozhatsky @ 2024-11-30 11:45 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: 20241015061522.25288-1-rui.zhang, Zhang Rui, hpa, peterz,
	thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Sergey Senozhatsky

On (24/11/30 12:21), Thomas Gleixner wrote:
> > WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference from the (unknown reference) (unknown) to the (unknown reference) .irqentry.text:(unknown)
> > The relocation at __ex_table+0x447c references
> > section ".irqentry.text" which is not in the list of
> > authorized sections.
> >
> > WARNING: vmlinux.o(__ex_table+0x4480): Section mismatch in reference from the (unknown reference) (unknown) to the (unknown reference) .irqentry.text:(unknown)
> > The relocation at __ex_table+0x4480 references
> > section ".irqentry.text" which is not in the list of
> > authorized sections.
> >
> > FATAL: modpost: Section mismatches detected.
> >
> > Specifically because of wrmsrl.
> >
> > I'm aware of the section mismatch errors on linux-5.4 (I know), not
> > aware of any other stable versions (but I haven't checked).  Is this
> > something specific to linux-5.4?
> 
> So it seems the compiler inlines the inner guts of
> sysvec_apic_timer_interrupt() and local_apic_timer_interrupt().
> 
> Can you try the patch below?

That works, as far as I can tell, thank you!

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS
  2024-11-30 11:45   ` Sergey Senozhatsky
@ 2024-12-01 11:17     ` Thomas Gleixner
  2024-12-02  2:02       ` Masahiro Yamada
  2024-12-02  4:10       ` Sergey Senozhatsky
  0 siblings, 2 replies; 10+ messages in thread
From: Thomas Gleixner @ 2024-12-01 11:17 UTC (permalink / raw)
  To: Sergey Senozhatsky
  Cc: 20241015061522.25288-1-rui.zhang, Zhang Rui, hpa, peterz,
	thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Sergey Senozhatsky,
	Masahiro Yamada, Nathan Chancellor, Nicolas Schier, linux-kbuild

The compiler can fully inline the actual handler function of an interrupt
entry into the .irqentry.text entry point. If such a function contains an
access which has an exception table entry, modpost complains about a
section mismatch:

  WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ...

  The relocation at __ex_table+0x447c references section ".irqentry.text"
  which is not in the list of authorized sections.

Add .irqentry.text to OTHER_SECTIONS to cure the issue.

Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@vger.kernel.org
---
 scripts/mod/modpost.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -785,7 +785,7 @@ static void check_section(const char *mo
 		".ltext", ".ltext.*"
 #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
 		".fixup", ".entry.text", ".exception.text", \
-		".coldtext", ".softirqentry.text"
+		".coldtext", ".softirqentry.text", ".irqentry.text"
 
 #define ALL_TEXT_SECTIONS  ".init.text", ".exit.text", \
 		TEXT_SECTIONS, OTHER_TEXT_SECTIONS

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS
  2024-12-01 11:17     ` [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS Thomas Gleixner
@ 2024-12-02  2:02       ` Masahiro Yamada
  2024-12-02 21:03         ` Thomas Gleixner
  2024-12-02  4:10       ` Sergey Senozhatsky
  1 sibling, 1 reply; 10+ messages in thread
From: Masahiro Yamada @ 2024-12-02  2:02 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: Sergey Senozhatsky, 20241015061522.25288-1-rui.zhang, Zhang Rui,
	hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Nathan Chancellor,
	Nicolas Schier, linux-kbuild

On Sun, Dec 1, 2024 at 8:17 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> The compiler can fully inline the actual handler function of an interrupt
> entry into the .irqentry.text entry point. If such a function contains an
> access which has an exception table entry, modpost complains about a
> section mismatch:
>
>   WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ...
>
>   The relocation at __ex_table+0x447c references section ".irqentry.text"
>   which is not in the list of authorized sections.
>
> Add .irqentry.text to OTHER_SECTIONS to cure the issue.
>
> Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org>

I found the context in LKML.


Closes: https://lore.kernel.org/all/20241128111844.GE10431@google.com/



However, is this still relevant to the mainline kernel?

In Linux 5.4.y, I agree this because smp_apic_timer_interrupt()
is annotated as __irq_entry:

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/kernel/apic/apic.c?id=v5.4.286#n1145



In this mainline kernel, DEFINE_IDTENTRY_SYSVEC()
expands to a normal .text function which is explicitly
annotated 'noinline'.





> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> Cc: stable@vger.kernel.org
> ---
>  scripts/mod/modpost.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> --- a/scripts/mod/modpost.c
> +++ b/scripts/mod/modpost.c
> @@ -785,7 +785,7 @@ static void check_section(const char *mo
>                 ".ltext", ".ltext.*"
>  #define OTHER_TEXT_SECTIONS ".ref.text", ".head.text", ".spinlock.text", \
>                 ".fixup", ".entry.text", ".exception.text", \
> -               ".coldtext", ".softirqentry.text"
> +               ".coldtext", ".softirqentry.text", ".irqentry.text"
>
>  #define ALL_TEXT_SECTIONS  ".init.text", ".exit.text", \
>                 TEXT_SECTIONS, OTHER_TEXT_SECTIONS



--
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS
  2024-12-01 11:17     ` [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS Thomas Gleixner
  2024-12-02  2:02       ` Masahiro Yamada
@ 2024-12-02  4:10       ` Sergey Senozhatsky
  1 sibling, 0 replies; 10+ messages in thread
From: Sergey Senozhatsky @ 2024-12-02  4:10 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: Sergey Senozhatsky, 20241015061522.25288-1-rui.zhang, Zhang Rui,
	hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Masahiro Yamada,
	Nathan Chancellor, Nicolas Schier, linux-kbuild

On (24/12/01 12:17), Thomas Gleixner wrote:
> The compiler can fully inline the actual handler function of an interrupt
> entry into the .irqentry.text entry point. If such a function contains an
> access which has an exception table entry, modpost complains about a
> section mismatch:
> 
>   WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ...
> 
>   The relocation at __ex_table+0x447c references section ".irqentry.text"
>   which is not in the list of authorized sections.
> 
> Add .irqentry.text to OTHER_SECTIONS to cure the issue.

This works.  In fact, this looks like a local fix which we applied
here on our side, but we were very unsure.  Thank you Thomas.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS
  2024-12-02  2:02       ` Masahiro Yamada
@ 2024-12-02 21:03         ` Thomas Gleixner
  2024-12-03 15:27           ` Masahiro Yamada
  0 siblings, 1 reply; 10+ messages in thread
From: Thomas Gleixner @ 2024-12-02 21:03 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Sergey Senozhatsky, 20241015061522.25288-1-rui.zhang, Zhang Rui,
	hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Nathan Chancellor,
	Nicolas Schier, linux-kbuild

On Mon, Dec 02 2024 at 11:02, Masahiro Yamada wrote:
> On Sun, Dec 1, 2024 at 8:17 PM Thomas Gleixner <tglx@linutronix.de> wrote:
>>
>> The compiler can fully inline the actual handler function of an interrupt
>> entry into the .irqentry.text entry point. If such a function contains an
>> access which has an exception table entry, modpost complains about a
>> section mismatch:
>>
>>   WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ...
>>
>>   The relocation at __ex_table+0x447c references section ".irqentry.text"
>>   which is not in the list of authorized sections.
>>
>> Add .irqentry.text to OTHER_SECTIONS to cure the issue.
>>
>> Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org>
>
> I found the context in LKML.
> Closes: https://lore.kernel.org/all/20241128111844.GE10431@google.com/
>
> However, is this still relevant to the mainline kernel?
>
> In Linux 5.4.y, I agree this because smp_apic_timer_interrupt()
> is annotated as __irq_entry:

Correct.

> In this mainline kernel, DEFINE_IDTENTRY_SYSVEC()
> expands to a normal .text function which is explicitly
> annotated 'noinline'.

It's not annotated noinline, it's annotated 'noinstr', which puts the
code into the .noinstr.text section. That one is indeed covered.

So yes, the fix is only required for pre 5.8 kernels.

Thanks,

        tglx

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS
  2024-12-02 21:03         ` Thomas Gleixner
@ 2024-12-03 15:27           ` Masahiro Yamada
  2024-12-03 16:10             ` Thomas Gleixner
  0 siblings, 1 reply; 10+ messages in thread
From: Masahiro Yamada @ 2024-12-03 15:27 UTC (permalink / raw)
  To: Thomas Gleixner
  Cc: Sergey Senozhatsky, 20241015061522.25288-1-rui.zhang, Zhang Rui,
	hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Nathan Chancellor,
	Nicolas Schier, linux-kbuild

On Tue, Dec 3, 2024 at 6:03 AM Thomas Gleixner <tglx@linutronix.de> wrote:
>
> On Mon, Dec 02 2024 at 11:02, Masahiro Yamada wrote:
> > On Sun, Dec 1, 2024 at 8:17 PM Thomas Gleixner <tglx@linutronix.de> wrote:
> >>
> >> The compiler can fully inline the actual handler function of an interrupt
> >> entry into the .irqentry.text entry point. If such a function contains an
> >> access which has an exception table entry, modpost complains about a
> >> section mismatch:
> >>
> >>   WARNING: vmlinux.o(__ex_table+0x447c): Section mismatch in reference ...
> >>
> >>   The relocation at __ex_table+0x447c references section ".irqentry.text"
> >>   which is not in the list of authorized sections.
> >>
> >> Add .irqentry.text to OTHER_SECTIONS to cure the issue.
> >>
> >> Reported-by: Sergey Senozhatsky <senozhatsky@chromium.org>
> >
> > I found the context in LKML.
> > Closes: https://lore.kernel.org/all/20241128111844.GE10431@google.com/
> >
> > However, is this still relevant to the mainline kernel?
> >
> > In Linux 5.4.y, I agree this because smp_apic_timer_interrupt()
> > is annotated as __irq_entry:
>
> Correct.
>
> > In this mainline kernel, DEFINE_IDTENTRY_SYSVEC()
> > expands to a normal .text function which is explicitly
> > annotated 'noinline'.
>
> It's not annotated noinline, it's annotated 'noinstr', which puts the
> code into the .noinstr.text section. That one is indeed covered.


The callsite of local_apic_timer_interrupt() is annotated 'noinline'
if I correctly understand this line:
  https://github.com/torvalds/linux/blob/v6.13-rc1/arch/x86/include/asm/idtentry.h#L272


It expands to:

static noinline void __sysvec_apic_timer_interrupt(struct pt_regs *regs)
{
       [snip]
       local_apic_timer_interrupt();
       [snip]
}



> So yes, the fix is only required for pre 5.8 kernels.

This never occurs on x86 after commit f0178fc01fe46,
but theoretically this may occur for other architectures.

Now applied to linux-kbuild.
Thanks.




>
> Thanks,
>
>         tglx



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS
  2024-12-03 15:27           ` Masahiro Yamada
@ 2024-12-03 16:10             ` Thomas Gleixner
  0 siblings, 0 replies; 10+ messages in thread
From: Thomas Gleixner @ 2024-12-03 16:10 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Sergey Senozhatsky, 20241015061522.25288-1-rui.zhang, Zhang Rui,
	hpa, peterz, thorsten.blum, yuntao.wang, tony.luck, len.brown,
	srinivas.pandruvada, linux-kernel, stable, mingo, bp, dave.hansen,
	rafael.j.wysocki, x86, linux-pm, Nathan Chancellor,
	Nicolas Schier, linux-kbuild

On Wed, Dec 04 2024 at 00:27, Masahiro Yamada wrote:
> On Tue, Dec 3, 2024 at 6:03 AM Thomas Gleixner <tglx@linutronix.de> wrote:
>> > In this mainline kernel, DEFINE_IDTENTRY_SYSVEC()
>> > expands to a normal .text function which is explicitly
>> > annotated 'noinline'.
>>
>> It's not annotated noinline, it's annotated 'noinstr', which puts the
>> code into the .noinstr.text section. That one is indeed covered.
>
> The callsite of local_apic_timer_interrupt() is annotated 'noinline'
> if I correctly understand this line:
>   https://github.com/torvalds/linux/blob/v6.13-rc1/arch/x86/include/asm/idtentry.h#L272

You're right. I got lost in the macro maze and looked at the actual
sysvec_...() part.

>> So yes, the fix is only required for pre 5.8 kernels.
>
> This never occurs on x86 after commit f0178fc01fe46,
> but theoretically this may occur for other architectures.

Correct.

Thanks,

        tglx

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2024-12-03 16:10 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-28 11:18 bisected: [PATCH V4] x86/apic: Always explicitly disarm TSC-deadline timer Sergey Senozhatsky
2024-11-28 11:22 ` Sergey Senozhatsky
2024-11-30 11:21 ` Thomas Gleixner
2024-11-30 11:45   ` Sergey Senozhatsky
2024-12-01 11:17     ` [PATCH] modpost: Add .irqentry.text to OTHER_SECTIONS Thomas Gleixner
2024-12-02  2:02       ` Masahiro Yamada
2024-12-02 21:03         ` Thomas Gleixner
2024-12-03 15:27           ` Masahiro Yamada
2024-12-03 16:10             ` Thomas Gleixner
2024-12-02  4:10       ` Sergey Senozhatsky

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).