All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Scull <ascull@google.com>
To: Marc Zyngier <maz@kernel.org>
Cc: kernel-team@android.com, catalin.marinas@arm.com,
	linux-arm-kernel@lists.infradead.org,
	Sudeep Holla <sudeep.holla@arm.com>,
	will@kernel.org, kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH v3 16/18] KVM: arm64: nVHE: Migrate hyp interface to SMCCC
Date: Tue, 8 Sep 2020 12:02:22 +0100	[thread overview]
Message-ID: <20200908110222.GF3268721@google.com> (raw)
In-Reply-To: <87o8mhlld4.wl-maz@kernel.org>

On Mon, Sep 07, 2020 at 03:20:07PM +0100, Marc Zyngier wrote:
> On Thu, 03 Sep 2020 14:53:05 +0100,
> Andrew Scull <ascull@google.com> wrote:
> > 
> > Rather than passing arbitrary function pointers to run at hyp, define
> > and equivalent set of SMCCC functions.
> > 
> > Since the SMCCC functions are strongly tied to the original function
> > prototypes, it is not expected for the host to ever call an invalid ID
> > but a warning is raised if this does ever occur.
> > 
> > As __kvm_vcpu_run is used for every switch between the host and a guest,
> > it is explicitly singled out to be identified before the other function
> > IDs to improve the performance of the hot path.
> > 
> > Signed-off-by: Andrew Scull <ascull@google.com>
> > Signed-off-by: David Brazdil <dbrazdil@google.com>
> > ---
> >  arch/arm64/include/asm/kvm_asm.h   |  24 ++++++
> >  arch/arm64/include/asm/kvm_host.h  |  25 ++++---
> >  arch/arm64/kvm/arm.c               |   2 +-
> >  arch/arm64/kvm/hyp.S               |  24 ++----
> >  arch/arm64/kvm/hyp/nvhe/hyp-main.c | 113 +++++++++++++++++++++++++----
> >  5 files changed, 145 insertions(+), 43 deletions(-)
> > 
> > diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
> > index 4bbde3d3989c..4a73f1349151 100644
> > --- a/arch/arm64/include/asm/kvm_asm.h
> > +++ b/arch/arm64/include/asm/kvm_asm.h
> > @@ -38,6 +38,30 @@
> >  
> >  #define __SMCCC_WORKAROUND_1_SMC_SZ 36
> >  
> > +#define KVM_HOST_SMCCC_ID(id)						\
> > +	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\
> > +			   ARM_SMCCC_SMC_64,				\
> > +			   ARM_SMCCC_OWNER_STANDARD_HYP,		\
> > +			   (id))
> > +
> > +#define KVM_HOST_SMCCC_FUNC(name) KVM_HOST_SMCCC_ID(__KVM_HOST_SMCCC_FUNC_##name)
> > +
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_hyp_init			0
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_flush_vm_context		1
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_ipa		2
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid		3
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_local_vmid	4
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_timer_set_cntvoff		5
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_vcpu_run			6
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_enable_ssbs			7
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_get_ich_vtr_el2		8
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_read_vmcr		9
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_write_vmcr		10
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_init_lrs		11
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2		12
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs		13
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs		14
> 
> Wait. This looks broken. How do you distinguish between these and the
> stubs?

The __KVM_HOST_SMCCC_FUNC_* definitions are just the function ID part of
the SMCCC x0 argument. KVM_HOST_SMCCC_ID builds it into a 64-bit
fastcall owner by the hypervisor. The stubs fall into the legacy region
so these don't conflict.
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Scull <ascull@google.com>
To: Marc Zyngier <maz@kernel.org>
Cc: kernel-team@android.com, suzuki.poulose@arm.com,
	catalin.marinas@arm.com, james.morse@arm.com,
	linux-arm-kernel@lists.infradead.org,
	Sudeep Holla <sudeep.holla@arm.com>,
	David Brazdil <dbrazdil@google.com>,
	will@kernel.org, kvmarm@lists.cs.columbia.edu,
	julien.thierry.kdev@gmail.com
Subject: Re: [PATCH v3 16/18] KVM: arm64: nVHE: Migrate hyp interface to SMCCC
Date: Tue, 8 Sep 2020 12:02:22 +0100	[thread overview]
Message-ID: <20200908110222.GF3268721@google.com> (raw)
In-Reply-To: <87o8mhlld4.wl-maz@kernel.org>

On Mon, Sep 07, 2020 at 03:20:07PM +0100, Marc Zyngier wrote:
> On Thu, 03 Sep 2020 14:53:05 +0100,
> Andrew Scull <ascull@google.com> wrote:
> > 
> > Rather than passing arbitrary function pointers to run at hyp, define
> > and equivalent set of SMCCC functions.
> > 
> > Since the SMCCC functions are strongly tied to the original function
> > prototypes, it is not expected for the host to ever call an invalid ID
> > but a warning is raised if this does ever occur.
> > 
> > As __kvm_vcpu_run is used for every switch between the host and a guest,
> > it is explicitly singled out to be identified before the other function
> > IDs to improve the performance of the hot path.
> > 
> > Signed-off-by: Andrew Scull <ascull@google.com>
> > Signed-off-by: David Brazdil <dbrazdil@google.com>
> > ---
> >  arch/arm64/include/asm/kvm_asm.h   |  24 ++++++
> >  arch/arm64/include/asm/kvm_host.h  |  25 ++++---
> >  arch/arm64/kvm/arm.c               |   2 +-
> >  arch/arm64/kvm/hyp.S               |  24 ++----
> >  arch/arm64/kvm/hyp/nvhe/hyp-main.c | 113 +++++++++++++++++++++++++----
> >  5 files changed, 145 insertions(+), 43 deletions(-)
> > 
> > diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
> > index 4bbde3d3989c..4a73f1349151 100644
> > --- a/arch/arm64/include/asm/kvm_asm.h
> > +++ b/arch/arm64/include/asm/kvm_asm.h
> > @@ -38,6 +38,30 @@
> >  
> >  #define __SMCCC_WORKAROUND_1_SMC_SZ 36
> >  
> > +#define KVM_HOST_SMCCC_ID(id)						\
> > +	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL,				\
> > +			   ARM_SMCCC_SMC_64,				\
> > +			   ARM_SMCCC_OWNER_STANDARD_HYP,		\
> > +			   (id))
> > +
> > +#define KVM_HOST_SMCCC_FUNC(name) KVM_HOST_SMCCC_ID(__KVM_HOST_SMCCC_FUNC_##name)
> > +
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_hyp_init			0
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_flush_vm_context		1
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid_ipa		2
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_vmid		3
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_tlb_flush_local_vmid	4
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_timer_set_cntvoff		5
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_vcpu_run			6
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_enable_ssbs			7
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_get_ich_vtr_el2		8
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_read_vmcr		9
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_write_vmcr		10
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_init_lrs		11
> > +#define __KVM_HOST_SMCCC_FUNC___kvm_get_mdcr_el2		12
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs		13
> > +#define __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs		14
> 
> Wait. This looks broken. How do you distinguish between these and the
> stubs?

The __KVM_HOST_SMCCC_FUNC_* definitions are just the function ID part of
the SMCCC x0 argument. KVM_HOST_SMCCC_ID builds it into a 64-bit
fastcall owner by the hypervisor. The stubs fall into the legacy region
so these don't conflict.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2020-09-08 11:02 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-03 13:52 [PATCH v3 00/18] Introduce separate nVHE hyp context Andrew Scull
2020-09-03 13:52 ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 01/18] KVM: arm64: Remove __activate_vm wrapper Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 02/18] KVM: arm64: Remove hyp_panic arguments Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-07 10:21   ` Marc Zyngier
2020-09-07 10:21     ` Marc Zyngier
2020-09-03 13:52 ` [PATCH v3 03/18] KVM: arm64: Remove kvm_host_data_t typedef Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 04/18] KVM: arm64: Restrict symbol aliasing to outside nVHE Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-07 10:38   ` Marc Zyngier
2020-09-07 10:38     ` Marc Zyngier
2020-09-08 10:13     ` Andrew Scull
2020-09-08 10:13       ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 05/18] KVM: arm64: Save chosen hyp vector to a percpu variable Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 06/18] KVM: arm64: nVHE: Use separate vector for the host Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-07 11:38   ` Marc Zyngier
2020-09-07 11:38     ` Marc Zyngier
2020-09-08 10:29     ` Andrew Scull
2020-09-08 10:29       ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 07/18] KVM: arm64: nVHE: Don't consume host SErrors with ESB Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-07 11:46   ` Marc Zyngier
2020-09-07 11:46     ` Marc Zyngier
2020-09-03 13:52 ` [PATCH v3 08/18] KVM: arm64: Introduce hyp context Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-07 13:29   ` Marc Zyngier
2020-09-07 13:29     ` Marc Zyngier
2020-09-08 10:52     ` Andrew Scull
2020-09-08 10:52       ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 09/18] KVM: arm64: Update context references from host to hyp Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-03 13:52 ` [PATCH v3 10/18] KVM: arm64: Restore hyp when panicking in guest context Andrew Scull
2020-09-03 13:52   ` Andrew Scull
2020-09-03 13:53 ` [PATCH v3 11/18] KVM: arm64: Share context save and restore macros Andrew Scull
2020-09-03 13:53   ` Andrew Scull
2020-09-03 13:53 ` [PATCH v3 12/18] KVM: arm64: nVHE: Switch to hyp context for EL2 Andrew Scull
2020-09-03 13:53   ` Andrew Scull
2020-09-07 13:02   ` Marc Zyngier
2020-09-07 13:02     ` Marc Zyngier
2020-09-08 10:42     ` Andrew Scull
2020-09-08 10:42       ` Andrew Scull
2020-09-03 13:53 ` [PATCH v3 13/18] KVM: arm64: nVHE: Handle hyp panics Andrew Scull
2020-09-03 13:53   ` Andrew Scull
2020-09-07 13:24   ` Marc Zyngier
2020-09-07 13:24     ` Marc Zyngier
2020-09-03 13:53 ` [PATCH v3 14/18] smccc: Cast arguments to unsigned long Andrew Scull
2020-09-03 13:53   ` Andrew Scull
2020-09-07 13:33   ` Marc Zyngier
2020-09-07 13:33     ` Marc Zyngier
2020-09-08 10:58     ` Andrew Scull
2020-09-08 10:58       ` Andrew Scull
2020-09-03 13:53 ` [PATCH v3 15/18] KVM: arm64: nVHE: Pass pointers consistently to hyp-init Andrew Scull
2020-09-03 13:53   ` Andrew Scull
2020-09-03 13:53 ` [PATCH v3 16/18] KVM: arm64: nVHE: Migrate hyp interface to SMCCC Andrew Scull
2020-09-03 13:53   ` Andrew Scull
2020-09-07 13:47   ` Marc Zyngier
2020-09-07 13:47     ` Marc Zyngier
2020-09-07 14:20   ` Marc Zyngier
2020-09-07 14:20     ` Marc Zyngier
2020-09-08 11:02     ` Andrew Scull [this message]
2020-09-08 11:02       ` Andrew Scull
2020-09-09  8:30       ` Andrew Scull
2020-09-09  8:30         ` Andrew Scull
2020-09-03 13:53 ` [PATCH v3 17/18] KVM: arm64: nVHE: Migrate hyp-init " Andrew Scull
2020-09-03 13:53   ` Andrew Scull
2020-09-03 13:53 ` [PATCH v3 18/18] KVM: arm64: nVHE: Fix pointers during SMCCC convertion Andrew Scull
2020-09-03 13:53   ` Andrew Scull

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=20200908110222.GF3268721@google.com \
    --to=ascull@google.com \
    --cc=catalin.marinas@arm.com \
    --cc=kernel-team@android.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=maz@kernel.org \
    --cc=sudeep.holla@arm.com \
    --cc=will@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.