[PATCH v4 3/3] arm64: paravirt: Enable errata based on implementation CPUs
Oliver Upton
oliver.upton at linux.dev
Thu Dec 19 09:40:55 PST 2024
On Thu, Dec 19, 2024 at 10:04:22AM +0000, Marc Zyngier wrote:
> > +void __init pv_target_impl_cpu_init(void)
> > +{
> > + struct arm_smccc_res res;
> > + int index = 0, max_idx = -1;
> > +
> > + /* Check we have already set targets */
> > + if (target_impl_cpu_num)
> > + return;
> > +
> > + do {
> > + arm_smccc_1_1_invoke(ARM_SMCCC_VENDOR_HYP_KVM_DISCOVER_IMPL_CPUS_FUNC_ID,
> > + index, &res);
> > + if (res.a0 == SMCCC_RET_NOT_SUPPORTED)
> > + return;
>
> Can't you probe for this as part of the KVM guest services?
+1, this needs to be predicated on actually detecting the hypervisor as
KVM.
> > +
> > + if (max_idx < 0) {
> > + /* res.a0 should have a valid maximum CPU implementation index */
> > + if (res.a0 >= MAX_TARGET_IMPL_CPUS)
> > + return;
> > + max_idx = res.a0;
> > + }
> > +
> > + target_impl_cpus[index].midr = res.a1;
> > + target_impl_cpus[index].revidr = res.a2;
> > + index++;
> > + } while (index <= max_idx);
> > +
> > + target_impl_cpu_num = index;
> > + pr_info("Number of target implementation CPUs is %d\n", target_impl_cpu_num);
> > +}
> > +
> > int __init pv_time_init(void)
> > {
> > int ret;
>
> Independent of this, I wonder what we should output in sysfs
> (/sys/devices/system/cpu/cpu*/regs/identification/*).
It's a bit crap, but maybe implementation index 0 gets reported through
the 'main' midr/revidr files, otherwise have a directory per
implementation index of midr/revidr.
--
Thanks,
Oliver
More information about the linux-arm-kernel
mailing list