Index: sys/arch/i386/i386/db_interface.c =================================================================== RCS file: /cvsroot/src/sys/arch/i386/i386/db_interface.c,v retrieving revision 1.59 diff -u -p -r1.59 db_interface.c --- sys/arch/i386/i386/db_interface.c 12 May 2008 14:41:07 -0000 1.59 +++ sys/arch/i386/i386/db_interface.c 25 May 2008 23:30:40 -0000 @@ -35,6 +35,7 @@ #include __KERNEL_RCSID(0, "$NetBSD: db_interface.c,v 1.59 2008/05/12 14:41:07 ad Exp $"); +#include "opt_xen.h" #include "opt_ddb.h" #include "opt_multiprocessor.h" @@ -99,12 +100,22 @@ typedef void (vector)(void); extern vector Xintrddbipi; void -db_machine_init() +db_machine_init(void) { #ifdef MULTIPROCESSOR + +#if !defined(XEN) ddb_vec = idt_vec_alloc(0xf0, 0xff); idt_vec_set(ddb_vec, &Xintrddbipi); +#else + xen_idt[xen_idt_idx].vector = 0xf0; + xen_idt[xen_idt_idx].flags = SEL_KPL; + xen_idt[xen_idt_idx].cs = GSEL(GCODE_SEL, SEL_KPL); + xen_idt[xen_idt_idx].address = (unsigned long) &Xintrddbipi; + xen_idt_idx++; +#endif + #endif } Index: sys/arch/i386/i386/machdep.c =================================================================== RCS file: /cvsroot/src/sys/arch/i386/i386/machdep.c,v retrieving revision 1.635 diff -u -p -r1.635 machdep.c --- sys/arch/i386/i386/machdep.c 11 May 2008 14:44:54 -0000 1.635 +++ sys/arch/i386/i386/machdep.c 25 May 2008 23:30:40 -0000 @@ -1095,7 +1095,6 @@ extern vector IDTVEC(svr4_fasttrap); extern vector IDTVEC(mach_trap); #endif #ifdef XEN -#define MAX_XEN_IDT 128 trap_info_t xen_idt[MAX_XEN_IDT]; int xen_idt_idx; #endif Index: sys/arch/i386/include/segments.h =================================================================== RCS file: /cvsroot/src/sys/arch/i386/include/segments.h,v retrieving revision 1.49 diff -u -p -r1.49 segments.h --- sys/arch/i386/include/segments.h 19 Apr 2008 12:10:08 -0000 1.49 +++ sys/arch/i386/include/segments.h 25 May 2008 23:30:40 -0000 @@ -187,8 +187,16 @@ struct region_descriptor { #endif #ifdef _KERNEL -extern union descriptor *gdt, *ldt; +#ifdef XEN +#include + +#define MAX_XEN_IDT 128 +extern trap_info_t xen_idt[MAX_XEN_IDT]; +extern int xen_idt_idx; +#else extern struct gate_descriptor *idt; +#endif +extern union descriptor *gdt, *ldt; void setgate(struct gate_descriptor *, void *, int, int, int, int); void setregion(struct region_descriptor *, void *, size_t);