All of lore.kernel.org
 help / color / mirror / Atom feed
From: Viresh Kumar <viresh.kumar@linaro.org>
To: Arnd Bergmann <arnd@kernel.org>
Cc: "Jason Wang" <jasowang@redhat.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Cornelia Huck" <cohuck@redhat.com>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	"Bartosz Golaszewski" <bgolaszewski@baylibre.com>,
	"Vincent Guittot" <vincent.guittot@linaro.org>,
	"Jean-Philippe Brucker" <jean-philippe@linaro.org>,
	"Bill Mills" <bill.mills@linaro.org>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Enrico Weigelt, metux IT consult" <info@metux.net>,
	virtio-dev@lists.oasis-open.org,
	"Geert Uytterhoeven" <geert@linux-m68k.org>
Subject: Re: [virtio-dev] Re: [PATCH V5 2/2] virtio-gpio: Add support for interrupts
Date: Tue, 20 Jul 2021 11:17:53 +0530	[thread overview]
Message-ID: <20210720054753.cmhrsdcmvpcxg3ed@vireshk-i7> (raw)
In-Reply-To: <CAK8P3a0AH0dAkCtvZNtP3JJ=XVi9ybw=cTVw0C9yS2Vf0yKf8Q@mail.gmail.com>

On 16-07-21, 20:49, Arnd Bergmann wrote:
> It's important to get the order correct here, and there are a lot of variations
> in hardware, so we need to pick the one that works best. Unfortunately
> I can never quite remember what they are either ;-)
> 
> Looking at the two ways of handling irqs that we care about
> 
> 1. edge interrupts:
> 
> void handle_edge_irq(struct irq_desc *desc)
> {
> ...
>         desc->irq_data.chip->irq_ack(&desc->irq_data);
>         do {
>               ...
>               handle_irq_event(desc);
>         } while ((desc->istate & IRQS_PENDING) &&
>                  !irqd_irq_disabled(&desc->irq_data));
>        ...
> }
> 
> Here the irq gets rearmed first and then we call into the driver
> that has requested it. That driver processes all information that
> is associated with the event, or possibly multiple events that
> have happened since the handler waslast called. If another irq
> arrives after the driver is done looking for them, we will receive
> another event from the virtio device and all is good.
> 
> Ideally the 'irq_ack' would simply involve queuing another
> request for an event on the second virtqueue. However I don't
> know if there is a way for the virtio-gpio driver to know whether
> this request has been observed by the virtio-gpio device.

The driver will send an event (virtqueue_kick()) after the buffer is
queued, so we can just assume that device has been notified and it has
seen it.

> If not, the irq_ack may arrive at the device only after the
> handle_irq_event() function is complete and we miss an interrupt.
> 
> 2. level interrupts:
> 
> void handle_level_irq(struct irq_desc *desc)
> {
>         mask_ack_irq(desc);
>         ...
>         handle_irq_event(desc);
>         ...
>         cond_unmask_irq(desc);
> }
> 
> Going through this the literal way would mean sending a mask,

One important think worth mentioning here is that the mask/unmask work
here will be done when irq_bus_sync_unlock() is called as this is a
slow bus and we can't do virtio-messages on mask/unmask, irq-context I
believe.

> ack, and unmask request through virtio and waiting for a reply
> each time, but that does seem excessive.
> 
> As long as the interrupt is masked initially (since there is no
> event request pending immediately after the irq event reply),

What irq event reply ?

> I would hope that we can get away with simply enqueuing the
> request in the 'cond_unmask_irq' step. In this case, we would
> call all handlers for this the level irq with the line pending
> and masked. After the handlers are complete, it should no
> longer be pending and we can unmask it. If another event comes
> in after the handler, it gets pending again, and we get sent a
> new irq event reply after the Ack.

Okay..

-- 
viresh


  reply	other threads:[~2021-07-20  5:47 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-16  7:39 [PATCH V5 0/2] virtio: Add specification for virtio-gpio Viresh Kumar
2021-07-16  7:39 ` [PATCH V5 1/2] virtio-gpio: Add the device specification Viresh Kumar
2021-07-16  8:23   ` Arnd Bergmann
2021-07-16 16:26     ` Viresh Kumar
2021-07-16 18:20       ` Arnd Bergmann
2021-07-19  9:29         ` Viresh Kumar
2021-07-19 10:40           ` [virtio-dev] " Arnd Bergmann
2021-07-19 10:50             ` Viresh Kumar
2021-07-19 11:48             ` Geert Uytterhoeven
2021-07-19  7:32       ` Viresh Kumar
2021-07-16  9:13   ` Geert Uytterhoeven
2021-07-16 15:43     ` Viresh Kumar
2021-07-16 15:22   ` Michael S. Tsirkin
2021-07-16 15:41     ` Viresh Kumar
2021-07-16  7:39 ` [virtio-dev] [PATCH V5 2/2] virtio-gpio: Add support for interrupts Viresh Kumar
2021-07-16  9:02   ` Arnd Bergmann
2021-07-16 15:17     ` [virtio-dev] " Viresh Kumar
2021-07-16 16:19       ` Arnd Bergmann
2021-07-16 16:50         ` Viresh Kumar
2021-07-16 18:49           ` Arnd Bergmann
2021-07-20  5:47             ` Viresh Kumar [this message]
2021-07-20  7:01               ` Arnd Bergmann
2021-07-20  7:11                 ` Viresh Kumar
2021-07-20  7:22                   ` Arnd Bergmann
2021-07-19 10:24   ` Viresh Kumar
2021-07-19 12:00     ` Arnd Bergmann
2021-07-20  6:11       ` Viresh Kumar
2021-07-20  7:17         ` Arnd Bergmann
2021-07-20  7:53           ` Viresh Kumar
2021-07-20  8:10             ` Arnd Bergmann
2021-07-20  8:42               ` Viresh Kumar
2021-07-20  9:50             ` Michael S. Tsirkin
2021-07-19 15:11     ` Michael S. Tsirkin
2021-07-20  4:19       ` Viresh Kumar
2021-07-16  9:57 ` [PATCH V5 0/2] virtio: Add specification for virtio-gpio Arnd Bergmann
2021-07-16 16:57   ` Viresh Kumar

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=20210720054753.cmhrsdcmvpcxg3ed@vireshk-i7 \
    --to=viresh.kumar@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=arnd@kernel.org \
    --cc=bgolaszewski@baylibre.com \
    --cc=bill.mills@linaro.org \
    --cc=cohuck@redhat.com \
    --cc=geert@linux-m68k.org \
    --cc=info@metux.net \
    --cc=jasowang@redhat.com \
    --cc=jean-philippe@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=mst@redhat.com \
    --cc=vincent.guittot@linaro.org \
    --cc=virtio-dev@lists.oasis-open.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.