From: George Dunlap <george.dunlap@eu.citrix.com>
To: Don Slutz <dslutz@verizon.com>,
xen-devel@lists.xen.org, Jan Beulich <jbeulich@suse.com>,
Tim Deegan <tim@xen.org>
Cc: Keir Fraser <keir@xen.org>,
Ian Jackson <ian.jackson@eu.citrix.com>,
Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: Re: [PATCH v3 2/2] xentrace: Add TRC_HVM_EMUL
Date: Tue, 8 Apr 2014 10:53:33 +0100 [thread overview]
Message-ID: <5343C71D.6030301@eu.citrix.com> (raw)
In-Reply-To: <1396910315-30865-3-git-send-email-dslutz@verizon.com>
On 04/07/2014 11:38 PM, Don Slutz wrote:
> This add a set of trace events that track the setup of various
> emulated devices related to timers in domU.
>
> This set is hpet, pit (i8253, i8254), rtc (MC146818), apic (lapic),
> and pic (i8259). The pmtimer is not traced since it does not have a
> changeable rate.
>
> Signed-off-by: Don Slutz <dslutz@verizon.com>
> Reviewed-by: Tim Deegan <tim@xen.org>
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
Thanks!
> ---
> v3:
> Use TRC_HVM_EMUL instead of TRC_HVM_VCHIP.
> Handle 64 bit correctly.
>
> Note: xentrace_format only supports 64bit output in hex.
>
> tools/xentrace/formats | 18 ++++++++++++++++++
> xen/arch/x86/hvm/hpet.c | 7 +++++++
> xen/arch/x86/hvm/i8254.c | 9 +++++++++
> xen/arch/x86/hvm/rtc.c | 9 +++++++++
> xen/arch/x86/hvm/vlapic.c | 19 +++++++++++++++++++
> xen/arch/x86/hvm/vpic.c | 11 +++++++++++
> xen/include/asm-x86/hvm/trace.h | 7 +++++++
> xen/include/public/trace.h | 24 ++++++++++++++++++++++--
> 8 files changed, 102 insertions(+), 2 deletions(-)
>
> diff --git a/tools/xentrace/formats b/tools/xentrace/formats
> index 67fd42d..da658bf 100644
> --- a/tools/xentrace/formats
> +++ b/tools/xentrace/formats
> @@ -152,3 +152,21 @@
> 0x00802006 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) assign_vector [ irq = %(1)d = vector 0x%(2)x, CPU mask: 0x%(3)08x ]
> 0x00802007 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) bogus_vector [ 0x%(1)x ]
> 0x00802008 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) do_irq [ irq = %(1)d, began = %(2)dus, ended = %(3)dus ]
> +
> +0x00084001 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) hpet create [ tn = %(1)d, irq = %(2)d, delta = 0x%(4)08x%(3)08x, period = 0x%(6)08x%(5)08x ]
> +0x00084002 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) pit create [ delta = 0x%(1)016x, period = 0x%(2)016x ]
> +0x00084003 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) rtc create [ delta = 0x%(1)016x , period = 0x%(2)016x ]
> +0x00084004 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vlapic create [ delta = 0x%(2)08x%(1)08x , period = 0x%(4)08x%(3)08x, irq = %(5)d ]
> +0x00084005 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) hpet destroy [ tn = %(1)d ]
> +0x00084006 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) pit destroy [ ]
> +0x00084007 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) rtc destroy [ ]
> +0x00084008 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vlapic destroy [ ]
> +0x00084009 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) pit callback [ ]
> +0x0008400a CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vlapic callback [ ]
> +0x0008400b CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vpic_update_int_output [ int_output = %(1)d, is_master = %(2)d, irq = %(3)d ]
> +0x0008400c CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vpic vcpu_kick [ irq = %(1)d ]
> +0x0008400d CPU%(cpu)d %(tsc)d (+%(reltsc)8d) __vpic_intack [ is_master = %(1)d, irq = %(2)d ]
> +0x0008400e CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vpic_irq_positive_edge [ irq = %(1)d ]
> +0x0008400f CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vpic_irq_negative_edge [ irq = %(1)d ]
> +0x00084010 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vpic_ack_pending_irq [ accept_pic_intr = %(1)d, int_output = %(2)d ]
> +0x00084011 CPU%(cpu)d %(tsc)d (+%(reltsc)8d) vlapic_accept_pic_intr [ i8259_target = %(1)d, accept_pic_int = %(2)d ]
> diff --git a/xen/arch/x86/hvm/hpet.c b/xen/arch/x86/hvm/hpet.c
> index e1e769a..42c93f3 100644
> --- a/xen/arch/x86/hvm/hpet.c
> +++ b/xen/arch/x86/hvm/hpet.c
> @@ -20,10 +20,12 @@
> #include <asm/hvm/vpt.h>
> #include <asm/hvm/io.h>
> #include <asm/hvm/support.h>
> +#include <asm/hvm/trace.h>
> #include <asm/current.h>
> #include <asm/hpet.h>
> #include <xen/sched.h>
> #include <xen/event.h>
> +#include <xen/trace.h>
>
> #define domain_vhpet(x) (&(x)->arch.hvm_domain.pl_time.vhpet)
> #define vcpu_vhpet(x) (domain_vhpet((x)->domain))
> @@ -191,6 +193,7 @@ static void hpet_stop_timer(HPETState *h, unsigned int tn)
> {
> ASSERT(tn < HPET_TIMER_NUM);
> ASSERT(spin_is_locked(&h->lock));
> + TRACE_1D(TRC_HVM_EMUL_HPET_STOP_TIMER, tn);
> destroy_periodic_time(&h->pt[tn]);
> /* read the comparator to get it updated so a read while stopped will
> * return the expected value. */
> @@ -255,6 +258,10 @@ static void hpet_set_timer(HPETState *h, unsigned int tn)
> * being enabled (now).
> */
> oneshot = !timer_is_periodic(h, tn);
> + TRACE_2_LONG_4D(TRC_HVM_EMUL_HPET_START_TIMER, tn, irq,
> + TRC_PAR_LONG(hpet_tick_to_ns(h, diff)),
> + TRC_PAR_LONG(oneshot ? 0LL :
> + hpet_tick_to_ns(h, h->hpet.period[tn])));
> create_periodic_time(vhpet_vcpu(h), &h->pt[tn],
> hpet_tick_to_ns(h, diff),
> oneshot ? 0 : hpet_tick_to_ns(h, h->hpet.period[tn]),
> diff --git a/xen/arch/x86/hvm/i8254.c b/xen/arch/x86/hvm/i8254.c
> index 6e66b49..c4f7527 100644
> --- a/xen/arch/x86/hvm/i8254.c
> +++ b/xen/arch/x86/hvm/i8254.c
> @@ -31,6 +31,7 @@
> #include <xen/lib.h>
> #include <xen/errno.h>
> #include <xen/sched.h>
> +#include <xen/trace.h>
> #include <asm/time.h>
> #include <asm/hvm/hvm.h>
> #include <asm/hvm/io.h>
> @@ -159,6 +160,7 @@ static int pit_get_gate(PITState *pit, int channel)
> static void pit_time_fired(struct vcpu *v, void *priv)
> {
> uint64_t *count_load_time = priv;
> + TRACE_0D(TRC_HVM_EMUL_PIT_TIMER_CB);
> *count_load_time = get_guest_time(v);
> }
>
> @@ -188,16 +190,19 @@ static void pit_load_count(PITState *pit, int channel, int val)
> case 2:
> case 3:
> /* Periodic timer. */
> + TRACE_2D(TRC_HVM_EMUL_PIT_START_TIMER, period, period);
> create_periodic_time(v, &pit->pt0, period, period, 0, pit_time_fired,
> &pit->count_load_time[channel]);
> break;
> case 1:
> case 4:
> /* One-shot timer. */
> + TRACE_2D(TRC_HVM_EMUL_PIT_START_TIMER, period, 0);
> create_periodic_time(v, &pit->pt0, period, 0, 0, pit_time_fired,
> &pit->count_load_time[channel]);
> break;
> default:
> + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER);
> destroy_periodic_time(&pit->pt0);
> break;
> }
> @@ -377,6 +382,7 @@ static uint32_t pit_ioport_read(struct PITState *pit, uint32_t addr)
>
> void pit_stop_channel0_irq(PITState *pit)
> {
> + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER);
> spin_lock(&pit->lock);
> destroy_periodic_time(&pit->pt0);
> spin_unlock(&pit->lock);
> @@ -431,6 +437,7 @@ void pit_reset(struct domain *d)
> struct hvm_hw_pit_channel *s;
> int i;
>
> + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER);
> destroy_periodic_time(&pit->pt0);
> pit->pt0.source = PTSRC_isa;
>
> @@ -465,6 +472,8 @@ void pit_init(struct domain *d, unsigned long cpu_khz)
> void pit_deinit(struct domain *d)
> {
> PITState *pit = domain_vpit(d);
> +
> + TRACE_0D(TRC_HVM_EMUL_PIT_STOP_TIMER);
> destroy_periodic_time(&pit->pt0);
> }
>
> diff --git a/xen/arch/x86/hvm/rtc.c b/xen/arch/x86/hvm/rtc.c
> index 7cd0cf4..3fab660 100644
> --- a/xen/arch/x86/hvm/rtc.c
> +++ b/xen/arch/x86/hvm/rtc.c
> @@ -27,6 +27,7 @@
> #include <asm/hvm/io.h>
> #include <asm/hvm/support.h>
> #include <asm/current.h>
> +#include <xen/trace.h>
>
> #define USEC_PER_SEC 1000000UL
> #define NS_PER_USEC 1000UL
> @@ -91,6 +92,7 @@ static void rtc_pf_callback(struct vcpu *v, void *opaque)
> && ++(s->pt_dead_ticks) >= 10 )
> {
> /* VM is ignoring its RTC; no point in running the timer */
> + TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER);
> destroy_periodic_time(&s->pt);
> s->period = 0;
> }
> @@ -152,8 +154,11 @@ static void rtc_timer_update(RTCState *s)
> else
> delta = period - ((now - s->start_time) % period);
> if ( s->hw.cmos_data[RTC_REG_B] & RTC_PIE )
> + {
> + TRACE_2D(TRC_HVM_EMUL_RTC_START_TIMER, delta, period);
> create_periodic_time(v, &s->pt, delta, period,
> RTC_IRQ, rtc_pf_callback, s);
> + }
> else
> s->check_ticks_since = now;
> }
> @@ -161,6 +166,7 @@ static void rtc_timer_update(RTCState *s)
> }
> /* fall through */
> default:
> + TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER);
> destroy_periodic_time(&s->pt);
> s->period = 0;
> break;
> @@ -513,6 +519,7 @@ static int rtc_ioport_write(void *opaque, uint32_t addr, uint32_t data)
> rtc_update_irq(s);
> if ( (data ^ orig) & RTC_PIE )
> {
> + TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER);
> destroy_periodic_time(&s->pt);
> s->period = 0;
> rtc_timer_update(s);
> @@ -772,6 +779,7 @@ void rtc_reset(struct domain *d)
> {
> RTCState *s = domain_vrtc(d);
>
> + TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER);
> destroy_periodic_time(&s->pt);
> s->period = 0;
> s->pt.source = PTSRC_isa;
> @@ -813,6 +821,7 @@ void rtc_deinit(struct domain *d)
>
> spin_barrier(&s->lock);
>
> + TRACE_0D(TRC_HVM_EMUL_RTC_STOP_TIMER);
> destroy_periodic_time(&s->pt);
> kill_timer(&s->update_timer);
> kill_timer(&s->update_timer2);
> diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c
> index fc307c0..cd7e872 100644
> --- a/xen/arch/x86/hvm/vlapic.c
> +++ b/xen/arch/x86/hvm/vlapic.c
> @@ -611,6 +611,7 @@ int hvm_x2apic_msr_read(struct vcpu *v, unsigned int msr, uint64_t *msr_content)
>
> static void vlapic_pt_cb(struct vcpu *v, void *data)
> {
> + TRACE_0D(TRC_HVM_EMUL_LAPIC_TIMER_CB);
> *(s_time_t *)data = hvm_get_guest_time(v);
> }
>
> @@ -712,6 +713,7 @@ static int vlapic_reg_write(struct vcpu *v,
> if ( (vlapic_get_reg(vlapic, offset) & APIC_TIMER_MODE_MASK) !=
> (val & APIC_TIMER_MODE_MASK) )
> {
> + TRACE_0D(TRC_HVM_EMUL_LAPIC_STOP_TIMER);
> destroy_periodic_time(&vlapic->pt);
> vlapic_set_reg(vlapic, APIC_TMICT, 0);
> vlapic_set_reg(vlapic, APIC_TMCCT, 0);
> @@ -746,12 +748,16 @@ static int vlapic_reg_write(struct vcpu *v,
> vlapic_set_reg(vlapic, APIC_TMICT, val);
> if ( val == 0 )
> {
> + TRACE_0D(TRC_HVM_EMUL_LAPIC_STOP_TIMER);
> destroy_periodic_time(&vlapic->pt);
> break;
> }
>
> period = ((uint64_t)APIC_BUS_CYCLE_NS *
> (uint32_t)val * vlapic->hw.timer_divisor);
> + TRACE_2_LONG_3D(TRC_HVM_EMUL_LAPIC_START_TIMER, TRC_PAR_LONG(period),
> + TRC_PAR_LONG(vlapic_lvtt_period(vlapic) ? period : 0LL),
> + vlapic->pt.irq);
> create_periodic_time(current, &vlapic->pt, period,
> vlapic_lvtt_period(vlapic) ? period : 0,
> vlapic->pt.irq,
> @@ -950,6 +956,8 @@ void vlapic_tdt_msr_set(struct vlapic *vlapic, uint64_t value)
>
> vlapic->hw.tdt_msr = value;
> /* .... reprogram tdt timer */
> + TRACE_2_LONG_3D(TRC_HVM_EMUL_LAPIC_START_TIMER, TRC_PAR_LONG(delta),
> + TRC_PAR_LONG(0LL), vlapic->pt.irq);
> create_periodic_time(v, &vlapic->pt, delta, 0,
> vlapic->pt.irq, vlapic_tdt_pt_cb,
> &vlapic->timer_last_update);
> @@ -962,6 +970,8 @@ void vlapic_tdt_msr_set(struct vlapic *vlapic, uint64_t value)
> /* trigger a timer event if needed */
> if ( value > 0 )
> {
> + TRACE_2_LONG_3D(TRC_HVM_EMUL_LAPIC_START_TIMER, TRC_PAR_LONG(0LL),
> + TRC_PAR_LONG(0LL), vlapic->pt.irq);
> create_periodic_time(v, &vlapic->pt, 0, 0,
> vlapic->pt.irq, vlapic_tdt_pt_cb,
> &vlapic->timer_last_update);
> @@ -970,6 +980,7 @@ void vlapic_tdt_msr_set(struct vlapic *vlapic, uint64_t value)
> else
> {
> /* .... stop tdt timer */
> + TRACE_0D(TRC_HVM_EMUL_LAPIC_STOP_TIMER);
> destroy_periodic_time(&vlapic->pt);
> }
>
> @@ -1003,6 +1014,10 @@ static int __vlapic_accept_pic_intr(struct vcpu *v)
>
> int vlapic_accept_pic_intr(struct vcpu *v)
> {
> + TRACE_2D(TRC_HVM_EMUL_LAPIC_PIC_INTR,
> + (v == v->domain->arch.hvm_domain.i8259_target),
> + v ? __vlapic_accept_pic_intr(v) : -1);
> +
> return ((v == v->domain->arch.hvm_domain.i8259_target) &&
> __vlapic_accept_pic_intr(v));
> }
> @@ -1106,6 +1121,7 @@ void vlapic_reset(struct vlapic *vlapic)
> vlapic_set_reg(vlapic, APIC_SPIV, 0xff);
> vlapic->hw.disabled |= VLAPIC_SW_DISABLED;
>
> + TRACE_0D(TRC_HVM_EMUL_LAPIC_STOP_TIMER);
> destroy_periodic_time(&vlapic->pt);
> }
>
> @@ -1129,6 +1145,8 @@ static void lapic_rearm(struct vlapic *s)
>
> period = ((uint64_t)APIC_BUS_CYCLE_NS *
> (uint32_t)tmict * s->hw.timer_divisor);
> + TRACE_2_LONG_3D(TRC_HVM_EMUL_LAPIC_START_TIMER, TRC_PAR_LONG(period),
> + TRC_PAR_LONG(vlapic_lvtt_period(s) ? period : 0LL), s->pt.irq);
> create_periodic_time(vlapic_vcpu(s), &s->pt, period,
> vlapic_lvtt_period(s) ? period : 0,
> s->pt.irq,
> @@ -1275,6 +1293,7 @@ void vlapic_destroy(struct vcpu *v)
> struct vlapic *vlapic = vcpu_vlapic(v);
>
> tasklet_kill(&vlapic->init_sipi.tasklet);
> + TRACE_0D(TRC_HVM_EMUL_LAPIC_STOP_TIMER);
> destroy_periodic_time(&vlapic->pt);
> unmap_domain_page_global(vlapic->regs);
> free_domheap_page(vlapic->regs_page);
> diff --git a/xen/arch/x86/hvm/vpic.c b/xen/arch/x86/hvm/vpic.c
> index 5ca513c..2c6e6e5 100644
> --- a/xen/arch/x86/hvm/vpic.c
> +++ b/xen/arch/x86/hvm/vpic.c
> @@ -30,6 +30,7 @@
> #include <xen/lib.h>
> #include <xen/errno.h>
> #include <xen/sched.h>
> +#include <xen/trace.h>
> #include <asm/hvm/hvm.h>
> #include <asm/hvm/io.h>
> #include <asm/hvm/support.h>
> @@ -99,6 +100,8 @@ static void vpic_update_int_output(struct hvm_hw_vpic *vpic)
> ASSERT(vpic_is_locked(vpic));
>
> irq = vpic_get_highest_priority_irq(vpic);
> + TRACE_3D(TRC_HVM_EMUL_PIC_INT_OUTPUT, vpic->int_output, vpic->is_master,
> + irq);
> if ( vpic->int_output == (irq >= 0) )
> return;
>
> @@ -112,7 +115,10 @@ static void vpic_update_int_output(struct hvm_hw_vpic *vpic)
> /* Master INT line is connected in Virtual Wire Mode. */
> struct vcpu *v = vpic_domain(vpic)->arch.hvm_domain.i8259_target;
> if ( v != NULL )
> + {
> + TRACE_1D(TRC_HVM_EMUL_PIC_KICK, irq);
> vcpu_kick(v);
> + }
> }
> else
> {
> @@ -135,6 +141,7 @@ static void __vpic_intack(struct hvm_hw_vpic *vpic, int irq)
>
> ASSERT(vpic_is_locked(vpic));
>
> + TRACE_2D(TRC_HVM_EMUL_PIC_INTACK, vpic->is_master, irq);
> /* Edge-triggered: clear the IRR (forget the edge). */
> if ( !(vpic->elcr & mask) )
> vpic->irr &= ~mask;
> @@ -434,6 +441,7 @@ void vpic_irq_positive_edge(struct domain *d, int irq)
> ASSERT(irq <= 15);
> ASSERT(vpic_is_locked(vpic));
>
> + TRACE_1D(TRC_HVM_EMUL_PIC_POSEDGE, irq);
> if ( irq == 2 )
> return;
>
> @@ -450,6 +458,7 @@ void vpic_irq_negative_edge(struct domain *d, int irq)
> ASSERT(irq <= 15);
> ASSERT(vpic_is_locked(vpic));
>
> + TRACE_1D(TRC_HVM_EMUL_PIC_NEGEDGE, irq);
> if ( irq == 2 )
> return;
>
> @@ -463,6 +472,8 @@ int vpic_ack_pending_irq(struct vcpu *v)
> int irq, vector;
> struct hvm_hw_vpic *vpic = &v->domain->arch.hvm_domain.vpic[0];
>
> + TRACE_2D(TRC_HVM_EMUL_PIC_PEND_IRQ_CALL, vlapic_accept_pic_intr(v),
> + vpic->int_output);
> if ( !vlapic_accept_pic_intr(v) || !vpic->int_output )
> return -1;
>
> diff --git a/xen/include/asm-x86/hvm/trace.h b/xen/include/asm-x86/hvm/trace.h
> index 9d7e00b..de802a6 100644
> --- a/xen/include/asm-x86/hvm/trace.h
> +++ b/xen/include/asm-x86/hvm/trace.h
> @@ -58,6 +58,13 @@
>
> #define TRC_PAR_LONG(par) ((par)&0xFFFFFFFF),((par)>>32)
>
> +#define TRACE_2_LONG_2D(_e, d1, d2, ...) \
> + TRACE_4D(_e, d1, d2)
> +#define TRACE_2_LONG_3D(_e, d1, d2, d3, ...) \
> + TRACE_5D(_e, d1, d2, d3)
> +#define TRACE_2_LONG_4D(_e, d1, d2, d3, d4, ...) \
> + TRACE_6D(_e, d1, d2, d3, d4)
> +
> #define HVMTRACE_ND(evt, modifier, cycles, count, d1, d2, d3, d4, d5, d6) \
> do { \
> if ( unlikely(tb_init_done) && DO_TRC_HVM_ ## evt ) \
> diff --git a/xen/include/public/trace.h b/xen/include/public/trace.h
> index e2f60a6..cfcf4aa 100644
> --- a/xen/include/public/trace.h
> +++ b/xen/include/public/trace.h
> @@ -50,8 +50,9 @@
> #define TRC_SUBCLS_SHIFT 12
>
> /* trace subclasses for SVM */
> -#define TRC_HVM_ENTRYEXIT 0x00081000 /* VMENTRY and #VMEXIT */
> -#define TRC_HVM_HANDLER 0x00082000 /* various HVM handlers */
> +#define TRC_HVM_ENTRYEXIT 0x00081000 /* VMENTRY and #VMEXIT */
> +#define TRC_HVM_HANDLER 0x00082000 /* various HVM handlers */
> +#define TRC_HVM_EMUL 0x00084000 /* emulated devices */
>
> #define TRC_SCHED_MIN 0x00021000 /* Just runstate changes */
> #define TRC_SCHED_CLASS 0x00022000 /* Scheduler-specific */
> @@ -229,6 +230,25 @@
> #define TRC_HVM_IOPORT_WRITE (TRC_HVM_HANDLER + 0x216)
> #define TRC_HVM_IOMEM_WRITE (TRC_HVM_HANDLER + 0x217)
>
> +/* Trace events for emulated devices */
> +#define TRC_HVM_EMUL_HPET_START_TIMER (TRC_HVM_EMUL + 0x1)
> +#define TRC_HVM_EMUL_PIT_START_TIMER (TRC_HVM_EMUL + 0x2)
> +#define TRC_HVM_EMUL_RTC_START_TIMER (TRC_HVM_EMUL + 0x3)
> +#define TRC_HVM_EMUL_LAPIC_START_TIMER (TRC_HVM_EMUL + 0x4)
> +#define TRC_HVM_EMUL_HPET_STOP_TIMER (TRC_HVM_EMUL + 0x5)
> +#define TRC_HVM_EMUL_PIT_STOP_TIMER (TRC_HVM_EMUL + 0x6)
> +#define TRC_HVM_EMUL_RTC_STOP_TIMER (TRC_HVM_EMUL + 0x7)
> +#define TRC_HVM_EMUL_LAPIC_STOP_TIMER (TRC_HVM_EMUL + 0x8)
> +#define TRC_HVM_EMUL_PIT_TIMER_CB (TRC_HVM_EMUL + 0x9)
> +#define TRC_HVM_EMUL_LAPIC_TIMER_CB (TRC_HVM_EMUL + 0xA)
> +#define TRC_HVM_EMUL_PIC_INT_OUTPUT (TRC_HVM_EMUL + 0xB)
> +#define TRC_HVM_EMUL_PIC_KICK (TRC_HVM_EMUL + 0xC)
> +#define TRC_HVM_EMUL_PIC_INTACK (TRC_HVM_EMUL + 0xD)
> +#define TRC_HVM_EMUL_PIC_POSEDGE (TRC_HVM_EMUL + 0xE)
> +#define TRC_HVM_EMUL_PIC_NEGEDGE (TRC_HVM_EMUL + 0xF)
> +#define TRC_HVM_EMUL_PIC_PEND_IRQ_CALL (TRC_HVM_EMUL + 0x10)
> +#define TRC_HVM_EMUL_LAPIC_PIC_INTR (TRC_HVM_EMUL + 0x11)
> +
> /* trace events for per class */
> #define TRC_PM_FREQ_CHANGE (TRC_HW_PM + 0x01)
> #define TRC_PM_IDLE_ENTRY (TRC_HW_PM + 0x02)
>
prev parent reply other threads:[~2014-04-08 9:53 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-07 22:38 [PATCH v3 0/2] xentrace: Add TRC_HVM_EMUL (was xentrace: Add TRC_HW_VCHIP or TRC_HVM_VCHIP) Don Slutz
2014-04-07 22:38 ` [PATCH v3 1/2] Add emacs local variables to all files changed Don Slutz
2014-04-08 9:36 ` Jan Beulich
2014-04-08 9:36 ` George Dunlap
2014-04-08 9:37 ` Ian Campbell
2014-04-08 9:52 ` Jan Beulich
2014-04-08 9:52 ` George Dunlap
2014-04-07 22:38 ` [PATCH v3 2/2] xentrace: Add TRC_HVM_EMUL Don Slutz
2014-04-08 9:53 ` George Dunlap [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5343C71D.6030301@eu.citrix.com \
--to=george.dunlap@eu.citrix.com \
--cc=dslutz@verizon.com \
--cc=ian.campbell@citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=keir@xen.org \
--cc=stefano.stabellini@eu.citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).