VirtIO drivers don't work on Windows: "GLib: Too many handles to wait for!" crash

Bug #1924912 reported by kleines Filmröllchen
12
This bug affects 2 people
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

I ran SerenityOS <https://github.com/SerenityOS/serenity> out of WSL2 with native Windows QEMU. The system runs fine on the Linux QEMU (with Windows X-Server). However, with Windows QEMU I get a hard crash after the following output:

```
[#0 colonel(0:0)]: Scheduler[0]: idle loop running
[init_stage2(2:2)]: PCI [0000:00:00:00] PCI::ID [8086:1237]
[init_stage2(2:2)]: PCI [0000:00:01:00] PCI::ID [8086:7000]
[init_stage2(2:2)]: PCI [0000:00:01:01] PCI::ID [8086:7010]
[init_stage2(2:2)]: PCI [0000:00:01:02] PCI::ID [8086:7020]
[init_stage2(2:2)]: PCI [0000:00:01:03] PCI::ID [8086:7113]
[init_stage2(2:2)]: PCI [0000:00:02:00] PCI::ID [1234:1111]
[init_stage2(2:2)]: PCI [0000:00:03:00] PCI::ID [8086:2922]
[init_stage2(2:2)]: PCI [0000:00:04:00] PCI::ID [1af4:1003]
[init_stage2(2:2)]: PCI [0000:00:05:00] PCI::ID [1af4:1005]
[init_stage2(2:2)]: PCI [0000:00:06:00] PCI::ID [8086:100e]
[#0 init_stage2(2:2)]: BXVGA: framebuffer @ P0xf8000000
[#0 init_stage2(2:2)]: BXVGADevice resolution set to 1024x768 (pitch=4096)
[init_stage2(2:2)]: UHCI: Controller found PCI::ID [8086:7020] @ PCI [0000:00:01:02]
[init_stage2(2:2)]: UHCI: I/O base IO c080
[init_stage2(2:2)]: UHCI: Interrupt line: 11
[#0 init_stage2(2:2)]: UHCI: Allocated framelist at physical address P0x00e40000
[#0 init_stage2(2:2)]: UHCI: Framelist is at virtual address V0xc115d000
[#0 init_stage2(2:2)]: UHCI: QH(0xc115f000) @ 14946304: link_ptr=14946338, element_link_ptr=1
[#0 init_stage2(2:2)]: UHCI: QH(0xc115f020) @ 14946336: link_ptr=14946370, element_link_ptr=1
[#0 init_stage2(2:2)]: UHCI: QH(0xc115f040) @ 14946368: link_ptr=14946402, element_link_ptr=1
[#0 init_stage2(2:2)]: UHCI: QH(0xc115f060) @ 14946400: link_ptr=14946434, element_link_ptr=1
[#0 init_stage2(2:2)]: UHCI: QH(0xc115f080) @ 14946432: link_ptr=14958593, element_link_ptr=1
[#0 init_stage2(2:2)]: UHCI: Reset completed
[#0 init_stage2(2:2)]: UHCI: Started
[#0 init_stage2(2:2)]: DMIExpose: SMBIOS 32bit Entry point @ P0x000f5870
[#0 init_stage2(2:2)]: DMIExpose: Data table @ P0x000f5890
[#0 init_stage2(2:2)]: VirtIOConsole: Found @ PCI [0000:00:04:00]
[#0 init_stage2(2:2)]: Trying to unregister unused handler (?)
[#0 init_stage2(2:2)]: VirtIOConsole: Multi port is not yet supported!
[#0 init_stage2(2:2)]: VirtIOConsole: cols: 0, rows: 0, max nr ports 0
qemu-system-i386.exe: warning: GLib: Too many handles to wait for!
```

The lines starting with [ are SerenityOS output; QEMU warns "GLib: Too many handles to wait for!" and crashes right after (can't even Ctrl-C in the WSL command line, force-close in Windows necessary). A window is still spawned but as the OS already switched out of text mode, just a black screen is visible as QEMU crashes.

I first thought this to be an issue with SerenityOS and reported it over there: <https://github.com/SerenityOS/serenity/issues/6422>. The kernel devs pointed out that this seems to be a VirtIO driver/device issue on the Windows build of QEMU, because the Serenity kernel tries to initialize VirtIO devices which apparently crashes QEMU. There will be mitigations from the SerenityOS side (by allowing to disable VirtIO on boot) but it would of course be great if QEMU handled this properly.

Version info: Both QEMU 6.0.0-rc3 and 5.2.0 exhibit this issue. Windows release is 20H2, WSL2 is running Debian 10.9. SerenityOS has no proper version but it was reproduced on the most current commits as of 18/04/2021.

Tags: windows
Revision history for this message
Stefan Weil (ubuntu-weilnetz) wrote :

Did you build your own Windows binary based on the official sources? Or did you use a precompiled binary? If yes, which one?

Please describe the exact steps to reproduce the issue.

Revision history for this message
kleines Filmröllchen (kleinesfilmroellchen) wrote :

I used the pre-built binaries with the versions described above. I did not change any install options so this can be reproduced after using the official install binaries for each version.

Revision history for this message
Laurent Vivier (laurent-vivier) wrote : Re: [Bug 1924912] VirtIO drivers don't work on Windows: "GLib: Too many handles to wait for!" crash

Le 19/04/2021 à 12:39, Stefan Weil a écrit :
> I can confirm the issue also with latest official QEMU sources.
>
> Related issue URLs:
>
> https://github.com/tesseract-ocr/tesseract/issues/2838
>
> https://bugs.launchpad.net/qemu/+bug/1924912
>
> Instructions and files required to reproduce the issue:
>
> https://qemu.weilnetz.de/test/bugs/1924912/
>
> Michael, Laurent, maybe you have an idea how to narrow down this issue?

Could it be related to the number of file descriptors that can differ between linux an windows?

We have a series of patches that sets the number of queues to the number of vCPU:

a4eef0711b2c vhost-user-blk-pci: default num_queues to -smp N
9445e1e15e66 virtio-blk-pci: default num_queues to -smp N
6a558822849f virtio-scsi-pci: default num_queues to -smp N
4e5163bd8444 virtio-scsi: introduce a constant for fixed virtqueues
1436f32a84c3 virtio-pci: add virtio_pci_optimal_num_queues() helper

And I think it can have inpact on the number of open file descriptors.

You can try by specifiying "num_queues=1" with the virtio interfaces on the QEMU command line.
(ot choose a machine type earlier than 5.2)

Thanks,
Laurent

Revision history for this message
Thomas Huth (th-huth) wrote :

The QEMU project is currently moving its bug tracking to another system.
For this we need to know which bugs are still valid and which could be
closed already. Thus we are setting the bug state to "Incomplete" now.

If the bug has already been fixed in the latest upstream version of QEMU,
then please close this ticket as "Fix released".

If it is not fixed yet and you think that this bug report here is still
valid, then you have two options:

1) If you already have an account on gitlab.com, please open a new ticket
for this problem in our new tracker here:

    https://gitlab.com/qemu-project/qemu/-/issues

and then close this ticket here on Launchpad (or let it expire auto-
matically after 60 days). Please mention the URL of this bug ticket on
Launchpad in the new ticket on GitLab.

2) If you don't have an account on gitlab.com and don't intend to get
one, but still would like to keep this ticket opened, then please switch
the state back to "New" or "Confirmed" within the next 60 days (other-
wise it will get closed as "Expired"). We will then eventually migrate
the ticket automatically to the new system (but you won't be the reporter
of the bug in the new system and thus you won't get notified on changes
anymore).

Thank you and sorry for the inconvenience.

Changed in qemu:
status: New → Incomplete
Revision history for this message
kleines Filmröllchen (kleinesfilmroellchen) wrote :
Changed in qemu:
status: Incomplete → Fix Released
Revision history for this message
mst (mst-0) wrote :

So it's a virtio console issue on a windows host.

[#0 init_stage2(2:2)]: VirtIOConsole: Found @ PCI [0000:00:04:00]
[#0 init_stage2(2:2)]: Trying to unregister unused handler (?)
[#0 init_stage2(2:2)]: VirtIOConsole: Multi port is not yet supported!
[#0 init_stage2(2:2)]: VirtIOConsole: cols: 0, rows: 0, max nr ports 0
qemu-system-i386.exe: warning: GLib: Too many handles to wait for!

Laurent?

On Mon, Apr 19, 2021 at 04:30:23PM +0200, Laurent Vivier wrote:
> Le 19/04/2021 à 12:39, Stefan Weil a écrit :
> > I can confirm the issue also with latest official QEMU sources.
> >
> > Related issue URLs:
> >
> > https://github.com/tesseract-ocr/tesseract/issues/2838
> >
> > https://bugs.launchpad.net/qemu/+bug/1924912
> >
> > Instructions and files required to reproduce the issue:
> >
> > https://qemu.weilnetz.de/test/bugs/1924912/
> >
> > Michael, Laurent, maybe you have an idea how to narrow down this issue?
>
> Could it be related to the number of file descriptors that can differ between linux an windows?
>
> We have a series of patches that sets the number of queues to the number of vCPU:
>
> a4eef0711b2c vhost-user-blk-pci: default num_queues to -smp N
> 9445e1e15e66 virtio-blk-pci: default num_queues to -smp N
> 6a558822849f virtio-scsi-pci: default num_queues to -smp N
> 4e5163bd8444 virtio-scsi: introduce a constant for fixed virtqueues
> 1436f32a84c3 virtio-pci: add virtio_pci_optimal_num_queues() helper
>
> And I think it can have inpact on the number of open file descriptors.
>
> You can try by specifiying "num_queues=1" with the virtio interfaces on the QEMU command line.
> (ot choose a machine type earlier than 5.2)
>
> Thanks,
> Laurent

Revision history for this message
Laurent Vivier (laurent-vivier) wrote :

Le 26/05/2021 à 11:47, mst a écrit :
> So it's a virtio console issue on a windows host.
>
> [#0 init_stage2(2:2)]: VirtIOConsole: Found @ PCI [0000:00:04:00]
> [#0 init_stage2(2:2)]: Trying to unregister unused handler (?)
> [#0 init_stage2(2:2)]: VirtIOConsole: Multi port is not yet supported!
> [#0 init_stage2(2:2)]: VirtIOConsole: cols: 0, rows: 0, max nr ports 0
> qemu-system-i386.exe: warning: GLib: Too many handles to wait for!
>
> Laurent?

I will answer on gitlab issue:

https://gitlab.com/qemu-project/qemu/-/issues/332

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.