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 03/18] KVM: arm64: Add SDEI virtualization infrastructure
Date: Thu, 28 Apr 2022 20:28:20 +0000 [thread overview]
Message-ID: <Ymr45B+8xTlhi7vk@google.com> (raw)
In-Reply-To: <0e26da1a-00bb-3d63-a8bf-6cd3271b0a38@redhat.com>
Hi Gavin,
On Sun, Apr 24, 2022 at 11:00:56AM +0800, Gavin Shan wrote:
[...]
> Yes, The assumption that all events are always singled by software should
> be true. So this field (@signaled) can be dropped either. So I plan to
> change the data structures like below, according to the suggestions given
> by you. Please double check if there are anything missed.
>
> (1) Those fields of struct kvm_sdei_exposed_event are dropped or merged
> to struct kvm_sdei_event.
>
> struct kvm_sdei_event {
> unsigned int num;
> unsigned long ep_addr;
> unsigned long ep_arg;
> #define KVM_SDEI_EVENT_STATE_REGISTERED 0
> #define KVM_SDEI_EVENT_STATE_ENABLED 1
> #define KVM_SDEI_EVENT_STATE_UNREGISTER_PENDING 2
> unsigned long state; /* accessed by {test,set,clear}_bit() */
> unsigned long event_count;
> };
>
> (2) In arch/arm64/kvm/sdei.c
>
> static kvm_sdei_event exposed_events[] = {
> { .num = SDEI_SW_SIGNALED_EVENT },
> };
>
> (3) In arch/arm64/kvm/sdei.c::kvm_sdei_create_vcpu(), the SDEI events
> are instantiated based on @exposed_events[]. It's just what we're
> doing and nothing is changed.
The part I find troubling is the fact that we are treating SDEI events
as a list-like thing. If we want to behave more like hardware, why can't
we track the state of an event in bitmaps? There are three bits of
relevant state for any given event in the context of a vCPU: registered,
enabled, and pending.
I'm having some second thoughts about the suggestion to use MP state for
this, given that we need to represent a few bits of state for the vCPU
as well. Seems we need to track the mask state of a vCPU and a bit to
indicate whether an SDEI handler is active. You could put these bits in
kvm_vcpu_arch::flags, actually.
So maybe it could be organized like so:
/* bits for the bitmaps below */
enum kvm_sdei_event {
KVM_SDEI_EVENT_SW_SIGNALED = 0,
KVM_SDEI_EVENT_ASYNC_PF,
...
NR_KVM_SDEI_EVENTS,
};
struct kvm_sdei_event_handler {
unsigned long ep_addr;
unsigned long ep_arg;
};
struct kvm_sdei_event_context {
unsigned long pc;
unsigned long pstate;
unsigned long regs[18];
};
struct kvm_sdei_vcpu {
unsigned long registered;
unsigned long enabled;
unsigned long pending;
struct kvm_sdei_event_handler handlers[NR_KVM_SDEI_EVENTS];
struct kvm_sdei_event_context ctxt;
};
But it is hard to really talk about these data structures w/o a feel for
the mechanics of working the series around it.
> > > > Do we need this if we disallow nesting events?
> > > >
> > >
> > > Yes, we need this. "event == NULL" is used as indication of invalid
> > > context. @event is the associated SDEI event when the context is
> > > valid.
> >
> > What if we use some other plumbing to indicate the state of the vCPU? MP
> > state comes to mind, for example.
> >
>
> Even the indication is done by another state, kvm_sdei_vcpu_context still
> need to be linked (associated) with the event. After the vCPU context becomes
> valid after the event is delivered, we still need to know the associated
> event when some of hypercalls are triggered. SDEI_1_0_FN_SDEI_EVENT_COMPLETE
> is one of the examples, we need to decrease struct kvm_sdei_event::event_count
> for the hypercall.
Why do we need to keep track of how many times an event has been
signaled? Nothing in SDEI seems to suggest that the number of event
signals corresponds to the number of times the handler is invoked. In
fact, the documentation on SDEI_EVENT_SIGNAL corroborates this:
"""
The event has edgetriggered semantics and the number of event signals
may not correspond to the number of times the handler is invoked in the
target PE.
"""
DEN0054C 5.1.16.1
So perhaps we queue at most 1 pending event for the guest.
I'd also like to see if anyone else has thoughts on the topic, as I'd
hate for you to go back to the whiteboard again in the next spin.
--
Thanks,
Oliver
next prev parent reply other threads:[~2022-04-28 20:28 UTC|newest]
Thread overview: 55+ 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 ` [PATCH v6 01/18] KVM: arm64: Extend smccc_get_argx() Gavin Shan
2022-04-03 15:38 ` [PATCH v6 02/18] KVM: arm64: Route hypercalls based on their owner Gavin Shan
2022-04-21 8:19 ` Oliver Upton
2022-04-22 12:20 ` Gavin Shan
2022-04-22 17:59 ` Oliver Upton
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-22 21:48 ` Oliver Upton
2022-04-23 14:18 ` Gavin Shan
2022-04-23 18:43 ` Oliver Upton
2022-04-24 3:00 ` Gavin Shan
2022-04-28 20:28 ` Oliver Upton [this message]
2022-04-30 11:38 ` Gavin Shan
2022-04-30 14:16 ` Oliver Upton
2022-05-02 2:35 ` Gavin Shan
2022-05-02 3:40 ` Oliver Upton
2022-05-02 7:25 ` Gavin Shan
2022-05-02 7:57 ` Oliver Upton
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-30 14:54 ` Oliver Upton
2022-05-02 2:55 ` Gavin Shan
2022-05-02 3:43 ` Oliver Upton
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 ` [PATCH v6 06/18] KVM: arm64: Support SDEI_EVENT_CONTEXT hypercall Gavin Shan
2022-04-30 15:03 ` Oliver Upton
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 ` [PATCH v6 08/18] KVM: arm64: Support SDEI_EVENT_STATUS hypercall 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 ` [PATCH v6 10/18] KVM: arm64: Support SDEI_PE_{MASK, UNMASK} hypercall Gavin Shan
2022-04-04 10:26 ` [PATCH] KVM: arm64: fix returnvar.cocci warnings kernel test robot
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-03 15:39 ` [PATCH v6 11/18] KVM: arm64: Support SDEI_{PRIVATE, SHARED}_RESET 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 ` [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-02 6:19 ` Gavin Shan
2022-05-02 7:38 ` Oliver Upton
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-30 21:32 ` Oliver Upton
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-05-01 6:55 ` Oliver Upton
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 ` [PATCH v6 17/18] KVM: arm64: Expose SDEI capability Gavin Shan
2022-04-03 15:39 ` [PATCH v6 18/18] KVM: selftests: Add SDEI test case Gavin Shan
2022-04-03 15:47 ` [PATCH v6 00/18] Support SDEI Virtualization Gavin Shan
2022-04-04 6:09 ` Oliver Upton
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=Ymr45B+8xTlhi7vk@google.com \
--to=oupton@google.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=eauger@redhat.com \
--cc=gshan@redhat.com \
--cc=james.morse@arm.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=pbonzini@redhat.com \
--cc=shan.gavin@gmail.com \
--cc=shannon.zhaosl@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox