Messages in this thread | | | Date | Wed, 16 Dec 2020 13:38:05 +0100 | From | Jessica Yu <> | Subject | Re: static_branch_enable() does not work from a __init function? |
| |
+++ Peter Zijlstra [16/12/20 10:26 +0100]: >On Wed, Dec 16, 2020 at 03:54:29AM +0000, Dexuan Cui wrote: >> PS, I originally found: in arch/x86/kvm/vmx/vmx.c: vmx_init(), it looks >> like the line "static_branch_enable(&enable_evmcs);" does not take effect >> in a v5.4-based kernel, but does take effect in the v5.10 kernel in the >> same x86-64 virtual machine on Hyper-V, so I made the above test module >> to test static_branch_enable(), and found that static_branch_enable() in >> the test module does not work with both v5.10 and my v5.4 kernel, if the >> __init marker is used.
By the way, it probably works now because there was a workaround merged in v5.10, that mentions this very issue:
commit 064eedf2c50f692088e1418c553084bf9c1432f8 Author: Vitaly Kuznetsov <vkuznets@redhat.com> Date: Wed Oct 14 16:33:46 2020 +0200
KVM: VMX: eVMCS: make evmcs_sanitize_exec_ctrls() work again
It was noticed that evmcs_sanitize_exec_ctrls() is not being executed nowadays despite the code checking 'enable_evmcs' static key looking correct. Turns out, static key magic doesn't work in '__init' section (and it is unclear when things changed) but setup_vmcs_config() is called only once per CPU so we don't really need it to. Switch to checking 'enlightened_vmcs' instead, it is supposed to be in sync with 'enable_evmcs'.
Opportunistically make evmcs_sanitize_exec_ctrls '__init' and drop unneeded extra newline from it.
Reported-by: Yang Weijiang <weijiang.yang@intel.com> Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Message-Id: <20201014143346.2430936-1-vkuznets@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
| |