[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [IA64] debug_op hypercall and debug points



# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1190394234 21600
# Node ID f3173d151e1d330a387b72426f393d105525dae8
# Parent  b2a02f7ed849287da986673a8f2dacaa1671b101
[IA64] debug_op hypercall and debug points

Add debug_op hypercall.
Add many debug points.

Signed-off-by: Tristan Gingold <tgingold@xxxxxxx>
---
 xen/arch/ia64/linux-xen/entry.S   |    2 
 xen/arch/ia64/vmx/vmx_interrupt.c |    4 +
 xen/arch/ia64/vmx/vmx_phy_mode.c  |    2 
 xen/arch/ia64/vmx/vmx_vcpu.c      |    7 +++
 xen/arch/ia64/vmx/vmx_virt.c      |   29 ++++++++++++++
 xen/arch/ia64/xen/faults.c        |   11 +++--
 xen/arch/ia64/xen/fw_emul.c       |    7 +++
 xen/arch/ia64/xen/hypercall.c     |   32 +++++++++++++++
 xen/arch/ia64/xen/mm.c            |    3 +
 xen/arch/ia64/xen/privop.c        |    5 ++
 xen/include/asm-ia64/debugger.h   |   21 ++++++++--
 xen/include/asm-ia64/domain.h     |    6 ++
 xen/include/asm-ia64/vmx.h        |    2 
 xen/include/public/arch-ia64.h    |   78 ++++++++++++++++++++++++++++++++++++++
 14 files changed, 200 insertions(+), 9 deletions(-)

diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S   Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/linux-xen/entry.S   Fri Sep 21 11:03:54 2007 -0600
@@ -1535,7 +1535,7 @@ ia64_hypercall_table:
        data8 do_ni_hypercall           /*  */
        data8 do_dom0vp_op              /* dom0vp_op */
        data8 do_pirq_guest_eoi         /* arch_1 */
-       data8 do_ni_hypercall           /* arch_2 */           /* 50 */
+       data8 do_ia64_debug_op          /* arch_2 */           /* 50 */
        data8 do_ni_hypercall           /* arch_3 */
        data8 do_ni_hypercall           /* arch_4 */
        data8 do_ni_hypercall           /* arch_5 */
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_interrupt.c
--- a/xen/arch/ia64/vmx/vmx_interrupt.c Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_interrupt.c Fri Sep 21 11:03:54 2007 -0600
@@ -24,6 +24,7 @@
 #include <asm/vmx_vcpu.h>
 #include <asm/vmx_mm_def.h>
 #include <asm/vmx_pal_vsa.h>
+#include <asm/debugger.h>
 
 /* SDM vol2 5.5 - IVA based interruption handling */
 #define INITIAL_PSR_VALUE_AT_INTERRUPTION 0x0000001808028034
@@ -107,6 +108,9 @@ inject_guest_interruption(VCPU *vcpu, u6
 
     viva = vmx_vcpu_get_iva(vcpu);
     regs->cr_iip = viva + vec;
+
+    debugger_event(vec == IA64_EXTINT_VECTOR ?
+                   XEN_IA64_DEBUG_ON_EXTINT : XEN_IA64_DEBUG_ON_EXCEPT);
 }
 
 
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_phy_mode.c
--- a/xen/arch/ia64/vmx/vmx_phy_mode.c  Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_phy_mode.c  Fri Sep 21 11:03:54 2007 -0600
@@ -28,6 +28,7 @@
 #include <xen/sched.h>
 #include <asm/pgtable.h>
 #include <asm/vmmu.h>
+#include <asm/debugger.h>
 
 static const int valid_mm_mode[8] = {
     GUEST_PHYS, /* (it, dt, rt) -> (0, 0, 0) */
@@ -300,6 +301,7 @@ check_mm_mode_switch (VCPU *vcpu,  IA64_
          (old_psr.rt != new_psr.rt )
          ) {
         switch_mm_mode (vcpu, old_psr, new_psr);
+        debugger_event(XEN_IA64_DEBUG_ON_MMU);
     }
 
     return;
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_vcpu.c
--- a/xen/arch/ia64/vmx/vmx_vcpu.c      Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_vcpu.c      Fri Sep 21 11:03:54 2007 -0600
@@ -135,6 +135,13 @@ vmx_vcpu_set_psr(VCPU *vcpu, unsigned lo
     if (FP_PSR(vcpu) & IA64_PSR_DFH)
         regs->cr_ipsr |= IA64_PSR_DFH;
 
+    if (unlikely(vcpu->domain->debugger_attached)) {
+        if (vcpu->domain->arch.debug_flags & XEN_IA64_DEBUG_FORCE_SS)
+            regs->cr_ipsr |= IA64_PSR_SS;
+        if (vcpu->domain->arch.debug_flags & XEN_IA64_DEBUG_FORCE_DB)
+            regs->cr_ipsr |= IA64_PSR_DB;
+    }
+
     check_mm_mode_switch(vcpu, old_psr, new_psr);
     return ;
 }
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_virt.c
--- a/xen/arch/ia64/vmx/vmx_virt.c      Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_virt.c      Fri Sep 21 11:03:54 2007 -0600
@@ -30,6 +30,7 @@
 #include <asm/vmx.h>
 #include <asm/virt_event.h>
 #include <asm/vmx_phy_mode.h>
+#include <asm/debugger.h>
 
 #ifdef BYPASS_VMAL_OPCODE
 static void
@@ -203,6 +204,11 @@ static IA64FAULT vmx_emul_rfi(VCPU *vcpu
     }
 #endif // CHECK_FAULT
 
+    if (debugger_event(XEN_IA64_DEBUG_ON_RFI)) {
+        raise_softirq(SCHEDULE_SOFTIRQ);
+        do_softirq();
+    }
+
     regs=vcpu_regs(vcpu);
     vpsr.val=regs->cr_ipsr;
     if ( vpsr.is == 1 ) {
@@ -279,6 +285,8 @@ static IA64FAULT vmx_emul_ptc_l(VCPU *vc
     }
 #endif // VMAL_NO_FAULT_CHECK
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+
     return vmx_vcpu_ptc_l(vcpu,r3,bits(r2,2,7));
 }
 
@@ -338,6 +346,8 @@ static IA64FAULT vmx_emul_ptc_g(VCPU *vc
     }
 #endif // VMAL_NO_FAULT_CHECK
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+
     return vmx_vcpu_ptc_g(vcpu,r3,bits(r2,2,7));
 }
 
@@ -372,6 +382,8 @@ static IA64FAULT vmx_emul_ptc_ga(VCPU *v
     }
 #endif // VMAL_NO_FAULT_CHECK
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+
     return vmx_vcpu_ptc_ga(vcpu,r3,bits(r2,2,7));
 }
 
@@ -414,6 +426,9 @@ static IA64FAULT vmx_emul_ptr_d(VCPU *vc
     u64 r2,r3;
     if ( ptr_fault_check(vcpu, inst, &r2, &r3 ) == IA64_FAULT )
        return IA64_FAULT;
+
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return vmx_vcpu_ptr_d(vcpu,r3,bits(r2,2,7));
 }
 
@@ -422,6 +437,9 @@ static IA64FAULT vmx_emul_ptr_i(VCPU *vc
     u64 r2,r3;
     if ( ptr_fault_check(vcpu, inst, &r2, &r3 ) == IA64_FAULT )
        return IA64_FAULT;
+
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return vmx_vcpu_ptr_i(vcpu,r3,bits(r2,2,7));
 }
 
@@ -633,6 +651,8 @@ static IA64FAULT vmx_emul_itr_d(VCPU *vc
         return IA64_FAULT;
     }
 
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return (vmx_vcpu_itr_d(vcpu, slot, pte, itir, ifa));
 }
 
@@ -699,6 +719,8 @@ static IA64FAULT vmx_emul_itr_i(VCPU *vc
         return IA64_FAULT;
     }
 
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return vmx_vcpu_itr_i(vcpu, slot, pte, itir, ifa);
 }
 
@@ -760,6 +782,8 @@ static IA64FAULT vmx_emul_itc_d(VCPU *vc
        return IA64_FAULT;
     }
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+    
     return vmx_vcpu_itc_d(vcpu, pte, itir, ifa);
 }
 
@@ -770,6 +794,8 @@ static IA64FAULT vmx_emul_itc_i(VCPU *vc
     if ( itc_fault_check(vcpu, inst, &itir, &ifa, &pte) == IA64_FAULT ) {
        return IA64_FAULT;
     }
+
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
 
     return vmx_vcpu_itc_i(vcpu, pte, itir, ifa);
 }
@@ -1425,6 +1451,9 @@ if ( (cause == 0xff && opcode == 0x1e000
 #else
     inst.inst=opcode;
 #endif /* BYPASS_VMAL_OPCODE */
+
+    debugger_event(XEN_IA64_DEBUG_ON_PRIVOP);
+
     /*
      * Switch to actual virtual rid in rr0 and rr4,
      * which is required by some tlb related instructions.
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c        Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/faults.c        Fri Sep 21 11:03:54 2007 -0600
@@ -104,6 +104,9 @@ static void reflect_interruption(unsigne
        PSCB(v, interrupt_collection_enabled) = 0;
 
        perfc_incra(slow_reflect, vector >> 8);
+
+       debugger_event(vector == IA64_EXTINT_VECTOR ?
+                      XEN_IA64_DEBUG_ON_EXTINT : XEN_IA64_DEBUG_ON_EXCEPT);
 }
 
 void reflect_event(void)
@@ -151,6 +154,8 @@ void reflect_event(void)
        PSCB(v, vpsr_dfh) = 0;
        v->vcpu_info->evtchn_upcall_mask = 1;
        PSCB(v, interrupt_collection_enabled) = 0;
+
+       debugger_event(XEN_IA64_DEBUG_ON_EVENT);
 }
 
 static int handle_lazy_cover(struct vcpu *v, struct pt_regs *regs)
@@ -670,7 +675,7 @@ ia64_handle_reflection(unsigned long ifa
                break;
        case 29:
                vector = IA64_DEBUG_VECTOR;
-               if (debugger_trap_entry(vector,regs))
+               if (debugger_kernel_event(regs, XEN_IA64_DEBUG_ON_KERN_DEBUG))
                        return;
                break;
        case 30:
@@ -708,12 +713,12 @@ ia64_handle_reflection(unsigned long ifa
                break;
        case 35:
                vector = IA64_TAKEN_BRANCH_TRAP_VECTOR;
-               if (debugger_trap_entry(vector,regs))
+               if (debugger_kernel_event(regs, XEN_IA64_DEBUG_ON_KERN_TBRANCH))
                        return;
                break;
        case 36:
                vector = IA64_SINGLE_STEP_TRAP_VECTOR;
-               if (debugger_trap_entry(vector,regs))
+               if (debugger_kernel_event(regs, XEN_IA64_DEBUG_ON_KERN_SSTEP))
                        return;
                break;
 
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/fw_emul.c
--- a/xen/arch/ia64/xen/fw_emul.c       Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/fw_emul.c       Fri Sep 21 11:03:54 2007 -0600
@@ -36,6 +36,7 @@
 #include <xen/hypercall.h>
 #include <xen/softirq.h>
 #include <xen/time.h>
+#include <asm/debugger.h>
 
 static DEFINE_SPINLOCK(efi_time_services_lock);
 
@@ -136,6 +137,8 @@ sal_emulator (long index, unsigned long 
        unsigned long r10 = 0;
        long r11 = 0;
        long status;
+
+       debugger_event(XEN_IA64_DEBUG_ON_SAL);
 
        status = 0;
        switch (index) {
@@ -594,6 +597,8 @@ xen_pal_emulator(unsigned long index, u6
 
        if (unlikely(running_on_sim))
                return pal_emulator_static(index);
+
+       debugger_event(XEN_IA64_DEBUG_ON_PAL);
 
        // pal code must be mapped by a TR when pal is called, however
        // calls are rare enough that we will map it lazily rather than
@@ -1241,6 +1246,8 @@ efi_emulator (struct pt_regs *regs, IA64
        struct vcpu *v = current;
        efi_status_t status;
 
+       debugger_event(XEN_IA64_DEBUG_ON_EFI);
+
        *fault = IA64_NO_FAULT;
 
        switch (regs->r2) {
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c     Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/hypercall.c     Fri Sep 21 11:03:54 2007 -0600
@@ -493,3 +493,35 @@ long do_callback_op(int cmd, XEN_GUEST_H
 
     return ret;
 }
+
+unsigned long
+do_ia64_debug_op(unsigned long cmd, unsigned long domain,
+                XEN_GUEST_HANDLE(xen_ia64_debug_op_t) u_debug_op)
+{
+    xen_ia64_debug_op_t curop, *op = &curop;
+    struct domain *d;
+    long ret = 0;
+
+    if (!IS_PRIV(current->domain))
+        return -EPERM;
+    if (copy_from_guest(op, u_debug_op, 1))
+        return -EFAULT;
+    d = rcu_lock_domain_by_id(domain);
+    if (d == NULL)
+        return -ESRCH;
+
+    switch (cmd) {
+    case XEN_IA64_DEBUG_OP_SET_FLAGS:
+        d->arch.debug_flags = op->flags;
+        break;
+    case XEN_IA64_DEBUG_OP_GET_FLAGS:
+        op->flags = d->arch.debug_flags;
+        if (copy_to_guest(u_debug_op, op, 1))
+            ret = -EFAULT;
+        break;
+    default:
+        ret = -ENOSYS;
+    }
+    rcu_unlock_domain(d);
+    return ret;
+}
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/mm.c    Fri Sep 21 11:03:54 2007 -0600
@@ -181,6 +181,7 @@
 #include <asm/dom_fw_common.h>
 #include <public/memory.h>
 #include <asm/event.h>
+#include <asm/debugger.h>
 
 static void domain_page_flush_and_put(struct domain* d, unsigned long mpaddr,
                                       volatile pte_t* ptep, pte_t old_pte, 
@@ -762,6 +763,8 @@ unsigned long lookup_domain_mpa(struct d
                  current->vcpu_id, PSCB(current, iip),
                  d->domain_id, mpaddr, d->arch.convmem_end);
     }
+
+    debugger_event (XEN_IA64_DEBUG_ON_BAD_MPA);
 
     if (entry != NULL)
         p2m_entry_set(entry, NULL, __pte(0));
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/privop.c
--- a/xen/arch/ia64/xen/privop.c        Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/privop.c        Fri Sep 21 11:03:54 2007 -0600
@@ -622,6 +622,8 @@ static IA64FAULT priv_handle_op(VCPU * v
        } else if (ia64_get_cpl(ipsr) > CONFIG_CPL0_EMUL)
                return IA64_ILLOP_FAULT;
 
+       debugger_event(XEN_IA64_DEBUG_ON_PRIVOP);
+
        switch (slot_type) {
        case M:
                if (inst.generic.major == 0) {
@@ -785,6 +787,9 @@ int ia64_hyperprivop(unsigned long iim, 
                return 1;
        }
        perfc_incra(slow_hyperprivop, iim);
+
+       debugger_event(XEN_IA64_DEBUG_ON_PRIVOP);
+
        switch (iim) {
        case HYPERPRIVOP_RFI:
                vcpu_rfi(v);
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/asm-ia64/debugger.h
--- a/xen/include/asm-ia64/debugger.h   Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/asm-ia64/debugger.h   Fri Sep 21 11:03:54 2007 -0600
@@ -83,16 +83,31 @@ static inline int debugger_trap_fatal(
 #define debugger_trap_immediate()              ((void)0)
 #endif
 
-static inline int debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
+static inline int debugger_event(unsigned long event)
 {
     struct vcpu *v = current;
+    struct domain *d = v->domain;
 
-    if (guest_kernel_mode(regs) && v->domain->debugger_attached) {
+    if (unlikely (d->debugger_attached && (d->arch.debug_flags & event))) {
+        d->arch.debug_event = event;
         domain_pause_for_debugger();
         return 1;
     }
+    return 0;
+}
 
+static inline int debugger_kernel_event(
+    struct cpu_user_regs *regs, unsigned long event)
+{
+    struct vcpu *v = current;
+    struct domain *d = v->domain;
+
+    if (unlikely(d->debugger_attached && (d->arch.debug_flags & event)
+                 && guest_kernel_mode(regs))) {
+        d->arch.debug_event = event;
+        domain_pause_for_debugger();
+        return 1;
+    }
     return 0;
 }
 
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/asm-ia64/domain.h     Fri Sep 21 11:03:54 2007 -0600
@@ -181,6 +181,12 @@ struct arch_domain {
 
     struct opt_feature opt_feature;
 
+    /* Debugging flags.  See arch-ia64.h for bits definition.  */
+    unsigned int debug_flags;
+
+    /* Reason of debugging break.  */
+    unsigned int debug_event;
+
 #ifdef CONFIG_XEN_IA64_TLB_TRACK
     struct tlb_track*   tlb_track;
 #endif
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/asm-ia64/vmx.h
--- a/xen/include/asm-ia64/vmx.h        Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/asm-ia64/vmx.h        Fri Sep 21 11:03:54 2007 -0600
@@ -39,8 +39,6 @@ extern int ia64_hypercall (struct pt_reg
 extern int ia64_hypercall (struct pt_regs *regs);
 extern void vmx_save_state(struct vcpu *v);
 extern void vmx_load_state(struct vcpu *v);
-extern void show_registers(struct pt_regs *regs);
-#define show_execution_state show_registers
 extern unsigned long __gpfn_to_mfn_foreign(struct domain *d, unsigned long 
gpfn);
 extern void sync_split_caches(void);
 extern void set_privileged_operation_isr (struct vcpu *vcpu,int inst);
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/public/arch-ia64.h    Fri Sep 21 11:03:54 2007 -0600
@@ -293,6 +293,8 @@ struct ia64_tr_entry {
     unsigned long vadr;
     unsigned long rid;
 };
+typedef struct ia64_tr_entry ia64_tr_entry_t;
+DEFINE_XEN_GUEST_HANDLE(ia64_tr_entry_t);
 
 struct vcpu_tr_regs {
     struct ia64_tr_entry itrs[8];
@@ -556,6 +558,82 @@ struct xen_ia64_boot_param {
 /* Fast and light hypercalls.  */
 #define __HYPERVISOR_ia64_fast_eoi     __HYPERVISOR_arch_1
 
+/* Extra debug features.  */
+#define __HYPERVISOR_ia64_debug_op  __HYPERVISOR_arch_2
+
+/* Set/Get extra conditions to break.  */
+#define XEN_IA64_DEBUG_OP_SET_FLAGS 1
+#define XEN_IA64_DEBUG_OP_GET_FLAGS 2
+
+/* Break on kernel single step.  */
+#define XEN_IA64_DEBUG_ON_KERN_SSTEP   (1 << 0)
+
+/* Break on kernel debug (breakpoint or watch point).  */
+#define XEN_IA64_DEBUG_ON_KERN_DEBUG   (1 << 1)
+
+/* Break on kernel taken branch.  */
+#define XEN_IA64_DEBUG_ON_KERN_TBRANCH (1 << 2)
+
+/* Break on interrupt injection.  */
+#define XEN_IA64_DEBUG_ON_EXTINT       (1 << 3)
+
+/* Break on interrupt injection.  */
+#define XEN_IA64_DEBUG_ON_EXCEPT       (1 << 4)
+
+/* Break on event injection.  */
+#define XEN_IA64_DEBUG_ON_EVENT        (1 << 5)
+
+/* Break on privop/virtualized instruction (slow path only).  */
+#define XEN_IA64_DEBUG_ON_PRIVOP       (1 << 6)
+
+/* Break on emulated PAL call (at entry).  */
+#define XEN_IA64_DEBUG_ON_PAL          (1 << 7)
+
+/* Break on emulated SAL call (at entry).  */
+#define XEN_IA64_DEBUG_ON_SAL          (1 << 8)
+
+/* Break on emulated EFI call (at entry).  */
+#define XEN_IA64_DEBUG_ON_EFI          (1 << 9)
+
+/* Break on rfi emulation (slow path only, before exec).  */
+#define XEN_IA64_DEBUG_ON_RFI          (1 << 10)
+
+/* Break on address translation switch.  */
+#define XEN_IA64_DEBUG_ON_MMU          (1 << 11)
+
+/* Break on bad guest physical address.  */
+#define XEN_IA64_DEBUG_ON_BAD_MPA      (1 << 12)
+
+/* Force psr.ss bit.  */
+#define XEN_IA64_DEBUG_FORCE_SS        (1 << 13)
+
+/* Force psr.db bit.  */
+#define XEN_IA64_DEBUG_FORCE_DB        (1 << 14)
+
+/* Break on ITR/PTR.  */
+#define XEN_IA64_DEBUG_ON_TR           (1 << 15)
+
+/* Break on ITC/PTC.L/PTC.G/PTC.GA.  */
+#define XEN_IA64_DEBUG_ON_TC           (1 << 16)
+
+/* Get translation cache.  */
+#define XEN_IA64_DEBUG_OP_GET_TC   3
+
+/* Translate virtual address to guest physical address.  */
+#define XEN_IA64_DEBUG_OP_TRANSLATE 4
+
+#ifndef __ASSEMBLY__
+union xen_ia64_debug_op {
+    uint64_t flags;
+    struct xen_ia64_debug_vtlb {
+        uint64_t nbr;                             /* IN/OUT */
+        XEN_GUEST_HANDLE_64(ia64_tr_entry_t) tr;  /* IN/OUT */
+    } vtlb;
+};
+typedef union xen_ia64_debug_op xen_ia64_debug_op_t;
+DEFINE_XEN_GUEST_HANDLE(xen_ia64_debug_op_t);
+#endif /* __ASSEMBLY__ */
+
 /* Xencomm macros.  */
 #define XENCOMM_INLINE_MASK 0xf800000000000000UL
 #define XENCOMM_INLINE_FLAG 0x8000000000000000UL

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.