Well, that's the basic force shaping paravirt_ops; many of the calls are
generally used by all backends, and some are more specific. The
entrypoints in paravirt_ops would be an approximate model for this
hypothetical ABI you're talking about.
But the key point you're missing is that this isn't a one-way
interface. The hypervisor backend code makes calls into the kernel's
interfaces as well. We use memory allocation, the interrupt
infrastructure, timers, per-cpu and as many other existing interfaces as
possible, so that we don't have to bloat paravirt_ops with duplicates of
all those other interfaces.
If you're seriously talking about an ABI, then you'd also have to
present stable ABIs for all subsystems the hypervisor backends want to
call into, either by actually freezing the internal linux interfaces
into ABIs, or by effectively duplicating them across the paravirt ABI
(or whatever).
J
-