On 08/04/2011 08:05 AM, Avi Kivity wrote:
From: "Michael S. Tsirkin"<mst@xxxxxxxxxx>
We originally did get config on map, so that
following write accesses are done on an updated config.
New memory API doesn't give us a callback
on map, and arguably, devices don't know when
cpu really can access there. So updating on
init seems cleaner.
Signed-off-by: Michael S. Tsirkin<mst@xxxxxxxxxx>
Signed-off-by: Avi Kivity<avi@xxxxxxxxxx>
---
hw/virtio-pci.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index d685243..ca1f12f 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -506,9 +506,6 @@ static void virtio_map(PCIDevice *pci_dev, int region_num,
register_ioport_read(addr, config_len, 1, virtio_pci_config_readb, proxy);
register_ioport_read(addr, config_len, 2, virtio_pci_config_readw, proxy);
register_ioport_read(addr, config_len, 4, virtio_pci_config_readl, proxy);
-
- if (vdev->config_len)
- vdev->get_config(vdev, vdev->config);
}
static void virtio_write_config(PCIDevice *pci_dev, uint32_t address,
@@ -689,6 +686,10 @@ void virtio_init_pci(VirtIOPCIProxy *proxy, VirtIODevice *vdev)
proxy->host_features |= 0x1<< VIRTIO_F_NOTIFY_ON_EMPTY;
proxy->host_features |= 0x1<< VIRTIO_F_BAD_FEATURE;
proxy->host_features = vdev->get_features(vdev, proxy->host_features);
+
+ if (vdev->config_len) {
+ vdev->get_config(vdev, vdev->config);
+ }
Thinking more closely, I don't think this right.
Updating on map ensured that the config was refreshed after each time
the bar was mapped. In the very least, the config needs to be refreshed
during reset because the guest may write to the guest space which should
get cleared after reset.
Regards,
Anthony Liguori
}
static int virtio_blk_init_pci(PCIDevice *pci_dev)
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html