# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 5791030e6473138d37ce346a84859d1921b47a86
# Parent d4e85f8453ba4da55bcf1e908a862022857f915c
[IA64] Add VTI related perfc
This patch intends to add VTI-related and fw_hypercall counters.
Signed-off-by: Atsushi SAKAI <sakaia@xxxxxxxxxxxxxx>
Signed-off-by: Hiroya INAKOSHI <inakoshi.hiroya@xxxxxxxxxxxxxx>
---
xen/arch/ia64/vmx/mmio.c | 1
xen/arch/ia64/vmx/pal_emul.c | 1
xen/arch/ia64/vmx/vmx_interrupt.c | 1
xen/arch/ia64/vmx/vmx_phy_mode.c | 1
xen/arch/ia64/vmx/vmx_process.c | 1
xen/arch/ia64/vmx/vmx_virt.c | 39 +++++++++++++++++++++++++++++
xen/arch/ia64/xen/hypercall.c | 1
xen/include/asm-ia64/perfc_defn.h | 50 ++++++++++++++++++++++++++++++++++++++
8 files changed, 95 insertions(+)
diff -r d4e85f8453ba -r 5791030e6473 xen/arch/ia64/vmx/mmio.c
--- a/xen/arch/ia64/vmx/mmio.c Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/arch/ia64/vmx/mmio.c Sun Sep 10 14:31:54 2006 -0600
@@ -213,6 +213,7 @@ static void mmio_access(VCPU *vcpu, u64
iot=__gpfn_is_io(vcpu->domain, src_pa>>PAGE_SHIFT);
v_plat = vmx_vcpu_get_plat(vcpu);
+ perfc_incra(vmx_mmio_access, iot >> 56);
switch (iot) {
case GPFN_PIB:
if(!dir)
diff -r d4e85f8453ba -r 5791030e6473 xen/arch/ia64/vmx/pal_emul.c
--- a/xen/arch/ia64/vmx/pal_emul.c Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/arch/ia64/vmx/pal_emul.c Sun Sep 10 14:31:54 2006 -0600
@@ -389,6 +389,7 @@ pal_emul(VCPU *vcpu) {
vcpu_get_gr_nat(vcpu,28,&gr28); //bank1
+ perfc_incrc(vmx_pal_emul);
switch (gr28) {
case PAL_CACHE_FLUSH:
result = pal_cache_flush(vcpu);
diff -r d4e85f8453ba -r 5791030e6473 xen/arch/ia64/vmx/vmx_interrupt.c
--- a/xen/arch/ia64/vmx/vmx_interrupt.c Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_interrupt.c Sun Sep 10 14:31:54 2006 -0600
@@ -92,6 +92,7 @@ inject_guest_interruption(VCPU *vcpu, u6
u64 viva;
REGS *regs;
ISR pt_isr;
+ perfc_incra(vmx_inject_guest_interruption, vec >> 8);
regs=vcpu_regs(vcpu);
// clear cr.isr.ri
pt_isr.val = VMX(vcpu,cr_isr);
diff -r d4e85f8453ba -r 5791030e6473 xen/arch/ia64/vmx/vmx_phy_mode.c
--- a/xen/arch/ia64/vmx/vmx_phy_mode.c Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_phy_mode.c Sun Sep 10 14:31:54 2006 -0600
@@ -262,6 +262,7 @@ switch_mm_mode(VCPU *vcpu, IA64_PSR old_
int act;
REGS * regs=vcpu_regs(vcpu);
act = mm_switch_action(old_psr, new_psr);
+ perfc_incra(vmx_switch_mm_mode, act);
switch (act) {
case SW_V2P:
// printf("V -> P mode transition: (0x%lx -> 0x%lx)\n",
diff -r d4e85f8453ba -r 5791030e6473 xen/arch/ia64/vmx/vmx_process.c
--- a/xen/arch/ia64/vmx/vmx_process.c Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_process.c Sun Sep 10 14:31:54 2006 -0600
@@ -115,6 +115,7 @@ vmx_ia64_handle_break (unsigned long ifa
struct domain *d = current->domain;
struct vcpu *v = current;
+ perfc_incrc(vmx_ia64_handle_break);
#ifdef CRASH_DEBUG
if ((iim == 0 || iim == CDB_BREAK_NUM) && !user_mode(regs) &&
IS_VMM_ADDRESS(regs->cr_iip)) {
diff -r d4e85f8453ba -r 5791030e6473 xen/arch/ia64/vmx/vmx_virt.c
--- a/xen/arch/ia64/vmx/vmx_virt.c Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/arch/ia64/vmx/vmx_virt.c Sun Sep 10 14:31:54 2006 -0600
@@ -1398,120 +1398,159 @@ if ( (cause == 0xff && opcode == 0x1e000
switch(cause) {
case EVENT_RSM:
+ perfc_incrc(vmx_rsm);
status=vmx_emul_rsm(vcpu, inst);
break;
case EVENT_SSM:
+ perfc_incrc(vmx_ssm);
status=vmx_emul_ssm(vcpu, inst);
break;
case EVENT_MOV_TO_PSR:
+ perfc_incrc(vmx_mov_to_psr);
status=vmx_emul_mov_to_psr(vcpu, inst);
break;
case EVENT_MOV_FROM_PSR:
+ perfc_incrc(vmx_mov_from_psr);
status=vmx_emul_mov_from_psr(vcpu, inst);
break;
case EVENT_MOV_FROM_CR:
+ perfc_incrc(vmx_mov_from_cr);
status=vmx_emul_mov_from_cr(vcpu, inst);
break;
case EVENT_MOV_TO_CR:
+ perfc_incrc(vmx_mov_to_cr);
status=vmx_emul_mov_to_cr(vcpu, inst);
break;
case EVENT_BSW_0:
+ perfc_incrc(vmx_bsw0);
status=vmx_emul_bsw0(vcpu, inst);
break;
case EVENT_BSW_1:
+ perfc_incrc(vmx_bsw1);
status=vmx_emul_bsw1(vcpu, inst);
break;
case EVENT_COVER:
+ perfc_incrc(vmx_cover);
status=vmx_emul_cover(vcpu, inst);
break;
case EVENT_RFI:
+ perfc_incrc(vmx_rfi);
status=vmx_emul_rfi(vcpu, inst);
break;
case EVENT_ITR_D:
+ perfc_incrc(vmx_itr_d);
status=vmx_emul_itr_d(vcpu, inst);
break;
case EVENT_ITR_I:
+ perfc_incrc(vmx_itr_i);
status=vmx_emul_itr_i(vcpu, inst);
break;
case EVENT_PTR_D:
+ perfc_incrc(vmx_ptr_d);
status=vmx_emul_ptr_d(vcpu, inst);
break;
case EVENT_PTR_I:
+ perfc_incrc(vmx_ptr_i);
status=vmx_emul_ptr_i(vcpu, inst);
break;
case EVENT_ITC_D:
+ perfc_incrc(vmx_itc_d);
status=vmx_emul_itc_d(vcpu, inst);
break;
case EVENT_ITC_I:
+ perfc_incrc(vmx_itc_i);
status=vmx_emul_itc_i(vcpu, inst);
break;
case EVENT_PTC_L:
+ perfc_incrc(vmx_ptc_l);
status=vmx_emul_ptc_l(vcpu, inst);
break;
case EVENT_PTC_G:
+ perfc_incrc(vmx_ptc_g);
status=vmx_emul_ptc_g(vcpu, inst);
break;
case EVENT_PTC_GA:
+ perfc_incrc(vmx_ptc_ga);
status=vmx_emul_ptc_ga(vcpu, inst);
break;
case EVENT_PTC_E:
+ perfc_incrc(vmx_ptc_e);
status=vmx_emul_ptc_e(vcpu, inst);
break;
case EVENT_MOV_TO_RR:
+ perfc_incrc(vmx_mov_to_rr);
status=vmx_emul_mov_to_rr(vcpu, inst);
break;
case EVENT_MOV_FROM_RR:
+ perfc_incrc(vmx_mov_from_rr);
status=vmx_emul_mov_from_rr(vcpu, inst);
break;
case EVENT_THASH:
+ perfc_incrc(vmx_thash);
status=vmx_emul_thash(vcpu, inst);
break;
case EVENT_TTAG:
+ perfc_incrc(vmx_ttag);
status=vmx_emul_ttag(vcpu, inst);
break;
case EVENT_TPA:
+ perfc_incrc(vmx_tpa);
status=vmx_emul_tpa(vcpu, inst);
break;
case EVENT_TAK:
+ perfc_incrc(vmx_tak);
status=vmx_emul_tak(vcpu, inst);
break;
case EVENT_MOV_TO_AR_IMM:
+ perfc_incrc(vmx_mov_to_ar_imm);
status=vmx_emul_mov_to_ar_imm(vcpu, inst);
break;
case EVENT_MOV_TO_AR:
+ perfc_incrc(vmx_mov_to_ar_reg);
status=vmx_emul_mov_to_ar_reg(vcpu, inst);
break;
case EVENT_MOV_FROM_AR:
+ perfc_incrc(vmx_mov_from_ar_reg);
status=vmx_emul_mov_from_ar_reg(vcpu, inst);
break;
case EVENT_MOV_TO_DBR:
+ perfc_incrc(vmx_mov_to_dbr);
status=vmx_emul_mov_to_dbr(vcpu, inst);
break;
case EVENT_MOV_TO_IBR:
+ perfc_incrc(vmx_mov_to_ibr);
status=vmx_emul_mov_to_ibr(vcpu, inst);
break;
case EVENT_MOV_TO_PMC:
+ perfc_incrc(vmx_mov_to_pmc);
status=vmx_emul_mov_to_pmc(vcpu, inst);
break;
case EVENT_MOV_TO_PMD:
+ perfc_incrc(vmx_mov_to_pmd);
status=vmx_emul_mov_to_pmd(vcpu, inst);
break;
case EVENT_MOV_TO_PKR:
+ perfc_incrc(vmx_mov_to_pkr);
status=vmx_emul_mov_to_pkr(vcpu, inst);
break;
case EVENT_MOV_FROM_DBR:
+ perfc_incrc(vmx_mov_from_dbr);
status=vmx_emul_mov_from_dbr(vcpu, inst);
break;
case EVENT_MOV_FROM_IBR:
+ perfc_incrc(vmx_mov_from_ibr);
status=vmx_emul_mov_from_ibr(vcpu, inst);
break;
case EVENT_MOV_FROM_PMC:
+ perfc_incrc(vmx_mov_from_pmc);
status=vmx_emul_mov_from_pmc(vcpu, inst);
break;
case EVENT_MOV_FROM_PKR:
+ perfc_incrc(vmx_mov_from_pkr);
status=vmx_emul_mov_from_pkr(vcpu, inst);
break;
case EVENT_MOV_FROM_CPUID:
+ perfc_incrc(vmx_mov_from_cpuid);
status=vmx_emul_mov_from_cpuid(vcpu, inst);
break;
case EVENT_VMSW:
diff -r d4e85f8453ba -r 5791030e6473 xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/arch/ia64/xen/hypercall.c Sun Sep 10 14:31:54 2006 -0600
@@ -211,6 +211,7 @@ fw_hypercall (struct pt_regs *regs)
IA64FAULT fault;
unsigned long index = regs->r2 & FW_HYPERCALL_NUM_MASK_HIGH;
+ perfc_incra(fw_hypercall, index >> 8);
switch (index) {
case FW_HYPERCALL_PAL_CALL:
//printf("*** PAL hypercall: index=%d\n",regs->r28);
diff -r d4e85f8453ba -r 5791030e6473 xen/include/asm-ia64/perfc_defn.h
--- a/xen/include/asm-ia64/perfc_defn.h Sun Sep 10 14:26:27 2006 -0600
+++ b/xen/include/asm-ia64/perfc_defn.h Sun Sep 10 14:31:54 2006 -0600
@@ -35,6 +35,48 @@ PERFCOUNTER_ARRAY(mov_from_cr, "p
PERFCOUNTER_ARRAY(misc_privop, "privop misc", 64)
+// privileged instructions to fall into vmx_entry
+PERFCOUNTER_CPU(vmx_rsm, "vmx privop rsm")
+PERFCOUNTER_CPU(vmx_ssm, "vmx privop ssm")
+PERFCOUNTER_CPU(vmx_mov_to_psr, "vmx privop mov_to_psr")
+PERFCOUNTER_CPU(vmx_mov_from_psr, "vmx privop mov_from_psr")
+PERFCOUNTER_CPU(vmx_mov_from_cr, "vmx privop mov_from_cr")
+PERFCOUNTER_CPU(vmx_mov_to_cr, "vmx privop mov_to_cr")
+PERFCOUNTER_CPU(vmx_bsw0, "vmx privop bsw0")
+PERFCOUNTER_CPU(vmx_bsw1, "vmx privop bsw1")
+PERFCOUNTER_CPU(vmx_cover, "vmx privop cover")
+PERFCOUNTER_CPU(vmx_rfi, "vmx privop rfi")
+PERFCOUNTER_CPU(vmx_itr_d, "vmx privop itr_d")
+PERFCOUNTER_CPU(vmx_itr_i, "vmx privop itr_i")
+PERFCOUNTER_CPU(vmx_ptr_d, "vmx privop ptr_d")
+PERFCOUNTER_CPU(vmx_ptr_i, "vmx privop ptr_i")
+PERFCOUNTER_CPU(vmx_itc_d, "vmx privop itc_d")
+PERFCOUNTER_CPU(vmx_itc_i, "vmx privop itc_i")
+PERFCOUNTER_CPU(vmx_ptc_l, "vmx privop ptc_l")
+PERFCOUNTER_CPU(vmx_ptc_g, "vmx privop ptc_g")
+PERFCOUNTER_CPU(vmx_ptc_ga, "vmx privop ptc_ga")
+PERFCOUNTER_CPU(vmx_ptc_e, "vmx privop ptc_e")
+PERFCOUNTER_CPU(vmx_mov_to_rr, "vmx privop mov_to_rr")
+PERFCOUNTER_CPU(vmx_mov_from_rr, "vmx privop mov_from_rr")
+PERFCOUNTER_CPU(vmx_thash, "vmx privop thash")
+PERFCOUNTER_CPU(vmx_ttag, "vmx privop ttag")
+PERFCOUNTER_CPU(vmx_tpa, "vmx privop tpa")
+PERFCOUNTER_CPU(vmx_tak, "vmx privop tak")
+PERFCOUNTER_CPU(vmx_mov_to_ar_imm, "vmx privop mov_to_ar_imm")
+PERFCOUNTER_CPU(vmx_mov_to_ar_reg, "vmx privop mov_to_ar_reg")
+PERFCOUNTER_CPU(vmx_mov_from_ar_reg, "vmx privop mov_from_ar_reg")
+PERFCOUNTER_CPU(vmx_mov_to_dbr, "vmx privop mov_to_dbr")
+PERFCOUNTER_CPU(vmx_mov_to_ibr, "vmx privop mov_to_ibr")
+PERFCOUNTER_CPU(vmx_mov_to_pmc, "vmx privop mov_to_pmc")
+PERFCOUNTER_CPU(vmx_mov_to_pmd, "vmx privop mov_to_pmd")
+PERFCOUNTER_CPU(vmx_mov_to_pkr, "vmx privop mov_to_pkr")
+PERFCOUNTER_CPU(vmx_mov_from_dbr, "vmx privop mov_from_dbr")
+PERFCOUNTER_CPU(vmx_mov_from_ibr, "vmx privop mov_from_ibr")
+PERFCOUNTER_CPU(vmx_mov_from_pmc, "vmx privop mov_from_pmc")
+PERFCOUNTER_CPU(vmx_mov_from_pkr, "vmx privop mov_from_pkr")
+PERFCOUNTER_CPU(vmx_mov_from_cpuid, "vmx privop mov_from_cpuid")
+
+
PERFCOUNTER_ARRAY(slow_hyperprivop, "slow hyperprivops", HYPERPRIVOP_MAX + 1)
PERFCOUNTER_ARRAY(fast_hyperprivop, "fast hyperprivops", HYPERPRIVOP_MAX + 1)
@@ -43,6 +85,14 @@ PERFCOUNTER_ARRAY(fast_reflect, "f
PERFSTATUS(vhpt_nbr_entries, "nbr of entries per VHPT")
PERFSTATUS_CPU(vhpt_valid_entries, "nbr of valid entries in VHPT")
+
+PERFCOUNTER_ARRAY(vmx_mmio_access, "vmx_mmio_access", 8)
+PERFCOUNTER_CPU(vmx_pal_emul, "vmx_pal_emul")
+PERFCOUNTER_ARRAY(vmx_switch_mm_mode, "vmx_switch_mm_mode", 8)
+PERFCOUNTER_CPU(vmx_ia64_handle_break,"vmx_ia64_handle_break")
+PERFCOUNTER_ARRAY(vmx_inject_guest_interruption,
+ "vmx_inject_guest_interruption", 0x80)
+PERFCOUNTER_ARRAY(fw_hypercall, "fw_hypercall", 0x20)
#ifdef CONFIG_PRIVOP_ADDRS
#ifndef PERFPRIVOPADDR
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|