qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [BUG] virtio-net linux driver fails to probe on MIPS Ma


From: Marcel Apfelbaum
Subject: Re: [Qemu-devel] [BUG] virtio-net linux driver fails to probe on MIPS Malta since 'hw/virtio-pci: fix virtio behaviour'
Date: Tue, 21 Mar 2017 16:16:58 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1

On 03/20/2017 05:43 PM, Michael S. Tsirkin wrote:
On Mon, Mar 20, 2017 at 05:21:22PM +0200, Marcel Apfelbaum wrote:
On 03/17/2017 11:57 PM, James Hogan wrote:
Hi,

I've bisected the following failure of the virtio_net linux v4.10 driver
to probe in QEMU v2.9.0-rc1 emulating a MIPS Malta machine:

virtio_net virtio0: virtio: device uses modern interface but does not have 
VIRTIO_F_VERSION_1
virtio_net: probe of virtio0 failed with error -22

To QEMU commit 9a4c0e220d8a ("hw/virtio-pci: fix virtio behaviour").

It appears that adding ",disable-modern=on,disable-legacy=off" to the
virtio-net -device makes it work again.

I presume this should really just work out of the box. Any ideas why it
isn't?


Hi,


This is strange. This commit changes virtio devices from legacy to virtio 
"transitional".
(your command line changes it to legacy)
Linux 4.10 supports virtio modern/transitional (as far as I know) and on QEMU 
side
there is nothing new.

Michael, do you have any idea?

Thanks,
Marcel

My guess would be firmware mishandling 64 bit BARs - we saw such
a case on sparc previously. As a result you are probably reading
all zeroes from features register or something like that.
Marcel, could you send a patch making the bar 32 bit?
If that helps we know what the issue is.


Hi James,

Can you please check if the below patch fixes the problem?
Please note it is not a solution.

diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index f9b7244..5b4d429 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1671,9 +1671,7 @@ static void virtio_pci_device_plugged(DeviceState *d, 
Error **errp)
         }

         pci_register_bar(&proxy->pci_dev, proxy->modern_mem_bar_idx,
-                         PCI_BASE_ADDRESS_SPACE_MEMORY |
-                         PCI_BASE_ADDRESS_MEM_PREFETCH |
-                         PCI_BASE_ADDRESS_MEM_TYPE_64,
+                         PCI_BASE_ADDRESS_SPACE_MEMORY,
                          &proxy->modern_bar);

         proxy->config_cap = virtio_pci_add_mem_cap(proxy, &cfg.cap);


Thanks,
Marcel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]