Message ID | 1504198860-12951-24-git-send-email-Dave.Martin@arm.com |
---|---|
State | New, archived |
Headers |
Received: (qmail 84783 invoked by alias); 31 Aug 2017 17:02:12 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: <libc-alpha.sourceware.org> List-Unsubscribe: <mailto:libc-alpha-unsubscribe-##L=##H@sourceware.org> List-Subscribe: <mailto:libc-alpha-subscribe@sourceware.org> List-Archive: <http://sourceware.org/ml/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-help@sourceware.org>, <http://sourceware.org/ml/#faqs> Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 84683 invoked by uid 89); 31 Aug 2017 17:02:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:1387, Until, Hx-spam-relays-external:ESMTPA X-HELO: foss.arm.com From: Dave Martin <Dave.Martin@arm.com> To: linux-arm-kernel@lists.infradead.org Cc: Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, Ard Biesheuvel <ard.biesheuvel@linaro.org>, =?UTF-8?q?Alex=20Benn=C3=A9e?= <alex.bennee@linaro.org>, Szabolcs Nagy <szabolcs.nagy@arm.com>, Richard Sandiford <richard.sandiford@arm.com>, kvmarm@lists.cs.columbia.edu, libc-alpha@sourceware.org, linux-arch@vger.kernel.org, Christoffer Dall <christoffer.dall@linaro.org>, Marc Zyngier <marc.zyngier@arm.com> Subject: [PATCH v2 23/28] arm64/sve: KVM: Treat guest SVE use as undefined instruction execution Date: Thu, 31 Aug 2017 18:00:55 +0100 Message-Id: <1504198860-12951-24-git-send-email-Dave.Martin@arm.com> In-Reply-To: <1504198860-12951-1-git-send-email-Dave.Martin@arm.com> References: <1504198860-12951-1-git-send-email-Dave.Martin@arm.com> |
Commit Message
Dave Martin
Aug. 31, 2017, 5 p.m. UTC
When trapping forbidden attempts by a guest to use SVE, we want the
guest to see a trap consistent with SVE not being implemented.
This patch injects an undefined instruction exception into the
guest in response to such an exception.
Signed-off-by: Dave Martin <Dave.Martin@arm.com>
---
arch/arm64/kvm/handle_exit.c | 8 ++++++++
1 file changed, 8 insertions(+)
Comments
Dave Martin <Dave.Martin@arm.com> writes: > When trapping forbidden attempts by a guest to use SVE, we want the > guest to see a trap consistent with SVE not being implemented. > > This patch injects an undefined instruction exception into the > guest in response to such an exception. > > Signed-off-by: Dave Martin <Dave.Martin@arm.com> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> > --- > arch/arm64/kvm/handle_exit.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c > index 17d8a16..e3e42d0 100644 > --- a/arch/arm64/kvm/handle_exit.c > +++ b/arch/arm64/kvm/handle_exit.c > @@ -147,6 +147,13 @@ static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run) > return 1; > } > > +static int handle_sve(struct kvm_vcpu *vcpu, struct kvm_run *run) > +{ > + /* Until SVE is supported for guests: */ > + kvm_inject_undefined(vcpu); > + return 1; > +} > + > static exit_handle_fn arm_exit_handlers[] = { > [0 ... ESR_ELx_EC_MAX] = kvm_handle_unknown_ec, > [ESR_ELx_EC_WFx] = kvm_handle_wfx, > @@ -160,6 +167,7 @@ static exit_handle_fn arm_exit_handlers[] = { > [ESR_ELx_EC_HVC64] = handle_hvc, > [ESR_ELx_EC_SMC64] = handle_smc, > [ESR_ELx_EC_SYS64] = kvm_handle_sys_reg, > + [ESR_ELx_EC_SVE] = handle_sve, > [ESR_ELx_EC_IABT_LOW] = kvm_handle_guest_abort, > [ESR_ELx_EC_DABT_LOW] = kvm_handle_guest_abort, > [ESR_ELx_EC_SOFTSTP_LOW]= kvm_handle_guest_debug, -- Alex Bennée
Dave Martin <Dave.Martin@arm.com> writes: > When trapping forbidden attempts by a guest to use SVE, we want the > guest to see a trap consistent with SVE not being implemented. > > This patch injects an undefined instruction exception into the > guest in response to such an exception. I do wonder if this should be merged with the previous trap enabling patch though? > > Signed-off-by: Dave Martin <Dave.Martin@arm.com> > --- > arch/arm64/kvm/handle_exit.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c > index 17d8a16..e3e42d0 100644 > --- a/arch/arm64/kvm/handle_exit.c > +++ b/arch/arm64/kvm/handle_exit.c > @@ -147,6 +147,13 @@ static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run) > return 1; > } > > +static int handle_sve(struct kvm_vcpu *vcpu, struct kvm_run *run) > +{ > + /* Until SVE is supported for guests: */ > + kvm_inject_undefined(vcpu); > + return 1; > +} > + > static exit_handle_fn arm_exit_handlers[] = { > [0 ... ESR_ELx_EC_MAX] = kvm_handle_unknown_ec, > [ESR_ELx_EC_WFx] = kvm_handle_wfx, > @@ -160,6 +167,7 @@ static exit_handle_fn arm_exit_handlers[] = { > [ESR_ELx_EC_HVC64] = handle_hvc, > [ESR_ELx_EC_SMC64] = handle_smc, > [ESR_ELx_EC_SYS64] = kvm_handle_sys_reg, > + [ESR_ELx_EC_SVE] = handle_sve, > [ESR_ELx_EC_IABT_LOW] = kvm_handle_guest_abort, > [ESR_ELx_EC_DABT_LOW] = kvm_handle_guest_abort, > [ESR_ELx_EC_SOFTSTP_LOW]= kvm_handle_guest_debug, -- Alex Bennée
On Thu, Sep 14, 2017 at 02:31:13PM +0100, Alex Bennée wrote: > > Dave Martin <Dave.Martin@arm.com> writes: > > > When trapping forbidden attempts by a guest to use SVE, we want the > > guest to see a trap consistent with SVE not being implemented. > > > > This patch injects an undefined instruction exception into the > > guest in response to such an exception. > > I do wonder if this should be merged with the previous trap enabling > patch though? Yes, that would make sense now I look at it. Can I keep your Reviewed-by on the combined patch? Cheers ---Dave > > > > > Signed-off-by: Dave Martin <Dave.Martin@arm.com> > > --- > > arch/arm64/kvm/handle_exit.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c > > index 17d8a16..e3e42d0 100644 > > --- a/arch/arm64/kvm/handle_exit.c > > +++ b/arch/arm64/kvm/handle_exit.c > > @@ -147,6 +147,13 @@ static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run) > > return 1; > > } > > > > +static int handle_sve(struct kvm_vcpu *vcpu, struct kvm_run *run) > > +{ > > + /* Until SVE is supported for guests: */ > > + kvm_inject_undefined(vcpu); > > + return 1; > > +} > > + > > static exit_handle_fn arm_exit_handlers[] = { > > [0 ... ESR_ELx_EC_MAX] = kvm_handle_unknown_ec, > > [ESR_ELx_EC_WFx] = kvm_handle_wfx, > > @@ -160,6 +167,7 @@ static exit_handle_fn arm_exit_handlers[] = { > > [ESR_ELx_EC_HVC64] = handle_hvc, > > [ESR_ELx_EC_SMC64] = handle_smc, > > [ESR_ELx_EC_SYS64] = kvm_handle_sys_reg, > > + [ESR_ELx_EC_SVE] = handle_sve, > > [ESR_ELx_EC_IABT_LOW] = kvm_handle_guest_abort, > > [ESR_ELx_EC_DABT_LOW] = kvm_handle_guest_abort, > > [ESR_ELx_EC_SOFTSTP_LOW]= kvm_handle_guest_debug, > > > -- > Alex Bennée > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Dave Martin <Dave.Martin@arm.com> writes: > On Thu, Sep 14, 2017 at 02:31:13PM +0100, Alex Bennée wrote: >> >> Dave Martin <Dave.Martin@arm.com> writes: >> >> > When trapping forbidden attempts by a guest to use SVE, we want the >> > guest to see a trap consistent with SVE not being implemented. >> > >> > This patch injects an undefined instruction exception into the >> > guest in response to such an exception. >> >> I do wonder if this should be merged with the previous trap enabling >> patch though? > > Yes, that would make sense now I look at it. > > Can I keep your Reviewed-by on the combined patch? Sure. > > Cheers > ---Dave > >> >> > >> > Signed-off-by: Dave Martin <Dave.Martin@arm.com> >> > --- >> > arch/arm64/kvm/handle_exit.c | 8 ++++++++ >> > 1 file changed, 8 insertions(+) >> > >> > diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c >> > index 17d8a16..e3e42d0 100644 >> > --- a/arch/arm64/kvm/handle_exit.c >> > +++ b/arch/arm64/kvm/handle_exit.c >> > @@ -147,6 +147,13 @@ static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run) >> > return 1; >> > } >> > >> > +static int handle_sve(struct kvm_vcpu *vcpu, struct kvm_run *run) >> > +{ >> > + /* Until SVE is supported for guests: */ >> > + kvm_inject_undefined(vcpu); >> > + return 1; >> > +} >> > + >> > static exit_handle_fn arm_exit_handlers[] = { >> > [0 ... ESR_ELx_EC_MAX] = kvm_handle_unknown_ec, >> > [ESR_ELx_EC_WFx] = kvm_handle_wfx, >> > @@ -160,6 +167,7 @@ static exit_handle_fn arm_exit_handlers[] = { >> > [ESR_ELx_EC_HVC64] = handle_hvc, >> > [ESR_ELx_EC_SMC64] = handle_smc, >> > [ESR_ELx_EC_SYS64] = kvm_handle_sys_reg, >> > + [ESR_ELx_EC_SVE] = handle_sve, >> > [ESR_ELx_EC_IABT_LOW] = kvm_handle_guest_abort, >> > [ESR_ELx_EC_DABT_LOW] = kvm_handle_guest_abort, >> > [ESR_ELx_EC_SOFTSTP_LOW]= kvm_handle_guest_debug, >> >> >> -- >> Alex Bennée >> >> _______________________________________________ >> linux-arm-kernel mailing list >> linux-arm-kernel@lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel -- Alex Bennée
diff --git a/arch/arm64/kvm/handle_exit.c b/arch/arm64/kvm/handle_exit.c index 17d8a16..e3e42d0 100644 --- a/arch/arm64/kvm/handle_exit.c +++ b/arch/arm64/kvm/handle_exit.c @@ -147,6 +147,13 @@ static int kvm_handle_unknown_ec(struct kvm_vcpu *vcpu, struct kvm_run *run) return 1; } +static int handle_sve(struct kvm_vcpu *vcpu, struct kvm_run *run) +{ + /* Until SVE is supported for guests: */ + kvm_inject_undefined(vcpu); + return 1; +} + static exit_handle_fn arm_exit_handlers[] = { [0 ... ESR_ELx_EC_MAX] = kvm_handle_unknown_ec, [ESR_ELx_EC_WFx] = kvm_handle_wfx, @@ -160,6 +167,7 @@ static exit_handle_fn arm_exit_handlers[] = { [ESR_ELx_EC_HVC64] = handle_hvc, [ESR_ELx_EC_SMC64] = handle_smc, [ESR_ELx_EC_SYS64] = kvm_handle_sys_reg, + [ESR_ELx_EC_SVE] = handle_sve, [ESR_ELx_EC_IABT_LOW] = kvm_handle_guest_abort, [ESR_ELx_EC_DABT_LOW] = kvm_handle_guest_abort, [ESR_ELx_EC_SOFTSTP_LOW]= kvm_handle_guest_debug,