aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2010-12-17 18:54:28 -0500
committerJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>2011-07-18 18:43:27 -0400
commitab78f7ad2c78fb1b724b278479adec998933be36 (patch)
treedc13a59184c0a2459d8675ffa860c9b65f3a3887
parent5f94fb5b8edf29bba06e2cd05f9d3a80a5dfb9bc (diff)
xen/trace: add segment desc tracing
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
-rw-r--r--arch/x86/xen/enlighten.c16
-rw-r--r--include/trace/events/xen.h75
2 files changed, 90 insertions, 1 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 5525163a0398..520325c2ceba 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)
341 struct mmuext_op *op; 341 struct mmuext_op *op;
342 struct multicall_space mcs = xen_mc_entry(sizeof(*op)); 342 struct multicall_space mcs = xen_mc_entry(sizeof(*op));
343 343
344 trace_xen_cpu_set_ldt(addr, entries);
345
344 op = mcs.args; 346 op = mcs.args;
345 op->cmd = MMUEXT_SET_LDT; 347 op->cmd = MMUEXT_SET_LDT;
346 op->arg1.linear_addr = (unsigned long)addr; 348 op->arg1.linear_addr = (unsigned long)addr;
@@ -496,6 +498,8 @@ static void xen_write_ldt_entry(struct desc_struct *dt, int entrynum,
496 xmaddr_t mach_lp = arbitrary_virt_to_machine(&dt[entrynum]); 498 xmaddr_t mach_lp = arbitrary_virt_to_machine(&dt[entrynum]);
497 u64 entry = *(u64 *)ptr; 499 u64 entry = *(u64 *)ptr;
498 500
501 trace_xen_cpu_write_ldt_entry(dt, entrynum, entry);
502
499 preempt_disable(); 503 preempt_disable();
500 504
501 xen_mc_flush(); 505 xen_mc_flush();
@@ -565,6 +569,8 @@ static void xen_write_idt_entry(gate_desc *dt, int entrynum, const gate_desc *g)
565 unsigned long p = (unsigned long)&dt[entrynum]; 569 unsigned long p = (unsigned long)&dt[entrynum];
566 unsigned long start, end; 570 unsigned long start, end;
567 571
572 trace_xen_cpu_write_idt_entry(dt, entrynum, g);
573
568 preempt_disable(); 574 preempt_disable();
569 575
570 start = __this_cpu_read(idt_desc.address); 576 start = __this_cpu_read(idt_desc.address);
@@ -619,6 +625,8 @@ static void xen_load_idt(const struct desc_ptr *desc)
619 static DEFINE_SPINLOCK(lock); 625 static DEFINE_SPINLOCK(lock);
620 static struct trap_info traps[257]; 626 static struct trap_info traps[257];
621 627
628 trace_xen_cpu_load_idt(desc);
629
622 spin_lock(&lock); 630 spin_lock(&lock);
623 631
624 __get_cpu_var(idt_desc) = *desc; 632 __get_cpu_var(idt_desc) = *desc;
@@ -637,6 +645,8 @@ static void xen_load_idt(const struct desc_ptr *desc)
637static void xen_write_gdt_entry(struct desc_struct *dt, int entry, 645static void xen_write_gdt_entry(struct desc_struct *dt, int entry,
638 const void *desc, int type) 646 const void *desc, int type)
639{ 647{
648 trace_xen_cpu_write_gdt_entry(dt, entry, desc, type);
649
640 preempt_disable(); 650 preempt_disable();
641 651
642 switch (type) { 652 switch (type) {
@@ -665,6 +675,8 @@ static void xen_write_gdt_entry(struct desc_struct *dt, int entry,
665static void __init xen_write_gdt_entry_boot(struct desc_struct *dt, int entry, 675static void __init xen_write_gdt_entry_boot(struct desc_struct *dt, int entry,
666 const void *desc, int type) 676 const void *desc, int type)
667{ 677{
678 trace_xen_cpu_write_gdt_entry(dt, entry, desc, type);
679
668 switch (type) { 680 switch (type) {
669 case DESC_LDT: 681 case DESC_LDT:
670 case DESC_TSS: 682 case DESC_TSS:
@@ -684,7 +696,9 @@ static void __init xen_write_gdt_entry_boot(struct desc_struct *dt, int entry,
684static void xen_load_sp0(struct tss_struct *tss, 696static void xen_load_sp0(struct tss_struct *tss,
685 struct thread_struct *thread) 697 struct thread_struct *thread)
686{ 698{
687 struct multicall_space mcs = xen_mc_entry(0); 699 struct multicall_space mcs;
700
701 mcs = xen_mc_entry(0);
688 MULTI_stack_switch(mcs.mc, __KERNEL_DS, thread->sp0); 702 MULTI_stack_switch(mcs.mc, __KERNEL_DS, thread->sp0);
689 xen_mc_issue(PARAVIRT_LAZY_CPU); 703 xen_mc_issue(PARAVIRT_LAZY_CPU);
690} 704}
diff --git a/include/trace/events/xen.h b/include/trace/events/xen.h
index 0b6056de2b00..1dda50834f9c 100644
--- a/include/trace/events/xen.h
+++ b/include/trace/events/xen.h
@@ -405,6 +405,81 @@ TRACE_EVENT(xen_mmu_pgd_unpin,
405 TP_printk("mm %p pgd %p", __entry->mm, __entry->pgd) 405 TP_printk("mm %p pgd %p", __entry->mm, __entry->pgd)
406 ); 406 );
407 407
408/* CPU */
409TRACE_EVENT(xen_cpu_write_ldt_entry,
410 TP_PROTO(struct desc_struct *dt, int entrynum, u64 desc),
411 TP_ARGS(dt, entrynum, desc),
412 TP_STRUCT__entry(
413 __field(struct desc_struct *, dt)
414 __field(int, entrynum)
415 __field(u64, desc)
416 ),
417 TP_fast_assign(__entry->dt = dt;
418 __entry->entrynum = entrynum;
419 __entry->desc = desc;
420 ),
421 TP_printk("dt %p entrynum %d entry %016llx",
422 __entry->dt, __entry->entrynum,
423 (unsigned long long)__entry->desc)
424 );
425
426TRACE_EVENT(xen_cpu_write_idt_entry,
427 TP_PROTO(gate_desc *dt, int entrynum, const gate_desc *ent),
428 TP_ARGS(dt, entrynum, ent),
429 TP_STRUCT__entry(
430 __field(gate_desc *, dt)
431 __field(int, entrynum)
432 ),
433 TP_fast_assign(__entry->dt = dt;
434 __entry->entrynum = entrynum;
435 ),
436 TP_printk("dt %p entrynum %d",
437 __entry->dt, __entry->entrynum)
438 );
439
440TRACE_EVENT(xen_cpu_load_idt,
441 TP_PROTO(const struct desc_ptr *desc),
442 TP_ARGS(desc),
443 TP_STRUCT__entry(
444 __field(unsigned long, addr)
445 ),
446 TP_fast_assign(__entry->addr = desc->address),
447 TP_printk("addr %lx", __entry->addr)
448 );
449
450TRACE_EVENT(xen_cpu_write_gdt_entry,
451 TP_PROTO(struct desc_struct *dt, int entrynum, const void *desc, int type),
452 TP_ARGS(dt, entrynum, desc, type),
453 TP_STRUCT__entry(
454 __field(u64, desc)
455 __field(struct desc_struct *, dt)
456 __field(int, entrynum)
457 __field(int, type)
458 ),
459 TP_fast_assign(__entry->dt = dt;
460 __entry->entrynum = entrynum;
461 __entry->desc = *(u64 *)desc;
462 __entry->type = type;
463 ),
464 TP_printk("dt %p entrynum %d type %d desc %016llx",
465 __entry->dt, __entry->entrynum, __entry->type,
466 (unsigned long long)__entry->desc)
467 );
468
469TRACE_EVENT(xen_cpu_set_ldt,
470 TP_PROTO(const void *addr, unsigned entries),
471 TP_ARGS(addr, entries),
472 TP_STRUCT__entry(
473 __field(const void *, addr)
474 __field(unsigned, entries)
475 ),
476 TP_fast_assign(__entry->addr = addr;
477 __entry->entries = entries),
478 TP_printk("addr %p entries %u",
479 __entry->addr, __entry->entries)
480 );
481
482
408#endif /* _TRACE_XEN_H */ 483#endif /* _TRACE_XEN_H */
409 484
410/* This part must be outside protection */ 485/* This part must be outside protection */