On 01/06/2018 06:41 AM, Konrad Rzeszutek Wilk wrote: > On Fri, Jan 05, 2018 at 06:12:19PM -0800, Tim Chen wrote: >> From: Tim Chen <tim.c.c...@linux.intel.com> >> From: Andrea Arcangeli <aarca...@redhat.com> >> > >> >> .macro DISABLE_IBRS >> - ALTERNATIVE "jmp .Lskip_\@", "", X86_FEATURE_SPEC_CTRL >> + testl $1, dynamic_ibrs > > On every system call we end up hammering on this 'dynamic_ibrs' > variable. And it looks like it can be flipped via the IPI mechanism.
On system call, we read dynamic_ibrs value (not change it) and flip the IBRS msr only if it dynamic_ibrs is true. We only do global change to all the IBRS msrs on all cpus during the admin request to change its value, serialized by spec_ctrl_mutex. Before we do that, we set dynamic_ibrs to 0, so each cpu no longer do any change to IBRS. Then the IPI happens to update the IBRS MSR values. > > Would it make sense for this to be per-cpu? >