| From foo@baz Tue Aug 14 16:14:56 CEST 2018 |
| From: Nicolai Stange <nstange@suse.de> |
| Date: Sat, 21 Jul 2018 22:25:00 +0200 |
| Subject: x86/KVM/VMX: Replace 'vmx_l1d_flush_always' with 'vmx_l1d_flush_cond' |
| |
| From: Nicolai Stange <nstange@suse.de> |
| |
| commit 427362a142441f08051369db6fbe7f61c73b3dca upstream |
| |
| The vmx_l1d_flush_always static key is only ever evaluated if |
| vmx_l1d_should_flush is enabled. In that case however, there are only two |
| L1d flushing modes possible: "always" and "conditional". |
| |
| The "conditional" mode's implementation tends to require more sophisticated |
| logic than the "always" mode. |
| |
| Avoid inverted logic by replacing the 'vmx_l1d_flush_always' static key |
| with a 'vmx_l1d_flush_cond' one. |
| |
| There is no change in functionality. |
| |
| Signed-off-by: Nicolai Stange <nstange@suse.de> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/x86/kvm/vmx.c | 10 +++++----- |
| 1 file changed, 5 insertions(+), 5 deletions(-) |
| |
| --- a/arch/x86/kvm/vmx.c |
| +++ b/arch/x86/kvm/vmx.c |
| @@ -190,7 +190,7 @@ module_param(ple_window_max, int, S_IRUG |
| 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_STATIC_KEY_FALSE(vmx_l1d_flush_cond); |
| static DEFINE_MUTEX(vmx_l1d_flush_mutex); |
| |
| /* Storage for pre module init parameter parsing */ |
| @@ -264,10 +264,10 @@ static int vmx_setup_l1d_flush(enum vmx_ |
| else |
| static_branch_disable(&vmx_l1d_should_flush); |
| |
| - if (l1tf == VMENTER_L1D_FLUSH_ALWAYS) |
| - static_branch_enable(&vmx_l1d_flush_always); |
| + if (l1tf == VMENTER_L1D_FLUSH_COND) |
| + static_branch_enable(&vmx_l1d_flush_cond); |
| else |
| - static_branch_disable(&vmx_l1d_flush_always); |
| + static_branch_disable(&vmx_l1d_flush_cond); |
| return 0; |
| } |
| |
| @@ -8666,7 +8666,7 @@ static void vmx_l1d_flush(struct kvm_vcp |
| * This code is only executed when the the flush mode is 'cond' or |
| * 'always' |
| */ |
| - if (!static_branch_unlikely(&vmx_l1d_flush_always)) { |
| + if (static_branch_likely(&vmx_l1d_flush_cond)) { |
| /* |
| * Clear the flush bit, it gets set again either from |
| * vcpu_run() or from one of the unsafe VMEXIT |