At least in Linux we don't really work with deadlines; if there are issues they need to be fixed even if it takes longer. I don't expect the version in .21 to be really usable anyways; it is clearly
still in development.
we re-used the APIC and IO-APIC, this is uber rocket science. We've been doing things this way, with public patches for over a year, and you've even been CC'd on some of the discussions. So it is a little late to tell us - "redesign your hypervisor, or else.."
It shouldn't touch the hypervisor, just the paravirt VMI backend shouldn't it?
I assume you could do a very minimal APIC layer that is just enough to talk to your softapic and a genapic backend for IPIs.
At least I would welcome anything that shrinks the number of paravirt hooks.
I'm just not sure it would be less hooks: you would probably need
functions to start other CPUs at least.
I must admit I also didn't quite get what was the big problem with
hooking apic_read/apic_write.
For the timer you just need to use a own exclusive clocksource that never touches PIT.
We faithfully emulate lapic, io_apic, the pit, pic, and a normal interrupt subsystem. We can't magically stop using these things because we have to support traditional full virtualization. Which means any version of Linux, virtual interrupt controller or not, is going to boot up, find these things, and try to use them. So for a paravirt kernel, either we have to disable each of these things in the Linux code or just re-use them.
If you don't enable them they should be already disabled as default state, shouldn't they?
With an own custom clocksource and possible own APIC layer nobody
would ever enable the APICs.
1) Rewrite the interrupt subsystem of our hypervisor, making it incompatible with full virtualization, so that we can support an abstract interrupt controller with a "clean" interface
What do you mean with rewrite? It's quite easy to add a new
backend to the generic IRQ code. They aren't a lot of code.
You could probably do a much simpler version, couldn't you? A lot of the stuff in apic.c/io_apic.c shouldn't be needed for a clean virtual
interface. But yes it would probably be still a lot of code.
Still (2) is probably best for now, but the other alternatives
are not as ridiculous as you paint them.