ia64/xen-unstable

changeset 12027:ee140fbcb88d

[HVM] Ensure that, if AP is blocked, it is woken by interrupt delivered by IOAPIC.

This fixes 64-bit SMP Windows 2k3 boot.

Signed-off-by: Xiaowei Yang <xiaowei.yang@intel.com>
Signed-off-by: Xin Li <xin.b.li@intel.com>
author kaf24@localhost.localdomain
date Fri Oct 27 18:02:40 2006 +0100 (2006-10-27)
parents a1939d76c0e8
children 3d347263e5d8
files xen/arch/x86/hvm/vioapic.c
line diff
     1.1 --- a/xen/arch/x86/hvm/vioapic.c	Fri Oct 27 18:00:03 2006 +0100
     1.2 +++ b/xen/arch/x86/hvm/vioapic.c	Fri Oct 27 18:02:40 2006 +0100
     1.3 @@ -39,6 +39,7 @@
     1.4  #include <asm/hvm/vpic.h>
     1.5  #include <asm/hvm/support.h>
     1.6  #include <asm/current.h>
     1.7 +#include <asm/event.h>
     1.8  
     1.9  /* HACK: Route IRQ0 only to VCPU0 to prevent time jumps. */
    1.10  #define IRQ0_SPECIAL_ROUTING 1
    1.11 @@ -455,9 +456,10 @@ static void ioapic_deliver(hvm_vioapic_t
    1.12  #endif
    1.13              target = apic_round_robin(s->domain, dest_mode,
    1.14                                        vector, deliver_bitmask);
    1.15 -        if (target)
    1.16 +        if (target) {
    1.17              ioapic_inj_irq(s, target, vector, trig_mode, delivery_mode);
    1.18 -        else
    1.19 +            vcpu_kick(target->vcpu);
    1.20 +        } else
    1.21              HVM_DBG_LOG(DBG_LEVEL_IOAPIC,
    1.22                "null round robin mask %x vector %x delivery_mode %x\n",
    1.23                deliver_bitmask, vector, dest_LowestPrio);
    1.24 @@ -478,8 +480,10 @@ static void ioapic_deliver(hvm_vioapic_t
    1.25              else
    1.26  #endif
    1.27                  target = s->lapic_info[bit];
    1.28 -            if (target)
    1.29 +            if (target) {
    1.30                  ioapic_inj_irq(s, target, vector, trig_mode, delivery_mode);
    1.31 +                vcpu_kick(target->vcpu);
    1.32 +            }
    1.33          }
    1.34          break;
    1.35      }