From: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
To: Marc Zyngier <maz@kernel.org>
Cc: "kvmarm@lists.linux.dev" <kvmarm@lists.linux.dev>,
"oliver.upton@linux.dev" <oliver.upton@linux.dev>,
"james.morse@arm.com" <james.morse@arm.com>,
"joey.gouly@arm.com" <joey.gouly@arm.com>,
"suzuki.poulose@arm.com" <suzuki.poulose@arm.com>,
yuzenghui <yuzenghui@huawei.com>,
"Wangzhou (B)" <wangzhou1@hisilicon.com>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
Linuxarm <linuxarm@huawei.com>
Subject: RE: [PATCH] KVM: arm64: Make L1Ip feature in CTR_EL0 writable from userspace
Date: Mon, 21 Oct 2024 07:23:24 +0000 [thread overview]
Message-ID: <ec2aeb95ffb54bd59d81f481ef67fa1f@huawei.com> (raw)
In-Reply-To: <86h6994smf.wl-maz@kernel.org>
Hi Marc,
> -----Original Message-----
> From: Marc Zyngier <maz@kernel.org>
> Sent: Friday, October 18, 2024 11:23 AM
> To: Shameerali Kolothum Thodi <shameerali.kolothum.thodi@huawei.com>
> Cc: kvmarm@lists.linux.dev; oliver.upton@linux.dev;
> james.morse@arm.com; joey.gouly@arm.com; suzuki.poulose@arm.com;
> yuzenghui <yuzenghui@huawei.com>; Wangzhou (B)
> <wangzhou1@hisilicon.com>; linux-arm-kernel@lists.infradead.org;
> Linuxarm <linuxarm@huawei.com>
> Subject: Re: [PATCH] KVM: arm64: Make L1Ip feature in CTR_EL0 writable
> from userspace
>
> On Thu, 17 Oct 2024 09:59:25 +0100,
> Shameer Kolothum <shameerali.kolothum.thodi@huawei.com> wrote:
> >
> > Only allow userspace to set VIPT(0b10) or PIPT(0b11) for L1Ip based on
> > what hardware reports as both AIVIVT (0b01) and VPIPT (0b00) are
> > documented as reserved.
> >
> > Using a VIPT for Guest where hardware reports PIPT may lead to over
> > invalidation, but is still correct. Hence, we can allow downgrading
> > PIPT to VIPT, but not the other way around.
> >
> > Signed-off-by: Shameer Kolothum
> <shameerali.kolothum.thodi@huawei.com>
> > ---
> > This is based on the dicsussion here[0].
> >
> https://lore.kernel.org/kvmarm/0db19a081d9e41f08b0043baeef16f16@hua
> wei.com/
> >
> > Also depends on Joey's series[1] as it make use of the ID_FILTERED macro.
> >
> > I am not sure we need to explicitly make the ftr type as FTR_LOWER_SAFE
> > in kvm_arm64_ftr_safe_value() or as mentioned below can depend on
> > arm64_ftr_safe_value() for this ftr bits.
>
> I think relying on the arch code for this is the right thing to
> do. This was designed to cope with heterogeneous systems where you
> could have both PIPT and VIPT caches in the system, and we don't allow
> a late comer to be VIPT if we're decided on PIPT (hence the
> FTR_EXACT).
Ok. I will keep it as it is.
>
> >
> > Please take a look and let me know.
> >
> > Thanks,
> > Shameer
> >
> > [0]
> https://lore.kernel.org/kvmarm/0db19a081d9e41f08b0043baeef16f16@hua
> wei.com/
> > [1] https://lore.kernel.org/kvmarm/20241015133923.3910916-1-
> joey.gouly@arm.com/
> > ---
> > arch/arm64/kvm/sys_regs.c | 32 ++++++++++++++++++++++++++++----
> > 1 file changed, 28 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
> > index d97ccf1c1558..819dcb63febd 100644
> > --- a/arch/arm64/kvm/sys_regs.c
> > +++ b/arch/arm64/kvm/sys_regs.c
> > @@ -1872,6 +1872,28 @@ static int set_id_aa64pfr1_el1(struct kvm_vcpu
> *vcpu,
> > return set_id_reg(vcpu, rd, user_val);
> > }
> >
> > +static int set_ctr_el0(struct kvm_vcpu *vcpu,
> > + const struct sys_reg_desc *rd, u64 user_val)
> > +{
> > + u8 user_L1Ip = SYS_FIELD_GET(CTR_EL0, L1Ip, user_val);
> > +
> > + /*
> > + * Both AIVIVT (0b01) and VPIPT (0b00) are documented as reserved.
> > + * Hence only allow to set VIPT(0b10) or PIPT(0b11) for L1Ip based
> > + * on what hardware reports.
> > + *
> > + * Using a VIPT software model on PIPT will lead to over
> invalidation,
> > + * but still correct. Hence, we can allow downgrading PIPT to VIPT,
> > + * but not the other way around. This is handled via
> arm64_ftr_safe_value()
> > + * as CTR_EL0 ftr_bits has L1Ip field type FTR_EXACT with safe value
> > + * set as VIPT)
> > + */
> > + if (user_L1Ip < CTR_EL0_L1Ip_VIPT)
> > + return -EINVAL;
>
> I'm not overly fond of this, because the ordering of cache types is
> arbitrary (it really is an enumeration). I would rather see the
> allowed cache types explicitly listed. It doesn't change a thing, but
> makes it all much more readable.
Does that mean, just check explicitly rather than user_L1Ip < CTR_EL0_L1Ip_VIPT ?
something like,
If ((user_L1Ip != CTR_EL0_L1Ip_VIPT) && (user_L1Ip != CTR_EL0_L1Ip_PIPT)
return -EINVAL;
But isn't this cache policy type values described in ARM ARM ? So not sure
how they can end up having different enum values.
Or you meant something totally different and I missed it!
Thanks,
Shameer
next prev parent reply other threads:[~2024-10-21 7:27 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-17 8:59 [PATCH] KVM: arm64: Make L1Ip feature in CTR_EL0 writable from userspace Shameer Kolothum
2024-10-18 8:38 ` Sebastian Ott
2024-10-18 10:23 ` Marc Zyngier
2024-10-21 7:23 ` Shameerali Kolothum Thodi [this message]
2024-10-21 8:19 ` Marc Zyngier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ec2aeb95ffb54bd59d81f481ef67fa1f@huawei.com \
--to=shameerali.kolothum.thodi@huawei.com \
--cc=james.morse@arm.com \
--cc=joey.gouly@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linuxarm@huawei.com \
--cc=maz@kernel.org \
--cc=oliver.upton@linux.dev \
--cc=suzuki.poulose@arm.com \
--cc=wangzhou1@hisilicon.com \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).