Re: [PATCH 6/6] x86/gsseg: use the LKGS instruction if available for load_gs_index()

From: Peter Zijlstra
Date: Fri Oct 07 2022 - 15:26:00 EST


On Fri, Oct 07, 2022 at 06:01:06PM +0000, Li, Xin3 wrote:
> > > + alternative_io("1: call asm_load_gs_index\n"
> > > + ".pushsection \".fixup\",\"ax\"\n"
> > > + "2: xorl %k[sel], %k[sel]\n"
> > > + " jmp 1b\n"
> > > + ".popsection\n"
> > > + _ASM_EXTABLE(1b, 2b),
> > > + _ASM_BYTES(0x3e) LKGS_DI,
> > > + X86_FEATURE_LKGS,
> > > + ASM_OUTPUT2([sel] "+D" (sel), ASM_CALL_CONSTRAINT),
> > > + ASM_NO_INPUT_CLOBBER(_ASM_AX));
> > > }
> >
> > I'm very sure none of this was tested... the .fixup section hasn't existed for
> > almost a year now.
>
> Weird, did you ever check a kernel dump?

$ readelf -WS defconfig-build/vmlinux | grep fixup
[ 5] .pci_fixup PROGBITS ffffffff826a5350 18a5350 003570 00 A 0 0 16
[ 6] .rela.pci_fixup RELA 0000000000000000 360c388 005028 18 I 60 5 8

In fact, when I add one I get:

ld: warning: orphan section `.fixup' from `arch/x86/kernel/traps.o' being placed in section `.fixup'