KVM: PIT support for HPET legacy mode
authorBeth Kon <eak@us.ibm.com>
Tue, 7 Jul 2009 15:50:38 +0000 (11:50 -0400)
committerAvi Kivity <avi@redhat.com>
Thu, 10 Sep 2009 05:33:12 +0000 (08:33 +0300)
commite9f4275732add046fed4a548b8dbb98dbe500d2f
tree8d9e22bbc6a9557f95712aaa98534d5983034252
parent0d1de2d901f4ba0972a3886496a44fb1d3300dbd
KVM: PIT support for HPET legacy mode

When kvm is in hpet_legacy_mode, the hpet is providing the timer
interrupt and the pit should not be. So in legacy mode, the pit timer
is destroyed, but the *state* of the pit is maintained. So if kvm or
the guest tries to modify the state of the pit, this modification is
accepted, *except* that the timer isn't actually started. When we exit
hpet_legacy_mode, the current state of the pit (which is up to date
since we've been accepting modifications) is used to restart the pit
timer.

The saved_mode code in kvm_pit_load_count temporarily changes mode to
0xff in order to destroy the timer, but then restores the actual
value, again maintaining "current" state of the pit for possible later
reenablement.

[avi: add some reserved storage in the ioctl; make SET_PIT2 IOW]
[marcelo: fix memory corruption due to reserved storage]

Signed-off-by: Beth Kon <eak@us.ibm.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm.h
arch/x86/kvm/i8254.c
arch/x86/kvm/i8254.h
arch/x86/kvm/x86.c
include/linux/kvm.h