In no situation should KVM be injecting a "recorded" IRQ. The overflow condition of the PMU is well defined in the architecture and we should implement *exactly* that.
On Tue, Dec 09, 2025 at 08:51:18PM +0000, Colton Lewis wrote:
+/**
- kvm_pmu_part_overflow_status() - Determine if any guest counters have overflowed
- @vcpu: Ponter to struct kvm_vcpu
- Determine if any guest counters have overflowed and therefore an
- IRQ needs to be injected into the guest.
- Return: True if there was an overflow, false otherwise
- */
+bool kvm_pmu_part_overflow_status(struct kvm_vcpu *vcpu) +{
- struct arm_pmu *pmu = vcpu->kvm->arch.arm_pmu;
- u64 mask = kvm_pmu_guest_counter_mask(pmu);
- u64 pmovs = __vcpu_sys_reg(vcpu, PMOVSSET_EL0);
- u64 pmint = read_pmintenset();
- u64 pmcr = read_pmcr();
How do we know that the vPMU has been loaded on the CPU at this point?
- return (pmcr & ARMV8_PMU_PMCR_E) && (mask & pmovs & pmint);
+}
I'd rather reuse kvm_pmu_overflow_status(), relying on the accessors to abstract away the implementation / location of the guest PMU context.
Thanks, Oliver