Re: [PATCH v3 4/6] x86/gsseg: move local_irq_save/restore() into asm_load_gs_index()

From: Thomas Gleixner
Date: Sat Oct 15 2022 - 04:52:05 EST


On Thu, Oct 13 2022 at 13:01, Xin Li wrote:
> From: "H. Peter Anvin (Intel)" <hpa@xxxxxxxxx>
>
> The need to disable/enable interrupts around asm_load_gs_index() is a
> consequence of the implementation. Prepare for using the LKGS
> instruction, which is locally atomic and therefore doesn't need
> interrupts disabled.

*Shudder*. We want less ASM not more.

> static inline void native_load_gs_index(unsigned int selector)
> {
> - unsigned long flags;
> -
> - local_irq_save(flags);
> asm_load_gs_index(selector);
> - local_irq_restore(flags);
> }

static inline void native_load_gs_index(unsigned int selector)
{
unsigned long flags;

if (cpu_feature_enabled(LKGS)) {
native_lkgs(selector);
} else {
local_irq_save(flags);
asm_load_gs_index(selector);
local_irq_restore(flags);
}
}

For paravirt enabled kernels we want during feature detection:

if (cpu_feature_enabled(LKGS)))
pv_ops.cpu.load_gs_index = native_lkgs;

No?

Thanks,

tglx