Contributed by pitrh on from the virtually puffed dept.
I worked on vmm/vmd. I had been sitting on a diff since Nantes that implements a real interrupt controller. This is so that we can have real hardclock interrupts and avoid the previous clock hack that made vmd(8) spin at 100% CPU usage.
Once I had that done, I cleaned up and refactored some vmd code, separating out each device into its own module/file. This made it easier for stefan@ to add asynchronous interrupt handling via libevent later in the week.
I next fixed the MSR (model specific register) bitmap. This is a giant mask that tells the processor which MSRs to allow the guest VM direct access to. Some are safe, some aren't, and some don't make sense at all in a VM. This bitmap is now locked down to just the minimial set of MSRs needed for well-behaved guest VMs (and those that aren't well behaved will think they are accessing off-limits MSRs but we just discard writes and return 0s on read).
I also removed some CPUID feature bits exposed to guest VMs, again removing things that aren't implemented or don't make sense in the guest VM (like the various thermal management/speedstep bits).
I wrapped up the week by dusting off my diff to provide a real BIOS inside the guest VM, that will make it easier to boot other types of guests by not having to go through vmd's ELF bootloader. This last bit did not get completed, and that's what I'm working on now.
Thanks to the organizers avsm and Gemma, it was a fun week.
Thanks for the report and all the awsome work on the virtualization system, Mike!
(Comments are closed)