From 0c31e5468fb5c5105fe6f660290c0b4e0669e32d Mon Sep 17 00:00:00 2001 From: yezengruan Date: Wed, 8 Feb 2023 16:03:04 +0800 Subject: [PATCH] kvm: arm64: fix some pvsched bugs virt inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I6E2VI -------------------------------------------- 1. Clear kvm_vcpu_arch::pvsched::base on vcpu reset The guest memory will otherwise be corrupted by KVM if we reboot into an old guest kernel which is **not** aware of the pvsched feature. 2. Fix boot cpu pvsched init abnormal The pv_sched_init was called too early in the boot in setup_arch, hence pvsched_vcpu_state was not initializedfo vcpu 0. Signed-off-by: Zenghui Yu Signed-off-by: yezengruan --- arch/arm64/kernel/paravirt.c | 1 + arch/arm64/kernel/setup.c | 2 -- arch/arm64/kvm/arm.c | 2 ++ 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kernel/paravirt.c b/arch/arm64/kernel/paravirt.c index 45df16e9d8bc..f532534eed53 100644 --- a/arch/arm64/kernel/paravirt.c +++ b/arch/arm64/kernel/paravirt.c @@ -351,3 +351,4 @@ int __init pv_sched_init(void) return 0; } +early_initcall(pv_sched_init); diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c index ddca8d27fca6..9a1ae1a93f63 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c @@ -407,8 +407,6 @@ void __init __no_sanitize_address setup_arch(char **cmdline_p) smp_init_cpus(); smp_build_mpidr_hash(); - pv_sched_init(); - /* Init percpu seeds for random tags after cpus are set up. */ kasan_init_tags(); diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 469f324ce536..85031e6dc899 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -1140,6 +1140,8 @@ static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu, else vcpu->arch.power_off = false; + kvm_arm_pvsched_vcpu_init(&vcpu->arch); + return 0; } -- Gitee