Some of our test folks tried to run a recent-ish qemu (nearly 2.5) combined with an old host kernel (and a virtio-1 capable guest).
In that setup, we had the transport (in that case, virtio-ccw) advertise VERSION_1 as it is a revision 1 device. However, the old vhost driver did not support virtio-1 and therefore cleared the VERSION_1 bit. In the end, qemu did not offer VERSION_1 to the guest for a revision 1 device, which the guest treats as a fatal error. It looks to me as if virtio-pci has the same problem: The kernel will detect a modern device as by the I/O layout and then barf at the missing VERSION_1 feature bit. We _could_ make this missing VERSION_1 bit non-fatal in the guest, but that does not fix guests that are already out there. The problem is that the transport cannot know whether the VERSION_1 bit will be pulled from under it later during device setup: This is only done in the ->get_features() callback when virtio-net will handle the features supported by vhost. I'm currently lacking a good idea on how to fix this, but I think that is an issue that should be dealt with for 2.5...