summaryrefslogtreecommitdiff
path: root/ArmPkg/Drivers/TimerDxe
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2014-09-18 21:16:47 +0000
committeroliviermartin <oliviermartin@6f19259b-4bc3-4df7-8a09-765794883524>2014-09-18 21:16:47 +0000
commitb1a633434ddc5fc28de817debd963f7845fb78c7 (patch)
tree11b286342194d29fd1ec56b2628191a2eea27685 /ArmPkg/Drivers/TimerDxe
parent601e3607864e680aaabea81f6eb3c49d9edd17e9 (diff)
downloadedk2-b1a633434ddc5fc28de817debd963f7845fb78c7.zip
edk2-b1a633434ddc5fc28de817debd963f7845fb78c7.tar.gz
edk2-b1a633434ddc5fc28de817debd963f7845fb78c7.tar.bz2
ArmPkg/TimerDxe: add workaround for KVM timer interrupt handling
KVM on ARM currently masks the timer interrupt on the timer side when delivering an interrupt to the guest. This itself is a workaround for an issue where the interrupt is reraised and trapped by the host as soon as the guest is entered, resulting in the guest being starved. Work around this by calling ArmGenericTimerEnable () after servicing each interrupt. The virtual version of ArmGenericTimerCounterLib will then make sure to unmask the interrupt again. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-By: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16144 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPkg/Drivers/TimerDxe')
-rw-r--r--ArmPkg/Drivers/TimerDxe/TimerDxe.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/ArmPkg/Drivers/TimerDxe/TimerDxe.c b/ArmPkg/Drivers/TimerDxe/TimerDxe.c
index 2efe0fe..d0a819f 100644
--- a/ArmPkg/Drivers/TimerDxe/TimerDxe.c
+++ b/ArmPkg/Drivers/TimerDxe/TimerDxe.c
@@ -337,6 +337,7 @@ TimerInterruptHandler (
// Set next compare value
ArmGenericTimerSetCompareVal (CompareValue);
+ ArmGenericTimerEnableTimer ();
}
// Enable timer interrupts