Re: Howto listen to/handle gpio state changes ? Re: [PATCH v2 2/2] drivers: gpio: add virtio-gpio guest driver

From: Grygorii Strashko
Date: Thu Dec 10 2020 - 08:34:25 EST




On 09/12/2020 22:38, Arnd Bergmann wrote:
On Wed, Dec 9, 2020 at 9:22 PM Grygorii Strashko
<grygorii.strashko@xxxxxx> wrote:
On 09/12/2020 14:53, Linus Walleij wrote:
On Wed, Dec 9, 2020 at 12:19 PM Arnd Bergmann <arnd@xxxxxxxxxx> wrote:
On Wed, Dec 9, 2020 at 9:51 AM Linus Walleij <linus.walleij@xxxxxxxxxx> wrote:
On Tue, Dec 8, 2020 at 3:07 PM Enrico Weigelt, metux IT consult <lkml@xxxxxxxxx> wrote:

What we need to understand is if your new usecase is an outlier
so it is simplest modeled by a "mock" irq_chip or we have to design
something new altogether like notifications on changes. I suspect
irq_chip would be best because all drivers using GPIOs for interrupts
are expecting interrupts, and it would be an enormous task to
change them all and really annoying to create a new mechanism
on the side.

I would expect the platform abstraction to actually be close enough
to a chained irqchip that it actually works: the notification should
come in via vring_interrupt(), which is a normal interrupt handler
that calls vq->vq.callback(), calling generic_handle_irq() (and
possibly chained_irq_enter()/chained_irq_exit() around it) like the
other gpio drivers do should just work here I think, and if it did
not, then I would expect this to be just a bug in the driver rather
than something missing in the gpio framework.

Performance/latency-wise that would also be strongly encouraged.

Tglx isn't super-happy about the chained interrupts at times, as they
can create really nasty bugs, but a pure IRQ in fastpath of some
kinde is preferable and intuitive either way.

In my opinion the problem here is that proposed patch somehow describes Front end, but
says nothing about Backend and overall design.

What is expected to be virtualized? whole GPIO chip? or set of GPIOs from different GPIO chips?
Most often nobody want to give Guest access to the whole GPIO chip, so, most probably, smth. similar to
GPIO Aggregator will be needed.

I would argue that it does not matter, the virtual GPIO chip could really
be anything. Certain functions such as a gpio based keyboard require
interrupts, so it sounds useful to make them work.

Agree, and my point was not to discard IRQ support, but solve problem step by step.
And existing Back end, in any form, may just help to understand virtio-gpio protocol spec and
identify missed pieces.

For example, should 'Configuration space' specify if IRQs are supported on not?

--
Best regards,
grygorii