]> git.karo-electronics.de Git - karo-tx-linux.git/commit
virtio-pci: make reset operation safer
authorMichael S. Tsirkin <mst@redhat.com>
Thu, 17 Nov 2011 15:41:15 +0000 (17:41 +0200)
committerStephen Rothwell <sfr@canb.auug.org.au>
Thu, 24 Nov 2011 23:13:11 +0000 (10:13 +1100)
commitb1e7691ff51b823842e2ef8a3adebc9fda8c2188
tree7276a130a2d2eddf84660ec2573298e26611a442
parent0859b6f2356716d2707f385bec63b1d11c169060
virtio-pci: make reset operation safer

virtio pci device reset actually just does an I/O
write, which in PCI is really posted, that is it
can complete on CPU before the device has received it.

Further, interrupts might have been pending on
another CPU, so device callback might get invoked after reset.

This conflicts with how drivers use reset, which is typically:
reset
unregister
a callback running after reset completed can race with
unregister, potentially leading to use after free bugs.

Fix by flushing out the write, and flushing pending interrupts.

This assumes that device is never reset from
its vq/config callbacks, or in parallel with being
added/removed, document this assumption.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
drivers/virtio/virtio_pci.c
include/linux/virtio_config.h