Re: [PATCH v2 14/16] arm64: Add a capability for FEAT_ECV

From: Will Deacon
Date: Thu Sep 30 2021 - 04:31:05 EST


On Thu, Sep 30, 2021 at 08:42:56AM +0100, Marc Zyngier wrote:
> On Wed, 29 Sep 2021 17:03:30 +0100,
> Will Deacon <will@xxxxxxxxxx> wrote:
> >
> > On Wed, Sep 22, 2021 at 10:19:39PM +0100, Marc Zyngier wrote:
> > > Add a new capability to detect the Enhanced Counter Virtualization
> > > feature (FEAT_ECV).
> > >
> > > Reviewed-by: Oliver Upton <oupton@xxxxxxxxxx>
> > > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>
> > > ---
> > > arch/arm64/kernel/cpufeature.c | 10 ++++++++++
> > > arch/arm64/tools/cpucaps | 1 +
> > > 2 files changed, 11 insertions(+)
> > >
> > > diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
> > > index f8a3067d10c6..26b11ce8fff6 100644
> > > --- a/arch/arm64/kernel/cpufeature.c
> > > +++ b/arch/arm64/kernel/cpufeature.c
> > > @@ -1926,6 +1926,16 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
> > > .sign = FTR_UNSIGNED,
> > > .min_field_value = 1,
> > > },
> > > + {
> > > + .desc = "Enhanced Counter Virtualization",
> > > + .capability = ARM64_HAS_ECV,
> > > + .type = ARM64_CPUCAP_SYSTEM_FEATURE,
> > > + .matches = has_cpuid_feature,
> > > + .sys_reg = SYS_ID_AA64MMFR0_EL1,
> > > + .field_pos = ID_AA64MMFR0_ECV_SHIFT,
> > > + .sign = FTR_UNSIGNED,
> > > + .min_field_value = 1,
> > > + },
> >
> > Could we add a HWCAP for this and change the field to FTR_VISIBLE, please? I
> > know most users of the counter are indirected via the vDSO, but there are
> > some users out there using the counter directly and it would save them
> > having to probe via SIGILL if there was a hwcap available.
>
> Fair enough, I'll add that.

Thanks!

> The problem of the vdso remains though, and is by far the most common
> user of the feature. Any idea on how to handle it? Patching the vdso
> is ugly, and I'd rather avoid it.
>
> I briefly looked at using ifunc, but it is likely that the indirection
> would add an extra cost. Are we OK with that?

The vDSO is still miles faster than a system call, so I'd be inclined to
leave it as-is for the time being. I suspect that use-cases which can't
stomach the cost of the ISB can't stomach the cost of the vDSO at all.

Will