The refactoring, absolutely. But if I have kernel support for zero copy tomorrow, do I wait until qemu completes refactoring the VLAN API, or do I hack something in so I can test it and get the benefit to users?
The only reasonable things to do IMHO is for as much as humanly possible to be deferred to QEMU or for you to comes to terms with your role as a defacto QEMU maintainer and start pushing back more on patch sets that don't take into consideration TCG/non-KVM environments :-)
I do that whenever possible -- and it most often is possible.
But neither kvm nor tcg are not going to be supersets of the other. Of course qemu is not a subset of kvm as it has a much wider target/host variety. But also kvm will always have features that tcg does not have. For example AVX is easy to implement with a few lines in the kernel and qemu, but would take a massive effort in tcg. It would have a large performance impact for AVX-enabled apps/guests/hosts combinations, not so much for tcg.
kvm wants features for large-scale production deployment. This means focus on performance and managebility. qemu/tcg is more for hobbyist use or as a developer tool for developing operating system kernels. This means more focus on ease of use.
MCE is a perfect example of something that really has no reason to go in via kvm-userspace since we have enough KVM support in upstream QEMU.
I agree. But the requirement that everything in kvm have a counterpart in tcg is not realistic. The primary use of MCE for example is used to allow a guest to survive bad hardware. I don't see this as being useful in any way on qemu/tcg. A secondary is is to debug mce handling in guests OSes; now this is useful with tcg, but I'd hesitate to call it a requirement, it's more of a nice to have.