Commit a9095e4f authored by Sean Christopherson's avatar Sean Christopherson
Browse files

KVM: SVM: Update "APICv in x2APIC without x2AVIC" in avic.c, not svm.c



Set the "allow_apicv_in_x2apic_without_x2apic_virtualization" flag as part
of avic_hardware_setup() instead of handling in svm_hardware_setup(), and
make x2avic_enabled local to avic.c (setting the flag was the only use in
svm.c).

Tag avic_hardware_setup() with __init as necessary (it should have been
tagged __init long ago).

No functional change intended (aside from the side effects of tagging
avic_hardware_setup() with __init).

Acked-by: default avatarNaveen N Rao (AMD) <naveen@kernel.org>
Tested-by: default avatarNaveen N Rao (AMD) <naveen@kernel.org>
Link: https://lore.kernel.org/r/20250919215934.1590410-4-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent eb44ea6a
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ static DEFINE_HASHTABLE(svm_vm_data_hash, SVM_VM_DATA_HASH_BITS);
static u32 next_vm_id = 0;
static bool next_vm_id_wrapped = 0;
static DEFINE_SPINLOCK(svm_vm_data_hash_lock);
bool x2avic_enabled;
static bool x2avic_enabled;


static void avic_set_x2apic_msr_interception(struct vcpu_svm *svm,
@@ -1147,7 +1147,7 @@ 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)
bool __init avic_hardware_setup(void)
{
	if (!npt_enabled)
		return false;
@@ -1182,6 +1182,8 @@ bool avic_hardware_setup(void)
	x2avic_enabled = boot_cpu_has(X86_FEATURE_X2AVIC);
	if (x2avic_enabled)
		pr_info("x2AVIC enabled\n");
	else
		svm_x86_ops.allow_apicv_in_x2apic_without_x2apic_virtualization = true;

	/*
	 * Disable IPI virtualization for AMD Family 17h CPUs (Zen1 and Zen2)
+0 −2
Original line number Diff line number Diff line
@@ -5337,8 +5337,6 @@ static __init int svm_hardware_setup(void)
		svm_x86_ops.vcpu_blocking = NULL;
		svm_x86_ops.vcpu_unblocking = NULL;
		svm_x86_ops.vcpu_get_apicv_inhibit_reasons = NULL;
	} else if (!x2avic_enabled) {
		svm_x86_ops.allow_apicv_in_x2apic_without_x2apic_virtualization = true;
	}

	if (vls) {
+1 −2
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ extern bool npt_enabled;
extern int nrips;
extern int vgif;
extern bool intercept_smi;
extern bool x2avic_enabled;
extern bool vnmi;
extern int lbrv;

@@ -804,7 +803,7 @@ extern struct kvm_x86_nested_ops svm_nested_ops;
	BIT(APICV_INHIBIT_REASON_PHYSICAL_ID_TOO_BIG)	\
)

bool avic_hardware_setup(void);
bool __init 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);