Re: [PATCH V6 8/9] virtio: harden vring IRQ

From: Cornelia Huck
Date: Mon May 30 2022 - 11:53:00 EST


On Fri, May 27 2022, Jason Wang <jasowang@xxxxxxxxxx> wrote:

> This is a rework on the previous IRQ hardening that is done for
> virtio-pci where several drawbacks were found and were reverted:
>
> 1) try to use IRQF_NO_AUTOEN which is not friendly to affinity managed IRQ
> that is used by some device such as virtio-blk
> 2) done only for PCI transport
>
> The vq->broken is re-used in this patch for implementing the IRQ
> hardening. The vq->broken is set to true during both initialization
> and reset. And the vq->broken is set to false in
> virtio_device_ready(). Then vring_interrupt() can check and return
> when vq->broken is true. And in this case, switch to return IRQ_NONE
> to let the interrupt core aware of such invalid interrupt to prevent
> IRQ storm.
>
> The reason of using a per queue variable instead of a per device one
> is that we may need it for per queue reset hardening in the future.
>
> Note that the hardening is only done for vring interrupt since the
> config interrupt hardening is already done in commit 22b7050a024d7
> ("virtio: defer config changed notifications"). But the method that is
> used by config interrupt can't be reused by the vring interrupt
> handler because it uses spinlock to do the synchronization which is
> expensive.
>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Cc: "Paul E. McKenney" <paulmck@xxxxxxxxxx>
> Cc: Marc Zyngier <maz@xxxxxxxxxx>
> Cc: Halil Pasic <pasic@xxxxxxxxxxxxx>
> Cc: Cornelia Huck <cohuck@xxxxxxxxxx>
> Cc: Vineeth Vijayan <vneethv@xxxxxxxxxxxxx>
> Cc: Peter Oberparleiter <oberpar@xxxxxxxxxxxxx>
> Cc: linux-s390@xxxxxxxxxxxxxxx
> Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx>
> ---
> drivers/s390/virtio/virtio_ccw.c | 4 ++++
> drivers/virtio/virtio.c | 15 ++++++++++++---
> drivers/virtio/virtio_mmio.c | 5 +++++
> drivers/virtio/virtio_pci_modern_dev.c | 5 +++++
> drivers/virtio/virtio_ring.c | 11 +++++++----
> include/linux/virtio_config.h | 20 ++++++++++++++++++++
> 6 files changed, 53 insertions(+), 7 deletions(-)

Reviewed-by: Cornelia Huck <cohuck@xxxxxxxxxx>