From: Oliver Upton <oupton@google.com>
To: Gavin Shan <gshan@redhat.com>
Cc: maz@kernel.org, linux-kernel@vger.kernel.org, eauger@redhat.com,
shan.gavin@gmail.com, Jonathan.Cameron@huawei.com,
pbonzini@redhat.com, vkuznets@redhat.com, will@kernel.org,
kvmarm@lists.cs.columbia.edu
Subject: Re: [PATCH v6 04/18] KVM: arm64: Support SDEI_EVENT_REGISTER hypercall
Date: Sat, 30 Apr 2022 14:54:41 +0000 [thread overview]
Message-ID: <Ym1Nsaq/ERUx/ebD@google.com> (raw)
In-Reply-To: <20220403153911.12332-5-gshan@redhat.com>
Hi Gavin,
On Sun, Apr 03, 2022 at 11:38:57PM +0800, Gavin Shan wrote:
> This supports SDEI_EVENT_REGISTER hypercall, which is used by guest
> to register event. The event won't be raised until it's registered
> and enabled. For those KVM owned events, they can't be registered
> if they aren't exposed.
>
> Signed-off-by: Gavin Shan <gshan@redhat.com>
> ---
> arch/arm64/kvm/sdei.c | 78 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 78 insertions(+)
>
> diff --git a/arch/arm64/kvm/sdei.c b/arch/arm64/kvm/sdei.c
> index 3507e33ec00e..89c1b231cb60 100644
> --- a/arch/arm64/kvm/sdei.c
> +++ b/arch/arm64/kvm/sdei.c
> @@ -25,6 +25,81 @@ static struct kvm_sdei_exposed_event exposed_events[] = {
> for (idx = 0, event = &exposed_events[0]; \
> idx < ARRAY_SIZE(exposed_events); \
> idx++, event++)
> +#define kvm_sdei_for_each_event(vsdei, event, idx) \
> + for (idx = 0, event = &vsdei->events[0]; \
> + idx < ARRAY_SIZE(exposed_events); \
> + idx++, event++)
> +
> +static struct kvm_sdei_event *find_event(struct kvm_vcpu *vcpu,
> + unsigned int num)
> +{
> + struct kvm_sdei_vcpu *vsdei = vcpu->arch.sdei;
> + struct kvm_sdei_event *event;
> + int i;
> +
> + kvm_sdei_for_each_event(vsdei, event, i) {
> + if (event->exposed_event->num == num)
> + return event;
> + }
> +
> + return NULL;
> +}
I imagine you'll drop this hunk in the next spin.
> +static unsigned long hypercall_register(struct kvm_vcpu *vcpu)
Hmm, hypercall_ is not a very descriptive scope. Could you instead do
something like kvm_sdei_?
so for this one, kvm_sdei_event_register()? Provides decent context
clues to connect back to the spec as well.
> +{
> + struct kvm_sdei_vcpu *vsdei = vcpu->arch.sdei;
> + struct kvm_sdei_event *event;
> + unsigned int num = smccc_get_arg(vcpu, 1);
> + unsigned long ep_address = smccc_get_arg(vcpu, 2);
> + unsigned long ep_arg = smccc_get_arg(vcpu, 3);
We discussed using some structure to track the registered context of an
event. Maybe just build it on the stack then assign it in the array?
> + unsigned long route_mode = smccc_get_arg(vcpu, 4);
This is really 'flags'. route_mode is bit[0]. I imagine we don't want to
support relative mode, so bit[1] is useless for us in that case too.
The spec is somewhat imprecise on what happens for reserved flags. The
prototype in section 5.1.2 of [1] suggests that reserved bits must be
zero, but 5.1.2.3 'Client responsibilities' does not state that invalid
flags result in an error.
Arm TF certainly rejects unexpected flags [2].
[1]: DEN0054C https://developer.arm.com/documentation/den0054/latest
[2]: https://github.com/ARM-software/arm-trusted-firmware/blob/66c3906e4c32d675eb06bd081de8a3359f76b84c/services/std_svc/sdei/sdei_main.c#L260
--
Thanks,
Oliver
_______________________________________________
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: Oliver Upton <oupton@google.com>
To: Gavin Shan <gshan@redhat.com>
Cc: kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org,
eauger@redhat.com, Jonathan.Cameron@huawei.com,
vkuznets@redhat.com, will@kernel.org, shannon.zhaosl@gmail.com,
james.morse@arm.com, mark.rutland@arm.com, maz@kernel.org,
pbonzini@redhat.com, shan.gavin@gmail.com
Subject: Re: [PATCH v6 04/18] KVM: arm64: Support SDEI_EVENT_REGISTER hypercall
Date: Sat, 30 Apr 2022 14:54:41 +0000 [thread overview]
Message-ID: <Ym1Nsaq/ERUx/ebD@google.com> (raw)
In-Reply-To: <20220403153911.12332-5-gshan@redhat.com>
Hi Gavin,
On Sun, Apr 03, 2022 at 11:38:57PM +0800, Gavin Shan wrote:
> This supports SDEI_EVENT_REGISTER hypercall, which is used by guest
> to register event. The event won't be raised until it's registered
> and enabled. For those KVM owned events, they can't be registered
> if they aren't exposed.
>
> Signed-off-by: Gavin Shan <gshan@redhat.com>
> ---
> arch/arm64/kvm/sdei.c | 78 +++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 78 insertions(+)
>
> diff --git a/arch/arm64/kvm/sdei.c b/arch/arm64/kvm/sdei.c
> index 3507e33ec00e..89c1b231cb60 100644
> --- a/arch/arm64/kvm/sdei.c
> +++ b/arch/arm64/kvm/sdei.c
> @@ -25,6 +25,81 @@ static struct kvm_sdei_exposed_event exposed_events[] = {
> for (idx = 0, event = &exposed_events[0]; \
> idx < ARRAY_SIZE(exposed_events); \
> idx++, event++)
> +#define kvm_sdei_for_each_event(vsdei, event, idx) \
> + for (idx = 0, event = &vsdei->events[0]; \
> + idx < ARRAY_SIZE(exposed_events); \
> + idx++, event++)
> +
> +static struct kvm_sdei_event *find_event(struct kvm_vcpu *vcpu,
> + unsigned int num)
> +{
> + struct kvm_sdei_vcpu *vsdei = vcpu->arch.sdei;
> + struct kvm_sdei_event *event;
> + int i;
> +
> + kvm_sdei_for_each_event(vsdei, event, i) {
> + if (event->exposed_event->num == num)
> + return event;
> + }
> +
> + return NULL;
> +}
I imagine you'll drop this hunk in the next spin.
> +static unsigned long hypercall_register(struct kvm_vcpu *vcpu)
Hmm, hypercall_ is not a very descriptive scope. Could you instead do
something like kvm_sdei_?
so for this one, kvm_sdei_event_register()? Provides decent context
clues to connect back to the spec as well.
> +{
> + struct kvm_sdei_vcpu *vsdei = vcpu->arch.sdei;
> + struct kvm_sdei_event *event;
> + unsigned int num = smccc_get_arg(vcpu, 1);
> + unsigned long ep_address = smccc_get_arg(vcpu, 2);
> + unsigned long ep_arg = smccc_get_arg(vcpu, 3);
We discussed using some structure to track the registered context of an
event. Maybe just build it on the stack then assign it in the array?
> + unsigned long route_mode = smccc_get_arg(vcpu, 4);
This is really 'flags'. route_mode is bit[0]. I imagine we don't want to
support relative mode, so bit[1] is useless for us in that case too.
The spec is somewhat imprecise on what happens for reserved flags. The
prototype in section 5.1.2 of [1] suggests that reserved bits must be
zero, but 5.1.2.3 'Client responsibilities' does not state that invalid
flags result in an error.
Arm TF certainly rejects unexpected flags [2].
[1]: DEN0054C https://developer.arm.com/documentation/den0054/latest
[2]: https://github.com/ARM-software/arm-trusted-firmware/blob/66c3906e4c32d675eb06bd081de8a3359f76b84c/services/std_svc/sdei/sdei_main.c#L260
--
Thanks,
Oliver
next prev parent reply other threads:[~2022-04-30 14:54 UTC|newest]
Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-03 15:38 [PATCH v6 00/18] Support SDEI Virtualization Gavin Shan
2022-04-03 15:38 ` Gavin Shan
2022-04-03 15:38 ` [PATCH v6 01/18] KVM: arm64: Extend smccc_get_argx() Gavin Shan
2022-04-03 15:38 ` Gavin Shan
2022-04-03 15:38 ` [PATCH v6 02/18] KVM: arm64: Route hypercalls based on their owner Gavin Shan
2022-04-03 15:38 ` Gavin Shan
2022-04-21 8:19 ` Oliver Upton
2022-04-21 8:19 ` Oliver Upton
2022-04-22 12:20 ` Gavin Shan
2022-04-22 12:20 ` Gavin Shan
2022-04-22 17:59 ` Oliver Upton
2022-04-22 17:59 ` Oliver Upton
2022-04-23 12:48 ` Gavin Shan
2022-04-23 12:48 ` Gavin Shan
2022-04-03 15:38 ` [PATCH v6 03/18] KVM: arm64: Add SDEI virtualization infrastructure Gavin Shan
2022-04-03 15:38 ` Gavin Shan
2022-04-22 21:48 ` Oliver Upton
2022-04-22 21:48 ` Oliver Upton
2022-04-23 14:18 ` Gavin Shan
2022-04-23 14:18 ` Gavin Shan
2022-04-23 18:43 ` Oliver Upton
2022-04-23 18:43 ` Oliver Upton
2022-04-24 3:00 ` Gavin Shan
2022-04-24 3:00 ` Gavin Shan
2022-04-28 20:28 ` Oliver Upton
2022-04-28 20:28 ` Oliver Upton
2022-04-30 11:38 ` Gavin Shan
2022-04-30 11:38 ` Gavin Shan
2022-04-30 14:16 ` Oliver Upton
2022-04-30 14:16 ` Oliver Upton
2022-05-02 2:35 ` Gavin Shan
2022-05-02 2:35 ` Gavin Shan
2022-05-02 3:40 ` Oliver Upton
2022-05-02 3:40 ` Oliver Upton
2022-05-02 7:25 ` Gavin Shan
2022-05-02 7:25 ` Gavin Shan
2022-05-02 7:57 ` Oliver Upton
2022-05-02 7:57 ` Oliver Upton
2022-05-02 8:23 ` Gavin Shan
2022-05-02 8:23 ` Gavin Shan
2022-04-03 15:38 ` [PATCH v6 04/18] KVM: arm64: Support SDEI_EVENT_REGISTER hypercall Gavin Shan
2022-04-03 15:38 ` Gavin Shan
2022-04-30 14:54 ` Oliver Upton [this message]
2022-04-30 14:54 ` Oliver Upton
2022-05-02 2:55 ` Gavin Shan
2022-05-02 2:55 ` Gavin Shan
2022-05-02 3:43 ` Oliver Upton
2022-05-02 3:43 ` Oliver Upton
2022-05-02 7:28 ` Gavin Shan
2022-05-02 7:28 ` Gavin Shan
2022-04-03 15:38 ` [PATCH v6 05/18] KVM: arm64: Support SDEI_EVENT_{ENABLE, DISABLE} Gavin Shan
2022-04-03 15:38 ` Gavin Shan
2022-04-03 15:38 ` [PATCH v6 06/18] KVM: arm64: Support SDEI_EVENT_CONTEXT hypercall Gavin Shan
2022-04-03 15:38 ` Gavin Shan
2022-04-30 15:03 ` Oliver Upton
2022-04-30 15:03 ` Oliver Upton
2022-05-02 2:57 ` Gavin Shan
2022-05-02 2:57 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 07/18] KVM: arm64: Support SDEI_EVENT_UNREGISTER hypercall Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 08/18] KVM: arm64: Support SDEI_EVENT_STATUS hypercall Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 09/18] KVM: arm64: Support SDEI_EVENT_GET_INFO hypercall Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 10/18] KVM: arm64: Support SDEI_PE_{MASK, UNMASK} hypercall Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-04 10:26 ` [PATCH] KVM: arm64: fix returnvar.cocci warnings kernel test robot
2022-04-04 10:26 ` kernel test robot
2022-04-04 10:54 ` Gavin Shan
2022-04-04 10:54 ` Gavin Shan
2022-04-04 10:54 ` Gavin Shan
2022-04-04 10:29 ` [PATCH v6 10/18] KVM: arm64: Support SDEI_PE_{MASK, UNMASK} hypercall kernel test robot
2022-04-04 10:29 ` kernel test robot
2022-04-03 15:39 ` [PATCH v6 11/18] KVM: arm64: Support SDEI_{PRIVATE, SHARED}_RESET Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 12/18] KVM: arm64: Support SDEI event injection, delivery Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 13/18] KVM: arm64: Support SDEI_EVENT_{COMPLETE, COMPLETE_AND_RESUME} hypercall Gavin Shan
2022-04-03 15:39 ` [PATCH v6 13/18] KVM: arm64: Support SDEI_EVENT_{COMPLETE,COMPLETE_AND_RESUME} hypercall Gavin Shan
2022-05-01 6:50 ` Oliver Upton
2022-05-01 6:50 ` Oliver Upton
2022-05-02 6:19 ` Gavin Shan
2022-05-02 6:19 ` Gavin Shan
2022-05-02 7:38 ` Oliver Upton
2022-05-02 7:38 ` Oliver Upton
2022-05-02 7:51 ` Gavin Shan
2022-05-02 7:51 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 14/18] KVM: arm64: Support SDEI_EVENT_SIGNAL hypercall Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-30 21:32 ` Oliver Upton
2022-04-30 21:32 ` Oliver Upton
2022-05-02 3:04 ` Gavin Shan
2022-05-02 3:04 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 15/18] KVM: arm64: Support SDEI_FEATURES hypercall Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-05-01 6:55 ` Oliver Upton
2022-05-01 6:55 ` Oliver Upton
2022-05-02 3:05 ` Gavin Shan
2022-05-02 3:05 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 16/18] KVM: arm64: Support SDEI_VERSION hypercall Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 17/18] KVM: arm64: Expose SDEI capability Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:39 ` [PATCH v6 18/18] KVM: selftests: Add SDEI test case Gavin Shan
2022-04-03 15:39 ` Gavin Shan
2022-04-03 15:47 ` [PATCH v6 00/18] Support SDEI Virtualization Gavin Shan
2022-04-03 15:47 ` Gavin Shan
2022-04-04 6:09 ` Oliver Upton
2022-04-04 6:09 ` Oliver Upton
2022-04-04 10:53 ` Gavin Shan
2022-04-04 10:53 ` Gavin Shan
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=Ym1Nsaq/ERUx/ebD@google.com \
--to=oupton@google.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=eauger@redhat.com \
--cc=gshan@redhat.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=pbonzini@redhat.com \
--cc=shan.gavin@gmail.com \
--cc=vkuznets@redhat.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.