linux-modules.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] modules: Ensure natural alignment for .altinstructions and __bug_table sections
@ 2022-07-08  9:44 Helge Deller
  2022-07-11 16:07 ` Luis Chamberlain
  0 siblings, 1 reply; 2+ messages in thread
From: Helge Deller @ 2022-07-08  9:44 UTC (permalink / raw)
  To: mcgrof, jeyu, linux-modules, linux-kernel, linux-parisc

In the kernel image vmlinux.lds.S linker scripts the .altinstructions
and __bug_table sections are 4- or 8-byte aligned because they hold 32-
and/or 64-bit values.

Most architectures use altinstructions and BUG() or WARN() in modules as
well, but in the module linker script (module.lds.S) those sections are
currently missing. As consequence the linker will store their content
byte-aligned by default, which then can lead to unnecessary unaligned
memory accesses by the CPU when those tables are processed at runtime.

Usually unaligned memory accesses are unnoticed, because either the
hardware (as on x86 CPUs) or in-kernel exception handlers (e.g. on
parisc or sparc) emulate and fix them up at runtime. Nevertheless, such
unaligned accesses introduce a performance penalty and can even crash
the kernel if there is a bug in the unalignment exception handlers
(which happened once to me on the parisc architecture and which is why I
noticed that issue at all).

This patch fixes a non-critical issue and might be backported at any time.
It's trivial and shouldn't introduce any regression because it simply
tells the linker to use a different (8-byte alignment) for those
sections by default.

Signed-off-by: Helge Deller <deller@gmx.de>
Link: https://lore.kernel.org/all/Yr8%2Fgr8e8I7tVX4d@p100/
---
 scripts/module.lds.S | 2 ++
 1 file changed, 2 insertions(+)

--
Changes:
v3: updated commit message
v2: updated commit message

diff --git a/scripts/module.lds.S b/scripts/module.lds.S
index 1d0e1e4dc3d2..3a3aa2354ed8 100644
--- a/scripts/module.lds.S
+++ b/scripts/module.lds.S
@@ -27,6 +27,8 @@ SECTIONS {
 	.ctors			0 : ALIGN(8) { *(SORT(.ctors.*)) *(.ctors) }
 	.init_array		0 : ALIGN(8) { *(SORT(.init_array.*)) *(.init_array) }

+	.altinstructions	0 : ALIGN(8) { KEEP(*(.altinstructions)) }
+	__bug_table		0 : ALIGN(8) { KEEP(*(__bug_table)) }
 	__jump_table		0 : ALIGN(8) { KEEP(*(__jump_table)) }

 	__patchable_function_entries : { *(__patchable_function_entries) }



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

* Re: [PATCH v3] modules: Ensure natural alignment for .altinstructions and __bug_table sections
  2022-07-08  9:44 [PATCH v3] modules: Ensure natural alignment for .altinstructions and __bug_table sections Helge Deller
@ 2022-07-11 16:07 ` Luis Chamberlain
  0 siblings, 0 replies; 2+ messages in thread
From: Luis Chamberlain @ 2022-07-11 16:07 UTC (permalink / raw)
  To: Helge Deller; +Cc: jeyu, linux-modules, linux-kernel, linux-parisc

On Fri, Jul 08, 2022 at 11:44:54AM +0200, Helge Deller wrote:
> In the kernel image vmlinux.lds.S linker scripts the .altinstructions
> and __bug_table sections are 4- or 8-byte aligned because they hold 32-
> and/or 64-bit values.
> 
> Most architectures use altinstructions and BUG() or WARN() in modules as
> well, but in the module linker script (module.lds.S) those sections are
> currently missing. As consequence the linker will store their content
> byte-aligned by default, which then can lead to unnecessary unaligned
> memory accesses by the CPU when those tables are processed at runtime.
> 
> Usually unaligned memory accesses are unnoticed, because either the
> hardware (as on x86 CPUs) or in-kernel exception handlers (e.g. on
> parisc or sparc) emulate and fix them up at runtime. Nevertheless, such
> unaligned accesses introduce a performance penalty and can even crash
> the kernel if there is a bug in the unalignment exception handlers
> (which happened once to me on the parisc architecture and which is why I
> noticed that issue at all).
> 
> This patch fixes a non-critical issue and might be backported at any time.
> It's trivial and shouldn't introduce any regression because it simply
> tells the linker to use a different (8-byte alignment) for those
> sections by default.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>
> Link: https://lore.kernel.org/all/Yr8%2Fgr8e8I7tVX4d@p100/

Thanks! Queued onto modules-next.

  Luis

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

end of thread, other threads:[~2022-07-11 16:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-08  9:44 [PATCH v3] modules: Ensure natural alignment for .altinstructions and __bug_table sections Helge Deller
2022-07-11 16:07 ` Luis Chamberlain

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).