On Tue, 18 Jan 2022 at 12:21, Russell King (Oracle) <linux@xxxxxxxxxxxxxxx> wrote: > > On Tue, Jan 18, 2022 at 11:27:56AM +0100, Ard Biesheuvel wrote: > > When building for Thumb2, the .alt.smp.init sections that are emitted by > > the ALT_UP() patching code may not be 32-bit aligned, even though the > > fixup_smp_on_up() routine expects that. This results in alignment faults > > at module load time, which need to be fixed up by the fault handler. > > > > So let's align those sections explicitly, and avoid this from occurring. > > Are you seeing a problem that this patch fixes? > > This really should not matter. .alt.smp.init contents are always a whole > number of 32-bit words. These are gathered by the linker into the > .init.smpalt section, so the contents should always be a whole number > of 32-bit words. > > This follows the .init.tagtable section, which is also a 32-bit word > aligned structure built by the linker... which follows the > .init.arch.info section and .init.proc.info sections which all have > 32-bit alignment requirements. > This only affects modules, not the core kernel. The .alt.smp.init section in a module is visible to the module loader, which means the module loader will make no attempt to position it at a 32-bit aligned address if the ELF alignment is only 16 bits, which appears to be the default in my Thumb2 build [gcc version 10.3.1 20211117 (Debian 10.3.0-13)] I only spotted this because do_fixup_smp_on_up() was shown as the most recent in-kernel fixup location in /proc/cpu/alignment.