ia64/xen-unstable
changeset 13475:b4df7de0cbf7
[IA64] Fix oops message from timer_interrupton VTI domain
This patch intends to fix the oops message from timer_interrupt on
VTI domain. This problem occurred when we test PV-on-HVM driver by
ltp-20061121. Typical message shown as follows.
ltp Now Running...( Exception mode )
dom=domVTI
1 times
Unable to find swap-space signature
Oops: timer tick before it's due (itc=ed98bb5849,itm=ed98bb5849)
Oops: timer tick before it's due (itc=f20bca8ca3,itm=f20bca8ca3)
Oops: timer tick before it's due (itc=f4ea4e2b32,itm=f4ea4e2b32)
mmap1(7392): unaligned access to 0x60000fffffffb634, ip=0x200000000004fad0
mmap1(7392): unaligned access to 0x60000fffffffb634, ip=0x200000000004fad0
ltp End
These oops messages are generated because timer_interrupt checks
the condition itc > itm. Currently Xen-hypervisor outputs following
values, max(current_itc,vtm->last_itc). Sometimes oops message
appeared if we use the value of vtm->last_itc as ia64_get_itc()
return value, because the vtm->last_itc is same as itm. To fix this
issue, it needs to add return value like +1.
But, ia64_get_itc() is handled at vmx_asm_mov_from_ar@optvfault.S
and it works same logic of now_itc()@vlsapic.c. And these routines
shared vtm->last_itc. So I fix this problem by adding +1 at caller
of update_last_itc.
Signed-off-by: Atsushi SAKAI <sakaia@jp.fujitsu.com>
This patch intends to fix the oops message from timer_interrupt on
VTI domain. This problem occurred when we test PV-on-HVM driver by
ltp-20061121. Typical message shown as follows.
ltp Now Running...( Exception mode )
dom=domVTI
1 times
Unable to find swap-space signature
Oops: timer tick before it's due (itc=ed98bb5849,itm=ed98bb5849)
Oops: timer tick before it's due (itc=f20bca8ca3,itm=f20bca8ca3)
Oops: timer tick before it's due (itc=f4ea4e2b32,itm=f4ea4e2b32)
mmap1(7392): unaligned access to 0x60000fffffffb634, ip=0x200000000004fad0
mmap1(7392): unaligned access to 0x60000fffffffb634, ip=0x200000000004fad0
ltp End
These oops messages are generated because timer_interrupt checks
the condition itc > itm. Currently Xen-hypervisor outputs following
values, max(current_itc,vtm->last_itc). Sometimes oops message
appeared if we use the value of vtm->last_itc as ia64_get_itc()
return value, because the vtm->last_itc is same as itm. To fix this
issue, it needs to add return value like +1.
But, ia64_get_itc() is handled at vmx_asm_mov_from_ar@optvfault.S
and it works same logic of now_itc()@vlsapic.c. And these routines
shared vtm->last_itc. So I fix this problem by adding +1 at caller
of update_last_itc.
Signed-off-by: Atsushi SAKAI <sakaia@jp.fujitsu.com>
author | awilliam@xenbuild2.aw |
---|---|
date | Wed Jan 24 12:28:05 2007 -0700 (2007-01-24) |
parents | b8de061f3dc6 |
children | 730e24a1594a |
files | xen/arch/ia64/vmx/vlsapic.c |
line diff
1.1 --- a/xen/arch/ia64/vmx/vlsapic.c Wed Jan 24 12:21:37 2007 -0700 1.2 +++ b/xen/arch/ia64/vmx/vlsapic.c Wed Jan 24 12:28:05 2007 -0700 1.3 @@ -171,7 +171,12 @@ static void vtm_timer_fn(void *data) 1.4 } else 1.5 vtm->pending = 1; 1.6 1.7 - update_last_itc(vtm, VCPU(vcpu, itm)); // update vITC 1.8 + /* 1.9 + * "+ 1" is for fixing oops message at timer_interrupt() on VTI guest. 1.10 + * If oops checking condition changed to timer_after_eq() on VTI guest, 1.11 + * this parameter should be erased. 1.12 + */ 1.13 + update_last_itc(vtm, VCPU(vcpu, itm) + 1); // update vITC 1.14 } 1.15 1.16 void vtm_init(VCPU *vcpu)