All of lore.kernel.org
 help / color / mirror / Atom feed
From: Raghavendra Rao Ananta <rananta@google.com>
To: Oliver Upton <oupton@google.com>
Cc: Marc Zyngier <maz@kernel.org>, Andrew Jones <drjones@redhat.com>,
	James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Peter Shier <pshier@google.com>,
	Ricardo Koller <ricarkol@google.com>,
	Reiji Watanabe <reijiw@google.com>,
	Jing Zhang <jingzhangos@google.com>,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH v4 06/13] KVM: arm64: Add standard hypervisor firmware register
Date: Mon, 14 Mar 2022 17:23:27 -0700	[thread overview]
Message-ID: <CAJHc60yJQ4VOq9OoyGncL07bfvQuz0mPYXCVf2WhL-8QzM5-nA@mail.gmail.com> (raw)
In-Reply-To: <Yi+bVM742+9W4TYj@google.com>

On Mon, Mar 14, 2022 at 12:45 PM Oliver Upton <oupton@google.com> wrote:
>
> On Thu, Feb 24, 2022 at 05:25:52PM +0000, Raghavendra Rao Ananta wrote:
> > Introduce the firmware register to hold the standard hypervisor
> > service calls (owner value 5) as a bitmap. The bitmap represents
> > the features that'll be enabled for the guest, as configured by
> > the user-space. Currently, this includes support only for
> > Paravirtualized time, represented by bit-0.
> >
> > The register is also added to the kvm_arm_vm_scope_fw_regs[] list
> > as it maintains its state per-VM.
> >
> > Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
> > ---
> >  arch/arm64/include/asm/kvm_host.h |  2 ++
> >  arch/arm64/include/uapi/asm/kvm.h |  4 ++++
> >  arch/arm64/kvm/guest.c            |  1 +
> >  arch/arm64/kvm/hypercalls.c       | 20 +++++++++++++++++++-
> >  include/kvm/arm_hypercalls.h      |  3 +++
> >  5 files changed, 29 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> > index 1909ced3208f..318148b69279 100644
> > --- a/arch/arm64/include/asm/kvm_host.h
> > +++ b/arch/arm64/include/asm/kvm_host.h
> > @@ -105,9 +105,11 @@ struct kvm_arch_memory_slot {
> >   * struct kvm_hvc_desc: KVM ARM64 hypercall descriptor
> >   *
> >   * @hvc_std_bmap: Bitmap of standard secure service calls
> > + * @hvc_std_hyp_bmap: Bitmap of standard hypervisor service calls
> >   */
> >  struct kvm_hvc_desc {
> >       u64 hvc_std_bmap;
> > +     u64 hvc_std_hyp_bmap;
> >  };
> >
> >  struct kvm_arch {
> > diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h
> > index 2decc30d6b84..9a2caead7359 100644
> > --- a/arch/arm64/include/uapi/asm/kvm.h
> > +++ b/arch/arm64/include/uapi/asm/kvm.h
> > @@ -295,6 +295,10 @@ struct kvm_arm_copy_mte_tags {
> >  #define KVM_REG_ARM_STD_BIT_TRNG_V1_0                BIT(0)
> >  #define KVM_REG_ARM_STD_BMAP_BIT_MAX         0       /* Last valid bit */
> >
> > +#define KVM_REG_ARM_STD_HYP_BMAP             KVM_REG_ARM_FW_BMAP_REG(1)
> > +#define KVM_REG_ARM_STD_HYP_BIT_PV_TIME              BIT(0)
> > +#define KVM_REG_ARM_STD_HYP_BMAP_BIT_MAX     0       /* Last valid bit */
> > +
> >  /* SVE registers */
> >  #define KVM_REG_ARM64_SVE            (0x15 << KVM_REG_ARM_COPROC_SHIFT)
> >
> > diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
> > index d66e6c742bbe..c42426d6137e 100644
> > --- a/arch/arm64/kvm/guest.c
> > +++ b/arch/arm64/kvm/guest.c
> > @@ -66,6 +66,7 @@ static const u64 kvm_arm_vm_scope_fw_regs[] = {
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1,
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2,
> >       KVM_REG_ARM_STD_BMAP,
> > +     KVM_REG_ARM_STD_HYP_BMAP,
> >  };
> >
> >  /**
> > diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
> > index 48c126c3da72..ebc0cc26cf2e 100644
> > --- a/arch/arm64/kvm/hypercalls.c
> > +++ b/arch/arm64/kvm/hypercalls.c
> > @@ -75,6 +75,10 @@ static bool kvm_hvc_call_supported(struct kvm_vcpu *vcpu, u32 func_id)
> >       case ARM_SMCCC_TRNG_RND64:
> >               return kvm_arm_fw_reg_feat_enabled(hvc_desc->hvc_std_bmap,
> >                                               KVM_REG_ARM_STD_BIT_TRNG_V1_0);
> > +     case ARM_SMCCC_HV_PV_TIME_FEATURES:
> > +     case ARM_SMCCC_HV_PV_TIME_ST:
> > +             return kvm_arm_fw_reg_feat_enabled(hvc_desc->hvc_std_hyp_bmap,
> > +                                     KVM_REG_ARM_STD_HYP_BIT_PV_TIME);
> >       default:
> >               /* By default, allow the services that aren't listed here */
> >               return true;
> > @@ -83,6 +87,7 @@ static bool kvm_hvc_call_supported(struct kvm_vcpu *vcpu, u32 func_id)
> >
> >  int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)
> >  {
> > +     struct kvm_hvc_desc *hvc_desc = &vcpu->kvm->arch.hvc_desc;
> >       u32 func_id = smccc_get_function(vcpu);
> >       u64 val[4] = {SMCCC_RET_NOT_SUPPORTED};
> >       u32 feature;
> > @@ -134,7 +139,10 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)
> >                       }
> >                       break;
> >               case ARM_SMCCC_HV_PV_TIME_FEATURES:
> > -                     val[0] = SMCCC_RET_SUCCESS;
> > +                     if (kvm_arm_fw_reg_feat_enabled(
> > +                                     hvc_desc->hvc_std_hyp_bmap,
>
> It is probably OK to keep this parameter on the line above (just stay
> under 100 characters a line).
>
Will rearrange this in the next series. Thanks.

Regards,
Raghavendra
> > +                                     KVM_REG_ARM_STD_HYP_BIT_PV_TIME))
> > +                             val[0] = SMCCC_RET_SUCCESS;
> >                       break;
> >               }
> >               break;
> > @@ -179,6 +187,7 @@ static const u64 kvm_arm_fw_reg_ids[] = {
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1,
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2,
> >       KVM_REG_ARM_STD_BMAP,
> > +     KVM_REG_ARM_STD_HYP_BMAP,
> >  };
> >
> >  void kvm_arm_init_hypercalls(struct kvm *kvm)
> > @@ -186,6 +195,7 @@ void kvm_arm_init_hypercalls(struct kvm *kvm)
> >       struct kvm_hvc_desc *hvc_desc = &kvm->arch.hvc_desc;
> >
> >       hvc_desc->hvc_std_bmap = ARM_SMCCC_STD_FEATURES;
> > +     hvc_desc->hvc_std_hyp_bmap = ARM_SMCCC_STD_HYP_FEATURES;
> >  }
> >
> >  int kvm_arm_get_fw_num_regs(struct kvm_vcpu *vcpu)
> > @@ -272,6 +282,9 @@ int kvm_arm_get_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
> >       case KVM_REG_ARM_STD_BMAP:
> >               val = READ_ONCE(hvc_desc->hvc_std_bmap);
> >               break;
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> > +             val = READ_ONCE(hvc_desc->hvc_std_hyp_bmap);
> > +             break;
> >       default:
> >               return -ENOENT;
> >       }
> > @@ -294,6 +307,10 @@ static int kvm_arm_set_fw_reg_bmap(struct kvm_vcpu *vcpu, u64 reg_id, u64 val)
> >               fw_reg_bmap = &hvc_desc->hvc_std_bmap;
> >               fw_reg_features = ARM_SMCCC_STD_FEATURES;
> >               break;
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> > +             fw_reg_bmap = &hvc_desc->hvc_std_hyp_bmap;
> > +             fw_reg_features = ARM_SMCCC_STD_HYP_FEATURES;
> > +             break;
> >       default:
> >               return -ENOENT;
> >       }
> > @@ -398,6 +415,7 @@ int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
> >
> >               return 0;
> >       case KVM_REG_ARM_STD_BMAP:
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> >               return kvm_arm_set_fw_reg_bmap(vcpu, reg_id, val);
> >       default:
> >               return -ENOENT;
> > diff --git a/include/kvm/arm_hypercalls.h b/include/kvm/arm_hypercalls.h
> > index 64d30b452809..a1cb6e839c74 100644
> > --- a/include/kvm/arm_hypercalls.h
> > +++ b/include/kvm/arm_hypercalls.h
> > @@ -9,6 +9,9 @@
> >  #define ARM_SMCCC_STD_FEATURES \
> >       GENMASK_ULL(KVM_REG_ARM_STD_BMAP_BIT_MAX, 0)
> >
> > +#define ARM_SMCCC_STD_HYP_FEATURES \
> > +     GENMASK_ULL(KVM_REG_ARM_STD_HYP_BMAP_BIT_MAX, 0)
> > +
> >  int kvm_hvc_call_handler(struct kvm_vcpu *vcpu);
> >
> >  static inline u32 smccc_get_function(struct kvm_vcpu *vcpu)
> > --
> > 2.35.1.473.g83b2b277ed-goog
> >

WARNING: multiple messages have this Message-ID (diff)
From: Raghavendra Rao Ananta <rananta@google.com>
To: Oliver Upton <oupton@google.com>
Cc: kvm@vger.kernel.org, Will Deacon <will@kernel.org>,
	Marc Zyngier <maz@kernel.org>, Peter Shier <pshier@google.com>,
	linux-kernel@vger.kernel.org,
	Catalin Marinas <catalin.marinas@arm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4 06/13] KVM: arm64: Add standard hypervisor firmware register
Date: Mon, 14 Mar 2022 17:23:27 -0700	[thread overview]
Message-ID: <CAJHc60yJQ4VOq9OoyGncL07bfvQuz0mPYXCVf2WhL-8QzM5-nA@mail.gmail.com> (raw)
In-Reply-To: <Yi+bVM742+9W4TYj@google.com>

On Mon, Mar 14, 2022 at 12:45 PM Oliver Upton <oupton@google.com> wrote:
>
> On Thu, Feb 24, 2022 at 05:25:52PM +0000, Raghavendra Rao Ananta wrote:
> > Introduce the firmware register to hold the standard hypervisor
> > service calls (owner value 5) as a bitmap. The bitmap represents
> > the features that'll be enabled for the guest, as configured by
> > the user-space. Currently, this includes support only for
> > Paravirtualized time, represented by bit-0.
> >
> > The register is also added to the kvm_arm_vm_scope_fw_regs[] list
> > as it maintains its state per-VM.
> >
> > Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
> > ---
> >  arch/arm64/include/asm/kvm_host.h |  2 ++
> >  arch/arm64/include/uapi/asm/kvm.h |  4 ++++
> >  arch/arm64/kvm/guest.c            |  1 +
> >  arch/arm64/kvm/hypercalls.c       | 20 +++++++++++++++++++-
> >  include/kvm/arm_hypercalls.h      |  3 +++
> >  5 files changed, 29 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> > index 1909ced3208f..318148b69279 100644
> > --- a/arch/arm64/include/asm/kvm_host.h
> > +++ b/arch/arm64/include/asm/kvm_host.h
> > @@ -105,9 +105,11 @@ struct kvm_arch_memory_slot {
> >   * struct kvm_hvc_desc: KVM ARM64 hypercall descriptor
> >   *
> >   * @hvc_std_bmap: Bitmap of standard secure service calls
> > + * @hvc_std_hyp_bmap: Bitmap of standard hypervisor service calls
> >   */
> >  struct kvm_hvc_desc {
> >       u64 hvc_std_bmap;
> > +     u64 hvc_std_hyp_bmap;
> >  };
> >
> >  struct kvm_arch {
> > diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h
> > index 2decc30d6b84..9a2caead7359 100644
> > --- a/arch/arm64/include/uapi/asm/kvm.h
> > +++ b/arch/arm64/include/uapi/asm/kvm.h
> > @@ -295,6 +295,10 @@ struct kvm_arm_copy_mte_tags {
> >  #define KVM_REG_ARM_STD_BIT_TRNG_V1_0                BIT(0)
> >  #define KVM_REG_ARM_STD_BMAP_BIT_MAX         0       /* Last valid bit */
> >
> > +#define KVM_REG_ARM_STD_HYP_BMAP             KVM_REG_ARM_FW_BMAP_REG(1)
> > +#define KVM_REG_ARM_STD_HYP_BIT_PV_TIME              BIT(0)
> > +#define KVM_REG_ARM_STD_HYP_BMAP_BIT_MAX     0       /* Last valid bit */
> > +
> >  /* SVE registers */
> >  #define KVM_REG_ARM64_SVE            (0x15 << KVM_REG_ARM_COPROC_SHIFT)
> >
> > diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
> > index d66e6c742bbe..c42426d6137e 100644
> > --- a/arch/arm64/kvm/guest.c
> > +++ b/arch/arm64/kvm/guest.c
> > @@ -66,6 +66,7 @@ static const u64 kvm_arm_vm_scope_fw_regs[] = {
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1,
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2,
> >       KVM_REG_ARM_STD_BMAP,
> > +     KVM_REG_ARM_STD_HYP_BMAP,
> >  };
> >
> >  /**
> > diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
> > index 48c126c3da72..ebc0cc26cf2e 100644
> > --- a/arch/arm64/kvm/hypercalls.c
> > +++ b/arch/arm64/kvm/hypercalls.c
> > @@ -75,6 +75,10 @@ static bool kvm_hvc_call_supported(struct kvm_vcpu *vcpu, u32 func_id)
> >       case ARM_SMCCC_TRNG_RND64:
> >               return kvm_arm_fw_reg_feat_enabled(hvc_desc->hvc_std_bmap,
> >                                               KVM_REG_ARM_STD_BIT_TRNG_V1_0);
> > +     case ARM_SMCCC_HV_PV_TIME_FEATURES:
> > +     case ARM_SMCCC_HV_PV_TIME_ST:
> > +             return kvm_arm_fw_reg_feat_enabled(hvc_desc->hvc_std_hyp_bmap,
> > +                                     KVM_REG_ARM_STD_HYP_BIT_PV_TIME);
> >       default:
> >               /* By default, allow the services that aren't listed here */
> >               return true;
> > @@ -83,6 +87,7 @@ static bool kvm_hvc_call_supported(struct kvm_vcpu *vcpu, u32 func_id)
> >
> >  int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)
> >  {
> > +     struct kvm_hvc_desc *hvc_desc = &vcpu->kvm->arch.hvc_desc;
> >       u32 func_id = smccc_get_function(vcpu);
> >       u64 val[4] = {SMCCC_RET_NOT_SUPPORTED};
> >       u32 feature;
> > @@ -134,7 +139,10 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)
> >                       }
> >                       break;
> >               case ARM_SMCCC_HV_PV_TIME_FEATURES:
> > -                     val[0] = SMCCC_RET_SUCCESS;
> > +                     if (kvm_arm_fw_reg_feat_enabled(
> > +                                     hvc_desc->hvc_std_hyp_bmap,
>
> It is probably OK to keep this parameter on the line above (just stay
> under 100 characters a line).
>
Will rearrange this in the next series. Thanks.

Regards,
Raghavendra
> > +                                     KVM_REG_ARM_STD_HYP_BIT_PV_TIME))
> > +                             val[0] = SMCCC_RET_SUCCESS;
> >                       break;
> >               }
> >               break;
> > @@ -179,6 +187,7 @@ static const u64 kvm_arm_fw_reg_ids[] = {
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1,
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2,
> >       KVM_REG_ARM_STD_BMAP,
> > +     KVM_REG_ARM_STD_HYP_BMAP,
> >  };
> >
> >  void kvm_arm_init_hypercalls(struct kvm *kvm)
> > @@ -186,6 +195,7 @@ void kvm_arm_init_hypercalls(struct kvm *kvm)
> >       struct kvm_hvc_desc *hvc_desc = &kvm->arch.hvc_desc;
> >
> >       hvc_desc->hvc_std_bmap = ARM_SMCCC_STD_FEATURES;
> > +     hvc_desc->hvc_std_hyp_bmap = ARM_SMCCC_STD_HYP_FEATURES;
> >  }
> >
> >  int kvm_arm_get_fw_num_regs(struct kvm_vcpu *vcpu)
> > @@ -272,6 +282,9 @@ int kvm_arm_get_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
> >       case KVM_REG_ARM_STD_BMAP:
> >               val = READ_ONCE(hvc_desc->hvc_std_bmap);
> >               break;
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> > +             val = READ_ONCE(hvc_desc->hvc_std_hyp_bmap);
> > +             break;
> >       default:
> >               return -ENOENT;
> >       }
> > @@ -294,6 +307,10 @@ static int kvm_arm_set_fw_reg_bmap(struct kvm_vcpu *vcpu, u64 reg_id, u64 val)
> >               fw_reg_bmap = &hvc_desc->hvc_std_bmap;
> >               fw_reg_features = ARM_SMCCC_STD_FEATURES;
> >               break;
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> > +             fw_reg_bmap = &hvc_desc->hvc_std_hyp_bmap;
> > +             fw_reg_features = ARM_SMCCC_STD_HYP_FEATURES;
> > +             break;
> >       default:
> >               return -ENOENT;
> >       }
> > @@ -398,6 +415,7 @@ int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
> >
> >               return 0;
> >       case KVM_REG_ARM_STD_BMAP:
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> >               return kvm_arm_set_fw_reg_bmap(vcpu, reg_id, val);
> >       default:
> >               return -ENOENT;
> > diff --git a/include/kvm/arm_hypercalls.h b/include/kvm/arm_hypercalls.h
> > index 64d30b452809..a1cb6e839c74 100644
> > --- a/include/kvm/arm_hypercalls.h
> > +++ b/include/kvm/arm_hypercalls.h
> > @@ -9,6 +9,9 @@
> >  #define ARM_SMCCC_STD_FEATURES \
> >       GENMASK_ULL(KVM_REG_ARM_STD_BMAP_BIT_MAX, 0)
> >
> > +#define ARM_SMCCC_STD_HYP_FEATURES \
> > +     GENMASK_ULL(KVM_REG_ARM_STD_HYP_BMAP_BIT_MAX, 0)
> > +
> >  int kvm_hvc_call_handler(struct kvm_vcpu *vcpu);
> >
> >  static inline u32 smccc_get_function(struct kvm_vcpu *vcpu)
> > --
> > 2.35.1.473.g83b2b277ed-goog
> >
_______________________________________________
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: Raghavendra Rao Ananta <rananta@google.com>
To: Oliver Upton <oupton@google.com>
Cc: Marc Zyngier <maz@kernel.org>, Andrew Jones <drjones@redhat.com>,
	 James Morse <james.morse@arm.com>,
	Alexandru Elisei <alexandru.elisei@arm.com>,
	Suzuki K Poulose <suzuki.poulose@arm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>,  Peter Shier <pshier@google.com>,
	Ricardo Koller <ricarkol@google.com>,
	 Reiji Watanabe <reijiw@google.com>,
	Jing Zhang <jingzhangos@google.com>,
	 linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu,  linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH v4 06/13] KVM: arm64: Add standard hypervisor firmware register
Date: Mon, 14 Mar 2022 17:23:27 -0700	[thread overview]
Message-ID: <CAJHc60yJQ4VOq9OoyGncL07bfvQuz0mPYXCVf2WhL-8QzM5-nA@mail.gmail.com> (raw)
In-Reply-To: <Yi+bVM742+9W4TYj@google.com>

On Mon, Mar 14, 2022 at 12:45 PM Oliver Upton <oupton@google.com> wrote:
>
> On Thu, Feb 24, 2022 at 05:25:52PM +0000, Raghavendra Rao Ananta wrote:
> > Introduce the firmware register to hold the standard hypervisor
> > service calls (owner value 5) as a bitmap. The bitmap represents
> > the features that'll be enabled for the guest, as configured by
> > the user-space. Currently, this includes support only for
> > Paravirtualized time, represented by bit-0.
> >
> > The register is also added to the kvm_arm_vm_scope_fw_regs[] list
> > as it maintains its state per-VM.
> >
> > Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
> > ---
> >  arch/arm64/include/asm/kvm_host.h |  2 ++
> >  arch/arm64/include/uapi/asm/kvm.h |  4 ++++
> >  arch/arm64/kvm/guest.c            |  1 +
> >  arch/arm64/kvm/hypercalls.c       | 20 +++++++++++++++++++-
> >  include/kvm/arm_hypercalls.h      |  3 +++
> >  5 files changed, 29 insertions(+), 1 deletion(-)
> >
> > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
> > index 1909ced3208f..318148b69279 100644
> > --- a/arch/arm64/include/asm/kvm_host.h
> > +++ b/arch/arm64/include/asm/kvm_host.h
> > @@ -105,9 +105,11 @@ struct kvm_arch_memory_slot {
> >   * struct kvm_hvc_desc: KVM ARM64 hypercall descriptor
> >   *
> >   * @hvc_std_bmap: Bitmap of standard secure service calls
> > + * @hvc_std_hyp_bmap: Bitmap of standard hypervisor service calls
> >   */
> >  struct kvm_hvc_desc {
> >       u64 hvc_std_bmap;
> > +     u64 hvc_std_hyp_bmap;
> >  };
> >
> >  struct kvm_arch {
> > diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h
> > index 2decc30d6b84..9a2caead7359 100644
> > --- a/arch/arm64/include/uapi/asm/kvm.h
> > +++ b/arch/arm64/include/uapi/asm/kvm.h
> > @@ -295,6 +295,10 @@ struct kvm_arm_copy_mte_tags {
> >  #define KVM_REG_ARM_STD_BIT_TRNG_V1_0                BIT(0)
> >  #define KVM_REG_ARM_STD_BMAP_BIT_MAX         0       /* Last valid bit */
> >
> > +#define KVM_REG_ARM_STD_HYP_BMAP             KVM_REG_ARM_FW_BMAP_REG(1)
> > +#define KVM_REG_ARM_STD_HYP_BIT_PV_TIME              BIT(0)
> > +#define KVM_REG_ARM_STD_HYP_BMAP_BIT_MAX     0       /* Last valid bit */
> > +
> >  /* SVE registers */
> >  #define KVM_REG_ARM64_SVE            (0x15 << KVM_REG_ARM_COPROC_SHIFT)
> >
> > diff --git a/arch/arm64/kvm/guest.c b/arch/arm64/kvm/guest.c
> > index d66e6c742bbe..c42426d6137e 100644
> > --- a/arch/arm64/kvm/guest.c
> > +++ b/arch/arm64/kvm/guest.c
> > @@ -66,6 +66,7 @@ static const u64 kvm_arm_vm_scope_fw_regs[] = {
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1,
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2,
> >       KVM_REG_ARM_STD_BMAP,
> > +     KVM_REG_ARM_STD_HYP_BMAP,
> >  };
> >
> >  /**
> > diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
> > index 48c126c3da72..ebc0cc26cf2e 100644
> > --- a/arch/arm64/kvm/hypercalls.c
> > +++ b/arch/arm64/kvm/hypercalls.c
> > @@ -75,6 +75,10 @@ static bool kvm_hvc_call_supported(struct kvm_vcpu *vcpu, u32 func_id)
> >       case ARM_SMCCC_TRNG_RND64:
> >               return kvm_arm_fw_reg_feat_enabled(hvc_desc->hvc_std_bmap,
> >                                               KVM_REG_ARM_STD_BIT_TRNG_V1_0);
> > +     case ARM_SMCCC_HV_PV_TIME_FEATURES:
> > +     case ARM_SMCCC_HV_PV_TIME_ST:
> > +             return kvm_arm_fw_reg_feat_enabled(hvc_desc->hvc_std_hyp_bmap,
> > +                                     KVM_REG_ARM_STD_HYP_BIT_PV_TIME);
> >       default:
> >               /* By default, allow the services that aren't listed here */
> >               return true;
> > @@ -83,6 +87,7 @@ static bool kvm_hvc_call_supported(struct kvm_vcpu *vcpu, u32 func_id)
> >
> >  int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)
> >  {
> > +     struct kvm_hvc_desc *hvc_desc = &vcpu->kvm->arch.hvc_desc;
> >       u32 func_id = smccc_get_function(vcpu);
> >       u64 val[4] = {SMCCC_RET_NOT_SUPPORTED};
> >       u32 feature;
> > @@ -134,7 +139,10 @@ int kvm_hvc_call_handler(struct kvm_vcpu *vcpu)
> >                       }
> >                       break;
> >               case ARM_SMCCC_HV_PV_TIME_FEATURES:
> > -                     val[0] = SMCCC_RET_SUCCESS;
> > +                     if (kvm_arm_fw_reg_feat_enabled(
> > +                                     hvc_desc->hvc_std_hyp_bmap,
>
> It is probably OK to keep this parameter on the line above (just stay
> under 100 characters a line).
>
Will rearrange this in the next series. Thanks.

Regards,
Raghavendra
> > +                                     KVM_REG_ARM_STD_HYP_BIT_PV_TIME))
> > +                             val[0] = SMCCC_RET_SUCCESS;
> >                       break;
> >               }
> >               break;
> > @@ -179,6 +187,7 @@ static const u64 kvm_arm_fw_reg_ids[] = {
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_1,
> >       KVM_REG_ARM_SMCCC_ARCH_WORKAROUND_2,
> >       KVM_REG_ARM_STD_BMAP,
> > +     KVM_REG_ARM_STD_HYP_BMAP,
> >  };
> >
> >  void kvm_arm_init_hypercalls(struct kvm *kvm)
> > @@ -186,6 +195,7 @@ void kvm_arm_init_hypercalls(struct kvm *kvm)
> >       struct kvm_hvc_desc *hvc_desc = &kvm->arch.hvc_desc;
> >
> >       hvc_desc->hvc_std_bmap = ARM_SMCCC_STD_FEATURES;
> > +     hvc_desc->hvc_std_hyp_bmap = ARM_SMCCC_STD_HYP_FEATURES;
> >  }
> >
> >  int kvm_arm_get_fw_num_regs(struct kvm_vcpu *vcpu)
> > @@ -272,6 +282,9 @@ int kvm_arm_get_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
> >       case KVM_REG_ARM_STD_BMAP:
> >               val = READ_ONCE(hvc_desc->hvc_std_bmap);
> >               break;
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> > +             val = READ_ONCE(hvc_desc->hvc_std_hyp_bmap);
> > +             break;
> >       default:
> >               return -ENOENT;
> >       }
> > @@ -294,6 +307,10 @@ static int kvm_arm_set_fw_reg_bmap(struct kvm_vcpu *vcpu, u64 reg_id, u64 val)
> >               fw_reg_bmap = &hvc_desc->hvc_std_bmap;
> >               fw_reg_features = ARM_SMCCC_STD_FEATURES;
> >               break;
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> > +             fw_reg_bmap = &hvc_desc->hvc_std_hyp_bmap;
> > +             fw_reg_features = ARM_SMCCC_STD_HYP_FEATURES;
> > +             break;
> >       default:
> >               return -ENOENT;
> >       }
> > @@ -398,6 +415,7 @@ int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg)
> >
> >               return 0;
> >       case KVM_REG_ARM_STD_BMAP:
> > +     case KVM_REG_ARM_STD_HYP_BMAP:
> >               return kvm_arm_set_fw_reg_bmap(vcpu, reg_id, val);
> >       default:
> >               return -ENOENT;
> > diff --git a/include/kvm/arm_hypercalls.h b/include/kvm/arm_hypercalls.h
> > index 64d30b452809..a1cb6e839c74 100644
> > --- a/include/kvm/arm_hypercalls.h
> > +++ b/include/kvm/arm_hypercalls.h
> > @@ -9,6 +9,9 @@
> >  #define ARM_SMCCC_STD_FEATURES \
> >       GENMASK_ULL(KVM_REG_ARM_STD_BMAP_BIT_MAX, 0)
> >
> > +#define ARM_SMCCC_STD_HYP_FEATURES \
> > +     GENMASK_ULL(KVM_REG_ARM_STD_HYP_BMAP_BIT_MAX, 0)
> > +
> >  int kvm_hvc_call_handler(struct kvm_vcpu *vcpu);
> >
> >  static inline u32 smccc_get_function(struct kvm_vcpu *vcpu)
> > --
> > 2.35.1.473.g83b2b277ed-goog
> >

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

  reply	other threads:[~2022-03-15  0:23 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-24 17:25 [PATCH v4 00/13] KVM: arm64: Add support for hypercall services selection Raghavendra Rao Ananta
2022-02-24 17:25 ` Raghavendra Rao Ananta
2022-02-24 17:25 ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 01/13] KVM: arm64: Factor out firmware register handling from psci.c Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 18:15   ` Oliver Upton
2022-03-14 18:15     ` Oliver Upton
2022-03-14 18:15     ` Oliver Upton
2022-03-14 23:15     ` Raghavendra Rao Ananta
2022-03-14 23:15       ` Raghavendra Rao Ananta
2022-03-14 23:15       ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 02/13] KVM: arm64: Introduce KVM_CAP_ARM_REG_SCOPE Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-25  6:42   ` Oliver Upton
2022-02-25  6:42     ` Oliver Upton
2022-02-25  6:42     ` Oliver Upton
2022-02-25 17:34     ` Raghavendra Rao Ananta
2022-02-25 17:34       ` Raghavendra Rao Ananta
2022-02-25 17:34       ` Raghavendra Rao Ananta
2022-02-25 18:26       ` Oliver Upton
2022-02-25 18:26         ` Oliver Upton
2022-02-25 18:26         ` Oliver Upton
2022-02-28 19:46         ` Raghavendra Rao Ananta
2022-02-28 19:46           ` Raghavendra Rao Ananta
2022-02-28 19:46           ` Raghavendra Rao Ananta
2022-02-28 19:46           ` Raghavendra Rao Ananta
2022-02-28 19:46           ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 03/13] KVM: arm64: Encode the scope for firmware registers Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 19:16   ` Oliver Upton
2022-03-14 19:16     ` Oliver Upton
2022-03-14 19:16     ` Oliver Upton
2022-02-24 17:25 ` [PATCH v4 04/13] KVM: arm64: Capture VM's first run Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 18:02   ` Oliver Upton
2022-03-14 18:02     ` Oliver Upton
2022-03-14 18:02     ` Oliver Upton
2022-03-14 23:12     ` Raghavendra Rao Ananta
2022-03-14 23:12       ` Raghavendra Rao Ananta
2022-03-14 23:12       ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 05/13] KVM: arm64: Setup a framework for hypercall bitmap firmware registers Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 19:41   ` Oliver Upton
2022-03-14 19:41     ` Oliver Upton
2022-03-14 19:41     ` Oliver Upton
2022-03-14 20:25     ` Oliver Upton
2022-03-14 20:25       ` Oliver Upton
2022-03-14 20:25       ` Oliver Upton
2022-03-15  0:22     ` Raghavendra Rao Ananta
2022-03-15  0:22       ` Raghavendra Rao Ananta
2022-03-15  0:22       ` Raghavendra Rao Ananta
2022-03-15  7:25       ` Oliver Upton
2022-03-15  7:25         ` Oliver Upton
2022-03-15  7:25         ` Oliver Upton
2022-03-15 16:59         ` Raghavendra Rao Ananta
2022-03-15 16:59           ` Raghavendra Rao Ananta
2022-03-15 16:59           ` Raghavendra Rao Ananta
2022-03-15 17:35           ` Oliver Upton
2022-03-15 17:35             ` Oliver Upton
2022-03-15 17:35             ` Oliver Upton
2022-02-24 17:25 ` [PATCH v4 06/13] KVM: arm64: Add standard hypervisor firmware register Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 19:45   ` Oliver Upton
2022-03-14 19:45     ` Oliver Upton
2022-03-14 19:45     ` Oliver Upton
2022-03-15  0:23     ` Raghavendra Rao Ananta [this message]
2022-03-15  0:23       ` Raghavendra Rao Ananta
2022-03-15  0:23       ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 07/13] KVM: arm64: Add vendor " Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 19:59   ` Oliver Upton
2022-03-14 19:59     ` Oliver Upton
2022-03-14 19:59     ` Oliver Upton
2022-03-15  0:30     ` Raghavendra Rao Ananta
2022-03-15  0:30       ` Raghavendra Rao Ananta
2022-03-15  0:30       ` Raghavendra Rao Ananta
2022-03-15  6:41       ` Oliver Upton
2022-03-15  6:41         ` Oliver Upton
2022-03-15  6:41         ` Oliver Upton
2022-03-15 17:53         ` Raghavendra Rao Ananta
2022-03-15 17:53           ` Raghavendra Rao Ananta
2022-03-15 17:53           ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 08/13] Docs: KVM: Add doc for the bitmap firmware registers Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 09/13] Docs: KVM: Rename psci.rst to hypercalls.rst Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 20:01   ` Oliver Upton
2022-03-14 20:01     ` Oliver Upton
2022-03-14 20:01     ` Oliver Upton
2022-03-15  0:31     ` Raghavendra Rao Ananta
2022-03-15  0:31       ` Raghavendra Rao Ananta
2022-03-15  0:31       ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 10/13] tools: Import ARM SMCCC definitions Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 11/13] selftests: KVM: aarch64: Introduce hypercall ABI test Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 12/13] selftests: KVM: aarch64: hypercalls: Test with KVM_CAP_ARM_REG_SCOPE Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25 ` [PATCH v4 13/13] selftests: KVM: aarch64: Add the bitmap firmware registers to get-reg-list Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-02-24 17:25   ` Raghavendra Rao Ananta
2022-03-14 20:02   ` Oliver Upton
2022-03-14 20:02     ` Oliver Upton
2022-03-14 20:02     ` Oliver Upton

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=CAJHc60yJQ4VOq9OoyGncL07bfvQuz0mPYXCVf2WhL-8QzM5-nA@mail.gmail.com \
    --to=rananta@google.com \
    --cc=alexandru.elisei@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=drjones@redhat.com \
    --cc=james.morse@arm.com \
    --cc=jingzhangos@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=oupton@google.com \
    --cc=pbonzini@redhat.com \
    --cc=pshier@google.com \
    --cc=reijiw@google.com \
    --cc=ricarkol@google.com \
    --cc=suzuki.poulose@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.