[PATCH v5 21/24] KVM: arm64: Inject recorded guest interrupts
Oliver Upton
oupton at kernel.org
Tue Dec 9 14:52:01 PST 2025
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
More information about the linux-arm-kernel
mailing list