vbus (if I understand it right) is a whole package of things:
- a way to enumerate, discover, and manage devices
Yes
That part duplicates PCI
Yes, but the important thing to point out is it doesn't *replace* PCI. It simply an alternative.
and it would be pretty hard to convince me we need to move to
something new
But thats just it. You don't *need* to move. The two can coexist side
by side peacefully. "vbus" just ends up being another device that may
or may not be present, and that may or may not have devices on it. In
fact, during all this testing I was booting my guest with "eth0" as
virtio-net, and "eth1" as venet. The both worked totally fine and
harmoniously. The guest simply discovers if vbus is supported via a
cpuid feature bit and dynamically adds it if present.
. virtio-pci (a) works,And it will continue to work
(b) works on Windows.
virtio will continue to work on windows, as well. And if one of my
customers wants vbus support on windows and is willing to pay us to
develop it, we can support *it* there as well.
- a different way of doing interruptsYeah, but this is ok. And I am not against doing that mod we talked
about earlier where I replace dynirq with a pci shim to represent the
vbus. Question about that: does userspace support emulation of MSI
interrupts?
I would probably prefer it if I could keep the vbus IRQ (or
IRQs when I support MQ) from being shared. It seems registering the
vbus as an MSI device would be more conducive to avoiding this.
- a different ring layout, and splitting notifications from the ringAgain, virtio will continue to work. And if we cannot find a way to
collapse virtio and ioq together in a way that everyone agrees on, there
is no harm in having two. I have no problem saying I will maintain
IOQ. There is plenty of precedent for multiple ways to do the same thing.
I don't see the huge win here
- placing the host part in the host kernel
Nothing vbus-specific here.
Well, it depends on what you want. Do you want a implementation that is
virtio-net, kvm, and pci specific while being hardcoded in?
What
happens when someone wants to access it but doesnt support pci? What if
something like lguest wants to use it too? What if you want
virtio-block next? This is one extreme.