vmx-pit-reset.patch
PATCH 1/1 vmx-pit-reset.patch
A VMX guest can reprogram the same PIT channel twice. We should not create two ac_timers to handle this case.
Signed-off-by Edwin Zhai <[email protected]>
Signed-off-by Arun Sharma <[email protected]>
xen/arch/x86/vmx_intercept.c +10 -3
@@ -217,6 +217,14 @@ void vmx_hooks_assist(struct exec_domain/* load init count*/ if (p->state ==STATE_IORESP_HOOK ) { +/* set up actimer, handle re-init */ +if (active_ac_timer (&(vpit->pit_timer)) ) { +VMX_DBG_LOG (DBG_LEVEL_1 ,"VMX_PIT: guest reset PIT with channel %lx!\n" , (unsigned long ) ((p->u.data >>24 ) &0x3 ) ); +rem_ac_timer (&(vpit->pit_timer)); + } +else +init_ac_timer (&(vpit->pit_timer)); +/* init count for this channel */ vpit->init_val = (p->u.data &0xFFFF ) ;/* frequency(ms) of pit */
@@ -251,12 +259,11 @@ void vmx_hooks_assist(struct exec_domain vpit->intr_bitmap = intr; -/* set up the actimer */ -init_ac_timer (&(vpit->pit_timer)); vpit->pit_timer.cpu =0 ;/*FIXME: change for SMP */ vpit->pit_timer.data = (unsigned long )vpit; vpit->pit_timer.function = pit_timer_fn; -pit_timer_fn ((unsigned long )vpit);/* timer seed */ + +add_ac_timer (&(vpit->pit_timer));/*restore the state*/ p->state =STATE_IORESP_READY ;
Quoted 5 lines · Arun Sharma
A VMX guest can reprogram the same PIT channel twice. We should not create two
ac_timersto handle this case.Signed-off-by Edwin Zhai <[email protected]>Signed-off-by Arun Sharma <[email protected]>
ac_timer interface has changed a little, so this patch won't apply.
-- Keir