Hi Gavin, On Sun, Apr 03, 2022 at 11:39:07PM +0800, Gavin Shan wrote: > This supports SDEI_EVENT_SIGNAL hypercall. It's used by guest > to inject event, whose number must be zero to the specified > vCPU. As the shared event isn't supported, calling vCPU is > assumed to be the target. > > Signed-off-by: Gavin Shan <gshan@xxxxxxxxxx> > --- > arch/arm64/kvm/sdei.c | 45 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 45 insertions(+) > > diff --git a/arch/arm64/kvm/sdei.c b/arch/arm64/kvm/sdei.c > index ebdbe7810cf0..e1f6ab9800ee 100644 > --- a/arch/arm64/kvm/sdei.c > +++ b/arch/arm64/kvm/sdei.c > @@ -455,6 +455,48 @@ static unsigned long hypercall_mask(struct kvm_vcpu *vcpu, bool mask) > return ret; > } > > +static unsigned long hypercall_signal(struct kvm_vcpu *vcpu) > +{ > + struct kvm_sdei_vcpu *vsdei = vcpu->arch.sdei; > + struct kvm_sdei_event *event; > + unsigned int num = smccc_get_arg(vcpu, 1); > + unsigned long ret = SDEI_SUCCESS; > + > + /* > + * The event must be the software signaled one, whose number > + * is zero. > + */ > + if (!kvm_sdei_is_sw_signaled(num)) { > + ret = SDEI_INVALID_PARAMETERS; > + goto out; > + } > + > + spin_lock(&vsdei->lock); > + > + /* Check if the vcpu has been masked */ > + if (vsdei->masked) { > + ret = SDEI_INVALID_PARAMETERS; > + goto unlock; > + } You should still be able to signal an event if the vCPU is masked. Just means the bit will rot in the pending bitmap until the vCPU is unmasked. -- Thanks, Oliver _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm