From 9604f70fdf8e21ec0dbf6eac5e59a0eb8beadd64 Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Thu, 1 Aug 2013 15:39:11 +0300 Subject: pc: disable pci-info for 1.6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The BIOS that we ship in 1.6 does not use pci info from host (yet). Several issues turned up (e.g. around winXP boot crashes). So it's safest to disable that interface for 1.6 machine types for now, leave it on for 1.7 as we have enough time to fix issues if any. Reviewed-by: Richard Henderson Reviewed-by: Andreas Färber Signed-off-by: Michael S. Tsirkin --- hw/i386/pc_piix.c | 9 +++++++-- hw/i386/pc_q35.c | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'hw') diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index ab25458..95c45b8 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -249,12 +249,17 @@ static void pc_init_pci(QEMUMachineInitArgs *args) initrd_filename, cpu_model, 1, 1); } -static void pc_init_pci_1_5(QEMUMachineInitArgs *args) +static void pc_init_pci_1_6(QEMUMachineInitArgs *args) { has_pci_info = false; pc_init_pci(args); } +static void pc_init_pci_1_5(QEMUMachineInitArgs *args) +{ + pc_init_pci_1_6(args); +} + static void pc_init_pci_1_4(QEMUMachineInitArgs *args) { has_pvpanic = false; @@ -340,7 +345,7 @@ static QEMUMachine pc_i440fx_machine_v1_6 = { .name = "pc-i440fx-1.6", .alias = "pc", .desc = "Standard PC (i440FX + PIIX, 1996)", - .init = pc_init_pci, + .init = pc_init_pci_1_6, .hot_add_cpu = pc_hot_add_cpu, .max_cpus = 255, .is_default = 1, diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 2f35d12..6bfc2ca 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -217,12 +217,17 @@ static void pc_q35_init(QEMUMachineInitArgs *args) } } -static void pc_q35_init_1_5(QEMUMachineInitArgs *args) +static void pc_q35_init_1_6(QEMUMachineInitArgs *args) { has_pci_info = false; pc_q35_init(args); } +static void pc_q35_init_1_5(QEMUMachineInitArgs *args) +{ + pc_q35_init_1_6(args); +} + static void pc_q35_init_1_4(QEMUMachineInitArgs *args) { has_pvpanic = false; @@ -234,7 +239,7 @@ static QEMUMachine pc_q35_machine_v1_6 = { .name = "pc-q35-1.6", .alias = "q35", .desc = "Standard PC (Q35 + ICH9, 2009)", - .init = pc_q35_init, + .init = pc_q35_init_1_6, .hot_add_cpu = pc_hot_add_cpu, .max_cpus = 255, DEFAULT_MACHINE_OPTIONS, -- cgit v1.1 From 4965b7f056177ddfb816319e9ff5e766898d0bc5 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Mon, 5 Aug 2013 16:36:40 +0200 Subject: i82801b11: Fix i82801b11 PCI host bridge config space MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pci_bridge_write_config() was not being used. Cc: qemu-stable@nongnu.org Signed-off-by: Gerd Hoffmann Signed-off-by: Andreas Färber Signed-off-by: Michael S. Tsirkin --- hw/pci-bridge/i82801b11.c | 1 + 1 file changed, 1 insertion(+) (limited to 'hw') diff --git a/hw/pci-bridge/i82801b11.c b/hw/pci-bridge/i82801b11.c index 8a5e426..14cd7fd 100644 --- a/hw/pci-bridge/i82801b11.c +++ b/hw/pci-bridge/i82801b11.c @@ -90,6 +90,7 @@ static void i82801b11_bridge_class_init(ObjectClass *klass, void *data) k->device_id = PCI_DEVICE_ID_INTEL_82801BA_11; k->revision = ICH9_D2P_A2_REVISION; k->init = i82801b11_bridge_initfn; + k->config_write = pci_bridge_write_config; set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); } -- cgit v1.1 From 6793dfd1b6a99a79b9f2e3c4d6625ccd6513f240 Mon Sep 17 00:00:00 2001 From: Stefan Hajnoczi Date: Mon, 12 Aug 2013 11:08:09 +0200 Subject: virtio: clear signalled_used_valid when switching from dataplane When the dataplane thread stops, its vring.c implementation synchronizes vring state back to virtio.c so we can continue emulating the virtio device. This patch ensures that virtio.c's signalled_used_valid flag is reset so that we do not suppress guest notifications due to stale signalled_used values. Suggested-by: Kevin Wolf Signed-off-by: Stefan Hajnoczi Signed-off-by: Michael S. Tsirkin --- hw/virtio/dataplane/vring.c | 1 + hw/virtio/virtio.c | 5 +++++ 2 files changed, 6 insertions(+) (limited to 'hw') diff --git a/hw/virtio/dataplane/vring.c b/hw/virtio/dataplane/vring.c index 82cc151..351a343 100644 --- a/hw/virtio/dataplane/vring.c +++ b/hw/virtio/dataplane/vring.c @@ -52,6 +52,7 @@ bool vring_setup(Vring *vring, VirtIODevice *vdev, int n) void vring_teardown(Vring *vring, VirtIODevice *vdev, int n) { virtio_queue_set_last_avail_idx(vdev, n, vring->last_avail_idx); + virtio_queue_invalidate_signalled_used(vdev, n); hostmem_finalize(&vring->hostmem); } diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 09f62c6..706bdf4 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -1059,6 +1059,11 @@ void virtio_queue_set_last_avail_idx(VirtIODevice *vdev, int n, uint16_t idx) vdev->vq[n].last_avail_idx = idx; } +void virtio_queue_invalidate_signalled_used(VirtIODevice *vdev, int n) +{ + vdev->vq[n].signalled_used_valid = false; +} + VirtQueue *virtio_get_queue(VirtIODevice *vdev, int n) { return vdev->vq + n; -- cgit v1.1 From 3561ba14188b3c1e54246ed6db97896bbc082d2f Mon Sep 17 00:00:00 2001 From: "Michael S. Tsirkin" Date: Mon, 12 Aug 2013 12:21:36 +0300 Subject: vhost: clear signalled_used_valid on vhost stop When vhost device stops, its implementation synchronizes kernel state back to virtio.c so we can continue emulating the device in userspace. This patch ensures that virtio.c's signalled_used_valid flag is reset so that userspace does not suppress guest notifications due to stale signalled_used values. Cc: qemu-stable@nongnu.org Signed-off-by: Michael S. Tsirkin --- hw/virtio/vhost.c | 1 + 1 file changed, 1 insertion(+) (limited to 'hw') diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 8f6ab13..9e336ad 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -762,6 +762,7 @@ static void vhost_virtqueue_stop(struct vhost_dev *dev, fflush(stderr); } virtio_queue_set_last_avail_idx(vdev, idx, state.num); + virtio_queue_invalidate_signalled_used(vdev, idx); assert (r >= 0); cpu_physical_memory_unmap(vq->ring, virtio_queue_get_ring_size(vdev, idx), 0, virtio_queue_get_ring_size(vdev, idx)); -- cgit v1.1