Message ID | 20210103140104.3853922-1-arnd@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: arm64: remove incorrect __init annotation | expand |
On Sun, 03 Jan 2021 14:00:50 +0000, Arnd Bergmann <arnd@kernel.org> wrote: > > From: Arnd Bergmann <arnd@arndb.de> > > When hyp_cpu_pm_exit() is not inlined, it causes a link time warning: > > WARNING: modpost: vmlinux.o(.text+0x39974): Section mismatch in reference from the function kvm_arch_init() to the function .init.text:hyp_cpu_pm_exit() > The function kvm_arch_init() references > the function __init hyp_cpu_pm_exit(). > This is often because kvm_arch_init lacks a __init > annotation or the annotation of hyp_cpu_pm_exit is wrong. > > This is not only called at boot time, so remove the annotation > to prevent undefined behavior in case it gets called after being > freed. It *is* only called at boot time (despite these functions being called from module_init(), KVM cannot be built as a module on arm64). The annotations are wrong nonetheless. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Posted here [1], and queued for the next batch of fixes. M. [1] https://lore.kernel.org/linux-arm-kernel/20201223120854.255347-1-maz@kernel.org
On Sun, Jan 3, 2021 at 5:43 PM Marc Zyngier <maz@kernel.org> wrote: > > On Sun, 03 Jan 2021 14:00:50 +0000, > Arnd Bergmann <arnd@kernel.org> wrote: > > > > From: Arnd Bergmann <arnd@arndb.de> > > > > When hyp_cpu_pm_exit() is not inlined, it causes a link time warning: > > > > WARNING: modpost: vmlinux.o(.text+0x39974): Section mismatch in reference from the function kvm_arch_init() to the function .init.text:hyp_cpu_pm_exit() > > The function kvm_arch_init() references > > the function __init hyp_cpu_pm_exit(). > > This is often because kvm_arch_init lacks a __init > > annotation or the annotation of hyp_cpu_pm_exit is wrong. > > > > This is not only called at boot time, so remove the annotation > > to prevent undefined behavior in case it gets called after being > > freed. > > It *is* only called at boot time (despite these functions being called > from module_init(), KVM cannot be built as a module on arm64). Ah, I see where I went wrong: I looked at the callers of kvm_arch_init_vm() instead of kvm_arch_init(). Arnd
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 6e637d2b4cfb..71a49eae9ea0 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -1574,12 +1574,12 @@ static struct notifier_block hyp_init_cpu_pm_nb = { .notifier_call = hyp_init_cpu_pm_notifier, }; -static void __init hyp_cpu_pm_init(void) +static void hyp_cpu_pm_init(void) { if (!is_protected_kvm_enabled()) cpu_pm_register_notifier(&hyp_init_cpu_pm_nb); } -static void __init hyp_cpu_pm_exit(void) +static void hyp_cpu_pm_exit(void) { if (!is_protected_kvm_enabled()) cpu_pm_unregister_notifier(&hyp_init_cpu_pm_nb);