semantic: 0.911 device: 0.902 graphic: 0.899 instruction: 0.894 assembly: 0.893 other: 0.886 mistranslation: 0.844 boot: 0.818 vnc: 0.810 socket: 0.805 KVM: 0.770 network: 0.738 [Qemu-devel] [BUG] virtio-net linux driver fails to probe on MIPS Malta since 'hw/virtio-pci: fix virtio behaviour' 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? Cheers James signature.asc Description: Digital signature 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 Cheers James 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. > > Cheers > > James > > 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. Sure, Thanks, Marcel Cheers James 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 Hi Marcel, On Tue, Mar 21, 2017 at 04:16:58PM +0200, Marcel Apfelbaum wrote: > 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); Sorry for the delay trying this, I was away last week. No, it doesn't seem to make any difference. Thanks James signature.asc Description: Digital signature