[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: [PATCH 08/15] xen/trace: add segment desc tracing
On 06/21/2011 07:03 AM, Konrad Rzeszutek Wilk wrote: > On Mon, Jun 20, 2011 at 03:15:04PM -0700, Jeremy Fitzhardinge wrote: >> From: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx> >> >> Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx> >> --- >> arch/x86/xen/enlighten.c | 16 +++++++++- >> include/trace/events/xen.h | 75 >> ++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 90 insertions(+), 1 deletions(-) >> >> diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c >> index dd7b88f..fa4e2d2 100644 >> --- a/arch/x86/xen/enlighten.c >> +++ b/arch/x86/xen/enlighten.c >> @@ -341,6 +341,8 @@ static void xen_set_ldt(const void *addr, unsigned >> entries) >> struct mmuext_op *op; >> struct multicall_space mcs = xen_mc_entry(sizeof(*op)); >> >> + trace_xen_cpu_set_ldt(addr, entries); >> + >> op = mcs.args; >> op->cmd = MMUEXT_SET_LDT; >> op->arg1.linear_addr = (unsigned long)addr; >> @@ -496,6 +498,8 @@ static void xen_write_ldt_entry(struct desc_struct *dt, >> int entrynum, >> xmaddr_t mach_lp = arbitrary_virt_to_machine(&dt[entrynum]); >> u64 entry = *(u64 *)ptr; >> >> + trace_xen_cpu_write_ldt_entry(dt, entrynum, entry); >> + >> preempt_disable(); >> >> xen_mc_flush(); >> @@ -565,6 +569,8 @@ static void xen_write_idt_entry(gate_desc *dt, int >> entrynum, const gate_desc *g) >> unsigned long p = (unsigned long)&dt[entrynum]; >> unsigned long start, end; >> >> + trace_xen_cpu_write_idt_entry(dt, entrynum, g); >> + >> preempt_disable(); >> >> start = __this_cpu_read(idt_desc.address); >> @@ -619,6 +625,8 @@ static void xen_load_idt(const struct desc_ptr *desc) >> static DEFINE_SPINLOCK(lock); >> static struct trap_info traps[257]; >> >> + trace_xen_cpu_load_idt(desc); >> + >> spin_lock(&lock); >> >> __get_cpu_var(idt_desc) = *desc; >> @@ -637,6 +645,8 @@ static void xen_load_idt(const struct desc_ptr *desc) >> static void xen_write_gdt_entry(struct desc_struct *dt, int entry, >> const void *desc, int type) >> { >> + trace_xen_cpu_write_gdt_entry(dt, entry, desc, type); >> + >> preempt_disable(); >> >> switch (type) { >> @@ -665,6 +675,8 @@ static void xen_write_gdt_entry(struct desc_struct *dt, >> int entry, >> static void __init xen_write_gdt_entry_boot(struct desc_struct *dt, int >> entry, >> const void *desc, int type) >> { >> + trace_xen_cpu_write_gdt_entry(dt, entry, desc, type); >> + >> switch (type) { >> case DESC_LDT: >> case DESC_TSS: >> @@ -684,7 +696,9 @@ static void __init xen_write_gdt_entry_boot(struct >> desc_struct *dt, int entry, >> static void xen_load_sp0(struct tss_struct *tss, >> struct thread_struct *thread) >> { >> - struct multicall_space mcs = xen_mc_entry(0); >> + struct multicall_space mcs; >> + >> + mcs = xen_mc_entry(0); > <scratches his head> Is this prepping it for another commit? Urm, not sure. Will check. >> MULTI_stack_switch(mcs.mc, __KERNEL_DS, thread->sp0); >> xen_mc_issue(PARAVIRT_LAZY_CPU); >> } >> diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h >> index 5811c24..b1f73c4 100644 >> --- a/include/trace/events/xen.h >> +++ b/include/trace/events/xen.h >> @@ -405,6 +405,81 @@ TRACE_EVENT(xen_mmu_pgd_unpin, >> TP_printk("mm %p pgd %p", __entry->mm, __entry->pgd) >> ); >> >> +/* CPU */ >> +TRACE_EVENT(xen_cpu_write_ldt_entry, >> + TP_PROTO(struct desc_struct *dt, int entrynum, u64 desc), >> + TP_ARGS(dt, entrynum, desc), >> + TP_STRUCT__entry( >> + __field(struct desc_struct *, dt) >> + __field(int, entrynum) >> + __field(u64, desc) >> + ), >> + TP_fast_assign(__entry->dt = dt; >> + __entry->entrynum = entrynum; >> + __entry->desc = desc; >> + ), >> + TP_printk("dt %p entrynum %d entry %016llx", >> + __entry->dt, __entry->entrynum, >> + (unsigned long long)__entry->desc) >> + ); >> + >> +TRACE_EVENT(xen_cpu_write_idt_entry, >> + TP_PROTO(gate_desc *dt, int entrynum, const gate_desc *ent), >> + TP_ARGS(dt, entrynum, ent), >> + TP_STRUCT__entry( >> + __field(gate_desc *, dt) >> + __field(int, entrynum) >> + ), >> + TP_fast_assign(__entry->dt = dt; >> + __entry->entrynum = entrynum; >> + ), >> + TP_printk("dt %p entrynum %d", >> + __entry->dt, __entry->entrynum) >> + ); > The 'ent' isn't being printed? Nor stored. I don't remember why; possibly because its not all that interesting and the trace is just there for consistency's sake. The idt entries are only ever set at boot time. >> + >> +TRACE_EVENT(xen_cpu_load_idt, >> + TP_PROTO(const struct desc_ptr *desc), >> + TP_ARGS(desc), >> + TP_STRUCT__entry( >> + __field(unsigned long, addr) >> + ), >> + TP_fast_assign(__entry->addr = desc->address), >> + TP_printk("addr %lx", __entry->addr) >> + ); >> + >> +TRACE_EVENT(xen_cpu_write_gdt_entry, >> + TP_PROTO(struct desc_struct *dt, int entrynum, const void *desc, >> int type), >> + TP_ARGS(dt, entrynum, desc, type), >> + TP_STRUCT__entry( >> + __field(struct desc_struct *, dt) >> + __field(int, entrynum) >> + __field(int, type) >> + __field(u64, desc) > The order here is different from the arguments. Yeah, and not properly packed. J _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |