From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ml20z-0003DO-V6 for qemu-devel@nongnu.org; Tue, 08 Sep 2009 10:49:50 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ml20v-00037N-9b for qemu-devel@nongnu.org; Tue, 08 Sep 2009 10:49:49 -0400 Received: from [199.232.76.173] (port=50479 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ml20u-00036l-Ks for qemu-devel@nongnu.org; Tue, 08 Sep 2009 10:49:44 -0400 Received: from mx1.redhat.com ([209.132.183.28]:32626) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Ml20u-0000PU-4N for qemu-devel@nongnu.org; Tue, 08 Sep 2009 10:49:44 -0400 Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n88EnfLR021360 for ; Tue, 8 Sep 2009 10:49:42 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n88EnfD7011275 for ; Tue, 8 Sep 2009 10:49:41 -0400 From: "Yan Vugenfirer" Date: Tue, 8 Sep 2009 10:49:41 -0400 (EDT) Message-ID: <00a201ca3093$980153b0$c803fb10$@com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_00A3_01CA30AC.BD4E8BB0" Content-Language: en-us Subject: [Qemu-devel] [PATCH] VirtIO: Fix QEMU crash during Windows PNP tests List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multipart message in MIME format. ------=_NextPart_000_00A3_01CA30AC.BD4E8BB0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hello, In some cases bus driver can deassert "bus master" bit in PCI command register. The driver will no longer be able to update related registers in the device. Eventually it will cause QEMU to exit in "virtqueue_num_heads" function. Attached path that fixes the described issue. Best regards, Yan Vugenfirer. ------=_NextPart_000_00A3_01CA30AC.BD4E8BB0 Content-Type: application/octet-stream; name="0001-VirtIO-Fix-QEMU-crash-during-Windows-PNP-tests.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0001-VirtIO-Fix-QEMU-crash-during-Windows-PNP-tests.patch" >>From 3fdafbdfad676ec8479dc073cff70bf356868bfe Mon Sep 17 00:00:00 2001=0A= From: Yan Vugenfirer =0A= Date: Tue, 8 Sep 2009 10:08:14 -0400=0A= Subject: [PATCH] VirtIO: Fix QEMU crash during Windows PNP tests=0A= =0A= ---=0A= hw/virtio-pci.c | 14 ++++++++++++--=0A= 1 files changed, 12 insertions(+), 2 deletions(-)=0A= =0A= diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c=0A= index f812ab7..f7a51ff 100644=0A= --- a/hw/virtio-pci.c=0A= +++ b/hw/virtio-pci.c=0A= @@ -364,8 +364,17 @@ static void virtio_map(PCIDevice *pci_dev, int = region_num,=0A= static void virtio_write_config(PCIDevice *pci_dev, uint32_t address,=0A= uint32_t val, int len)=0A= {=0A= + VirtIOPCIProxy *proxy =3D DO_UPCAST(VirtIOPCIProxy, pci_dev, = pci_dev);=0A= +=0A= + if (PCI_COMMAND =3D=3D address) {=0A= + if (!(val & PCI_COMMAND_MASTER)) {=0A= + proxy->vdev->status &=3D !VIRTIO_CONFIG_S_DRIVER_OK;=0A= + }=0A= + }=0A= +=0A= pci_default_write_config(pci_dev, address, val, len);=0A= - msix_write_config(pci_dev, address, val, len);=0A= + if(proxy->vdev->nvectors)=0A= + msix_write_config(pci_dev, address, val, len);=0A= }=0A= =0A= static const VirtIOBindings virtio_pci_bindings =3D {=0A= @@ -407,11 +416,12 @@ static void virtio_init_pci(VirtIOPCIProxy *proxy, = VirtIODevice *vdev,=0A= msix_bar_size(&proxy->pci_dev),=0A= PCI_ADDRESS_SPACE_MEM,=0A= msix_mmio_map);=0A= - proxy->pci_dev.config_write =3D virtio_write_config;=0A= proxy->pci_dev.unregister =3D msix_uninit;=0A= } else=0A= vdev->nvectors =3D 0;=0A= =0A= + proxy->pci_dev.config_write =3D virtio_write_config;=0A= +=0A= size =3D VIRTIO_PCI_REGION_SIZE(&proxy->pci_dev) + vdev->config_len;=0A= if (size & (size-1))=0A= size =3D 1 << qemu_fls(size);=0A= -- =0A= 1.5.5.6=0A= =0A= ------=_NextPart_000_00A3_01CA30AC.BD4E8BB0--