Messages in this thread | | | Date | Thu, 28 Sep 2023 17:33:08 +0200 | Subject | Re: [PATCH 1/2] xen: evtchn: Allow shared registration of IRQ handers | From | Juergen Gross <> |
| |
On 29.08.23 14:29, Viresh Kumar wrote: > Currently the handling of events is supported either in the kernel or > userspace, but not both. > > In order to support fast delivery of interrupts from the guest to the > backend, we need to handle the Queue notify part of Virtio protocol in > kernel and the rest in userspace. > > Update the interrupt handler registration flag to IRQF_SHARED for event > channels, which would allow multiple entities to bind their interrupt > handler for the same event channel port. > > Also increment the reference count of irq_info when multiple entities > try to bind event channel to irqchip, so the unbinding happens only > after all the users are gone. > > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > drivers/xen/events/events_base.c | 1 + > drivers/xen/evtchn.c | 2 +- > 2 files changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c > index c7715f8bd452..0182680dab3a 100644 > --- a/drivers/xen/events/events_base.c > +++ b/drivers/xen/events/events_base.c > @@ -1239,6 +1239,7 @@ static int bind_evtchn_to_irq_chip(evtchn_port_t evtchn, struct irq_chip *chip, > } else { > struct irq_info *info = info_for_irq(irq); > WARN_ON(info == NULL || info->type != IRQT_EVTCHN); > + info->refcnt++;
This should be conditional on the WARN_ON() not triggering.
> } > > out: > diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c > index c99415a70051..43f77915feb5 100644 > --- a/drivers/xen/evtchn.c > +++ b/drivers/xen/evtchn.c > @@ -397,7 +397,7 @@ static int evtchn_bind_to_user(struct per_user_data *u, evtchn_port_t port) > if (rc < 0) > goto err; > > - rc = bind_evtchn_to_irqhandler_lateeoi(port, evtchn_interrupt, 0, > + rc = bind_evtchn_to_irqhandler_lateeoi(port, evtchn_interrupt, IRQF_SHARED, > u->name, evtchn); > if (rc < 0) > goto err;
Juergen [unhandled content-type:application/pgp-keys][unhandled content-type:application/pgp-signature] | |