Re: static_branch_enable() does not work from a __init function?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



+++ 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@xxxxxxxxxx>
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@xxxxxxxxx>
   Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx>
   Message-Id: <20201014143346.2430936-1-vkuznets@xxxxxxxxxx>
   Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux