virtio-pci: fix migration for pci bus master
commit4d43d3f3c8147ade184df9a1e9e82826edd39e19
authorMichael S. Tsirkin <mst@redhat.com>
Thu, 11 Sep 2014 15:34:29 +0000 (11 18:34 +0300)
committerMichael S. Tsirkin <mst@redhat.com>
Thu, 18 Sep 2014 18:51:24 +0000 (18 21:51 +0300)
tree8fc1dfacdaf022da12574d3b1815a3ac07760424
parentd8e80ae37a7acfea416ad9abbe76b453a73d9cc0
virtio-pci: fix migration for pci bus master

Current support for bus master (clearing OK bit)
together with the need to support guests which do not
enable PCI bus mastering, leads to extra state in
VIRTIO_PCI_FLAG_BUS_MASTER_BUG bit, which isn't robust
in case of cross-version migration for the case when
guests use the device before setting DRIVER_OK.

Rip out VIRTIO_PCI_FLAG_BUS_MASTER_BUG and implement a simpler
work-around: treat clearing of PCI_COMMAND as a virtio reset.  Old
guests never touch this bit so they will work.

As reset clears device status, DRIVER and MASTER bits are
now in sync, so we can fix up cross-version migration simply
by synchronising them, without need to detect a buggy guest
explicitly.

Drop tracking VIRTIO_PCI_FLAG_BUS_MASTER_BUG completely.

As reset makes the device quiescent, in the future we'll be able to drop
checking OK bit in a bunch of places.

Cc: Jason Wang <jasowang@redhat.com>
Cc: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
hw/virtio/virtio-pci.c