ia64/xen-unstable

changeset 8918:c18c63f87b7d

[IA64] VTI: Fix two bugs

1. Vmx_check_pending_irq should not be called in vmx_vcpu_set_eoi,
because vmx_vcpu_increment_iip is called after vmx_vcpu_set_eoi. That
is, the first instruction of guest interrupt handler will be skipped.
2. Remove code segment which was used to send events to VTIdomain, when
dom0 was VTIdomain. This is not needed any more, and will cause
VTIdomain on SMP-HOST complain "Unexpected interrupt ..." .

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
author awilliam@xenbuild.aw
date Fri Feb 24 13:38:26 2006 -0700 (2006-02-24)
parents 67ea7868089b
children d940ec92958d
files xen/arch/ia64/vmx/vlsapic.c xen/arch/ia64/vmx/vmx_process.c
line diff
     1.1 --- a/xen/arch/ia64/vmx/vlsapic.c	Fri Feb 24 13:30:39 2006 -0700
     1.2 +++ b/xen/arch/ia64/vmx/vlsapic.c	Fri Feb 24 13:38:26 2006 -0700
     1.3 @@ -575,7 +575,8 @@ void guest_write_eoi(VCPU *vcpu)
     1.4      VLSAPIC_INSVC(vcpu,vec>>6) &= ~(1UL <<(vec&63));
     1.5      local_irq_restore(spsr);
     1.6      VCPU(vcpu, eoi)=0;    // overwrite the data
     1.7 -    vmx_check_pending_irq(vcpu);
     1.8 +    vcpu->arch.irq_new_pending=1;
     1.9 +//    vmx_check_pending_irq(vcpu);
    1.10  }
    1.11  
    1.12  uint64_t guest_read_vivr(VCPU *vcpu)
     2.1 --- a/xen/arch/ia64/vmx/vmx_process.c	Fri Feb 24 13:30:39 2006 -0700
     2.2 +++ b/xen/arch/ia64/vmx/vmx_process.c	Fri Feb 24 13:38:26 2006 -0700
     2.3 @@ -262,10 +262,10 @@ void leave_hypervisor_tail(struct pt_reg
     2.4   		 *
     2.5   		 * Now hardcode the vector as 0x10 temporarily
     2.6   		 */
     2.7 - 		if (event_pending(v)&&(!(VLSAPIC_INSVC(v,0)&(1UL<<0x10)))) {
     2.8 - 			VCPU(v, irr[0]) |= 1UL << 0x10;
     2.9 - 			v->arch.irq_new_pending = 1;
    2.10 - 		}
    2.11 +// 		if (event_pending(v)&&(!(VLSAPIC_INSVC(v,0)&(1UL<<0x10)))) {
    2.12 +// 			VCPU(v, irr[0]) |= 1UL << 0x10;
    2.13 +// 			v->arch.irq_new_pending = 1;
    2.14 +// 		}
    2.15  
    2.16   		if ( v->arch.irq_new_pending ) {
    2.17   			v->arch.irq_new_pending = 0;