x86/kvm: Serialize L1D flush parameter setter
Writes to the parameter files are not serialized at the sysfs core level, so local serialization is required. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Jiri Kosina <jkosina@suse.cz> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Josh Poimboeuf <jpoimboe@redhat.com> Link: https://lkml.kernel.org/r/20180713142322.873642605@linutronix.de
This commit is contained in:
parent
4c6523ec59
commit
dd4bfa739a
|
@ -193,6 +193,7 @@ extern const ulong vmx_return;
|
|||
|
||||
static DEFINE_STATIC_KEY_FALSE(vmx_l1d_should_flush);
|
||||
static DEFINE_STATIC_KEY_FALSE(vmx_l1d_flush_always);
|
||||
static DEFINE_MUTEX(vmx_l1d_flush_mutex);
|
||||
|
||||
/* Storage for pre module init parameter parsing */
|
||||
static enum vmx_l1d_flush_state __read_mostly vmentry_l1d_flush_param = VMENTER_L1D_FLUSH_AUTO;
|
||||
|
@ -257,7 +258,7 @@ static int vmentry_l1d_flush_parse(const char *s)
|
|||
|
||||
static int vmentry_l1d_flush_set(const char *s, const struct kernel_param *kp)
|
||||
{
|
||||
int l1tf;
|
||||
int l1tf, ret;
|
||||
|
||||
if (!boot_cpu_has(X86_BUG_L1TF))
|
||||
return 0;
|
||||
|
@ -277,7 +278,10 @@ static int vmentry_l1d_flush_set(const char *s, const struct kernel_param *kp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
return vmx_setup_l1d_flush(l1tf);
|
||||
mutex_lock(&vmx_l1d_flush_mutex);
|
||||
ret = vmx_setup_l1d_flush(l1tf);
|
||||
mutex_unlock(&vmx_l1d_flush_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int vmentry_l1d_flush_get(char *s, const struct kernel_param *kp)
|
||||
|
|
Loading…
Reference in New Issue