Hi Colin,
D-Link dongle (running via USB passthrough in QEMU and flood pinging it from the out-site). I encountered the I/O signal handling issue once but since its a known problem I mostly ignored that for now.
I had chased that away in "normal" use, but I'm not surprised you could trigger it with a ping flood.
We looked at the problem and could you give this commit [1] a try (it is still WIP and not finalized). It might be helpful to add a diagnostic message to 'alloc' in 'usb/packet_handler.h' to see when the situation occurs.
[1] https://github.com/cnuke/genode/commit/8b4896e7
I switched to those branches, it works for both my dongles (I suppose the correct branch name is cnuke/ath9k_driver_support-2023-06-11 for genode-world).
Thanks for testing; I planned on renaming the branch but that evidently slipped my mind.
If I understand it right, the remaining suggestions are to switch to virt_linux and to re-implement USB with the "Connection" object. For the former I may take a look at it this weekend if I have time. I may also try to build a Sculpt configuration around usb_report_filter and supporting both dongles with the same configuration.
Yes. At the moment you are working with a copy of the wireless stack, which is fine but makes the maintenance more involved. With the MNT Reform2, PC and PinePhone driver we now reference the common parts of the stack and each driver merely contains its specific portions (basically the dummies and required source files that among others result from the different Linux kernel configurations used for each platform).
From my point of view 'virt_linux' is the natural platform for USB device drivers as they are somewhat platform agnostic and do not require the use of the Platform session. So it makes sense to base your wifi driver off of it and access the wireless stack like the other drivers do. Since 'virt_linux' has not been used for device drivers so far there is going to be some friction but probably nothing you cannot handle.
So one way of going forward could be:
1. Adapt your current version (that is based on the PC platform) by using the PC wifi driver as a template to the way the other drivers are by now implemented. That could involve making additions to the wireless stack but that's fine as merging your changes eventually would be the preferred way.
2. Switch the used platform by going from 'pc_lx_emul' to using 'virt_lx_emul'. That will involve extending 'virt_linux'.
3. Re-implement the USB wrapper using the session directly.
Regarding the latter there is supposed to be a change to Genode's USB structures pending so maybe I'll just wait to see what happens with that?
We plan on changing the USB session and the API you are currently using but I don't know the time-frame. That would affect 3. but I hope with the scheduler execution change in place the current USB wrapper will work better for the time being and the focus could be on 1. and 2.
Regards Josef