This patchset fixes an error in how we were reporting the architectural timers in the device tree for the virt board. Old KVM host kernels (before 4.4) implemented these timers as edge-triggered, which led us to decide to report them in the DT as edge triggered. However in newer kernels this was fixed and they're level triggered as they're architecturally supposed to be.
Patch 4 fixes up the DT. Patch 1 adds the 2.9 machine type so we can make the DT change only apply to new virt machine types Patches 2 and 3 are a cleanup, so that we can have convenient access to the VirtMachineClass at the point in the code where we want to look at it. We collapse the VirtBoardInfo struct into the VirtMachineState, since the former mostly exists because at the time there was no VirtMachineState. (Most of the diffstat is the result of s/vbi/vms/ on the file to update variable names.) Kernel behaviours as far as I know them: * host v4.3 and earlier: implemented timers as weird sort-of-edge-triggered semantics * host v4.4 and later: timers are level triggered vs * guest pre-4.8: ignore the values in the DT, trust whatever the GIC's reset values are * guest 4.8 before rc6: write the DT values to the GIC config registers * guest newer than rc6 ignore the DT, and always write 'level triggered' to the GIC This combination means that (assuming that post 4.8 guest kernels work at all on pre 4.4 host kernels) I don't expect this to break anything. Testing would probably be a good idea, though: I plan to do some more combinations but kernel builds on my aarch64 system are slow so I thought I'd send out the patchset before I went home today... Peter Maydell (4): hw/arm/virt: add 2.9 machine type hw/arm/virt: Merge VirtBoardInfo and VirtMachineState hw/arm/virt: Rename 'vbi' variables to 'vms' hw/arm/virt: Don't incorrectly claim architectural timer to be edge-triggered include/hw/compat.h | 3 + hw/arm/virt.c | 616 +++++++++++++++++++++++++++------------------------- 2 files changed, 323 insertions(+), 296 deletions(-) -- 2.7.4