Commit b6262dd6 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

Merge branch 'kvm-6.15-rc2-fixes' into HEAD

parents 39c57224 bc52ae0a
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1472,8 +1472,13 @@ struct kvm_arch {
	struct once nx_once;

#ifdef CONFIG_X86_64
	/* The number of TDP MMU pages across all roots. */
#ifdef CONFIG_KVM_PROVE_MMU
	/*
	 * The number of TDP MMU pages across all roots.  Used only to sanity
	 * check that KVM isn't leaking TDP MMU pages.
	 */
	atomic64_t tdp_mmu_pages;
#endif

	/*
	 * List of struct kvm_mmu_pages being used as roots.
+3 −5
Original line number Diff line number Diff line
@@ -1427,8 +1427,8 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
		}
		break;
	case 0xa: { /* Architectural Performance Monitoring */
		union cpuid10_eax eax;
		union cpuid10_edx edx;
		union cpuid10_eax eax = { };
		union cpuid10_edx edx = { };

		if (!enable_pmu || !static_cpu_has(X86_FEATURE_ARCH_PERFMON)) {
			entry->eax = entry->ebx = entry->ecx = entry->edx = 0;
@@ -1444,8 +1444,6 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)

		if (kvm_pmu_cap.version)
			edx.split.anythread_deprecated = 1;
		edx.split.reserved1 = 0;
		edx.split.reserved2 = 0;

		entry->eax = eax.full;
		entry->ebx = kvm_pmu_cap.events_mask;
@@ -1763,7 +1761,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
		break;
	/* AMD Extended Performance Monitoring and Debug */
	case 0x80000022: {
		union cpuid_0x80000022_ebx ebx;
		union cpuid_0x80000022_ebx ebx = { };

		entry->ecx = entry->edx = 0;
		if (!enable_pmu || !kvm_cpu_cap_has(X86_FEATURE_PERFMON_V2)) {
+7 −1
Original line number Diff line number Diff line
@@ -40,7 +40,9 @@ void kvm_mmu_uninit_tdp_mmu(struct kvm *kvm)
	kvm_tdp_mmu_invalidate_roots(kvm, KVM_VALID_ROOTS);
	kvm_tdp_mmu_zap_invalidated_roots(kvm, false);

	WARN_ON(atomic64_read(&kvm->arch.tdp_mmu_pages));
#ifdef CONFIG_KVM_PROVE_MMU
	KVM_MMU_WARN_ON(atomic64_read(&kvm->arch.tdp_mmu_pages));
#endif
	WARN_ON(!list_empty(&kvm->arch.tdp_mmu_roots));

	/*
@@ -325,13 +327,17 @@ static void handle_changed_spte(struct kvm *kvm, int as_id, gfn_t gfn,
static void tdp_account_mmu_page(struct kvm *kvm, struct kvm_mmu_page *sp)
{
	kvm_account_pgtable_pages((void *)sp->spt, +1);
#ifdef CONFIG_KVM_PROVE_MMU
	atomic64_inc(&kvm->arch.tdp_mmu_pages);
#endif
}

static void tdp_unaccount_mmu_page(struct kvm *kvm, struct kvm_mmu_page *sp)
{
	kvm_account_pgtable_pages((void *)sp->spt, -1);
#ifdef CONFIG_KVM_PROVE_MMU
	atomic64_dec(&kvm->arch.tdp_mmu_pages);
#endif
}

/**
+4 −0
Original line number Diff line number Diff line
@@ -11786,6 +11786,8 @@ int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
	if (kvm_mpx_supported())
		kvm_load_guest_fpu(vcpu);

	kvm_vcpu_srcu_read_lock(vcpu);

	r = kvm_apic_accept_events(vcpu);
	if (r < 0)
		goto out;
@@ -11799,6 +11801,8 @@ int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu,
		mp_state->mp_state = vcpu->arch.mp_state;

out:
	kvm_vcpu_srcu_read_unlock(vcpu);

	if (kvm_mpx_supported())
		kvm_put_guest_fpu(vcpu);
	vcpu_put(vcpu);
+1 −1
Original line number Diff line number Diff line
@@ -2382,7 +2382,7 @@ static inline bool kvm_is_visible_memslot(struct kvm_memory_slot *memslot)
struct kvm_vcpu *kvm_get_running_vcpu(void);
struct kvm_vcpu * __percpu *kvm_get_running_vcpus(void);

#ifdef CONFIG_HAVE_KVM_IRQ_BYPASS
#if IS_ENABLED(CONFIG_HAVE_KVM_IRQ_BYPASS)
bool kvm_arch_has_irq_bypass(void);
int kvm_arch_irq_bypass_add_producer(struct irq_bypass_consumer *,
			   struct irq_bypass_producer *);
Loading