• Jason Wang's avatar
    virtio: harden vring IRQ · 8b4ec69d
    Jason Wang authored
    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 22b7050a
    ("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@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: "Paul E. McKenney" <paulmck@kernel.org>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Halil Pasic <pasic@linux.ibm.com>
    Cc: Cornelia Huck <cohuck@redhat.com>
    Cc: Vineeth Vijayan <vneethv@linux.ibm.com>
    Cc: Peter Oberparleiter <oberpar@linux.ibm.com>
    Cc: linux-s390@vger.kernel.org
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    Message-Id: <20220527060120.20964-9-jasowang@redhat.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Reviewed-by: default avatarXuan Zhuo <xuanzhuo@linux.alibaba.com>
    8b4ec69d
virtio_pci_modern_dev.c 19.7 KB