Consolidate all AVIC-related setup in avic_hardware_setup() to match other SVM setup functions (sev_hardware_setup() et al). No functional change. Signed-off-by: Naveen N Rao (AMD) --- arch/x86/kvm/svm/svm.h | 3 ++- arch/x86/kvm/svm/avic.c | 17 +++++++++++------ arch/x86/kvm/svm/svm.c | 4 ++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h index 3c7f208b7935..ec2e275829a6 100644 --- a/arch/x86/kvm/svm/svm.h +++ b/arch/x86/kvm/svm/svm.h @@ -48,6 +48,7 @@ extern bool npt_enabled; extern int nrips; extern int vgif; extern bool intercept_smi; +extern bool avic; extern bool x2avic_enabled; extern bool vnmi; extern int lbrv; @@ -801,7 +802,7 @@ extern struct kvm_x86_nested_ops svm_nested_ops; BIT(APICV_INHIBIT_REASON_PHYSICAL_ID_TOO_BIG) \ ) -bool avic_hardware_setup(void); +void avic_hardware_setup(void); int avic_ga_log_notifier(u32 ga_tag); void avic_vm_destroy(struct kvm *kvm); int avic_vm_init(struct kvm *kvm); diff --git a/arch/x86/kvm/svm/avic.c b/arch/x86/kvm/svm/avic.c index 3faed85fcacd..620583b2ddd1 100644 --- a/arch/x86/kvm/svm/avic.c +++ b/arch/x86/kvm/svm/avic.c @@ -1096,20 +1096,23 @@ void avic_vcpu_unblocking(struct kvm_vcpu *vcpu) * - Hypervisor can support both xAVIC and x2AVIC in the same guest. * - The mode can be switched at run-time. */ -bool avic_hardware_setup(void) +void avic_hardware_setup(void) { - if (!npt_enabled) - return false; + bool enable = false; + + if (!avic || !npt_enabled) + goto out; if (!boot_cpu_has(X86_FEATURE_AVIC) && !force_avic) - return false; + goto out; if (cc_platform_has(CC_ATTR_HOST_SEV_SNP) && !boot_cpu_has(X86_FEATURE_HV_INUSE_WR_ALLOWED)) { pr_warn("AVIC disabled: missing HvInUseWrAllowed on SNP-enabled system\n"); - return false; + goto out; } + enable = true; pr_info("AVIC enabled%s\n", cpu_feature_enabled(X86_FEATURE_AVIC) ? "" : " (forced, your system may crash and burn)"); @@ -1128,5 +1131,7 @@ bool avic_hardware_setup(void) amd_iommu_register_ga_log_notifier(&avic_ga_log_notifier); - return true; +out: + avic = enable; + enable_apicv = avic; } diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index cb4f81be0024..d5854e0bc799 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -162,7 +162,7 @@ module_param(tsc_scaling, int, 0444); * enable / disable AVIC. Because the defaults differ for APICv * support between VMX and SVM we cannot use module_param_named. */ -static bool avic; +bool avic; module_param(avic, bool, 0444); module_param(enable_ipiv, bool, 0444); @@ -5406,7 +5406,7 @@ static __init int svm_hardware_setup(void) goto err; } - enable_apicv = avic = avic && avic_hardware_setup(); + avic_hardware_setup(); if (!enable_apicv) { enable_ipiv = false; -- 2.50.1