diff -r 3191627e5ad6 xen/arch/x86/hvm/svm/svm.c --- a/xen/arch/x86/hvm/svm/svm.c Wed Oct 31 16:21:18 2007 +0000 +++ b/xen/arch/x86/hvm/svm/svm.c Thu Nov 01 14:28:45 2007 +0000 @@ -2128,8 +2128,10 @@ asmlinkage void svm_vmexit_handler(struc svm_dump_vmcb(__func__, vmcb); goto exit_and_crash; } - - perfc_incra(svmexits, exit_reason); + if ( exit_reason != VMEXIT_NPF) + perfc_incra(svmexits, exit_reason); + else + perfc_incra(svmexits, VMEXIT_NPF_PERFC); /* Event delivery caused this intercept? Queue for redelivery. */ eventinj = vmcb->exitintinfo; diff -r 3191627e5ad6 xen/include/asm-x86/hvm/svm/vmcb.h --- a/xen/include/asm-x86/hvm/svm/vmcb.h Wed Oct 31 16:21:18 2007 +0000 +++ b/xen/include/asm-x86/hvm/svm/vmcb.h Thu Nov 01 15:15:49 2007 +0000 @@ -298,6 +298,8 @@ enum VMEXIT_EXITCODE VMEXIT_SKINIT = 134, VMEXIT_RDTSCP = 135, VMEXIT_ICEBP = 136, + VMEXIT_NPF_PERFC, /* index for NPF vmexit perf counter */ + VMEXIT_PERFC_SIZE, /* end of vmexit perf counter array */ VMEXIT_NPF = 1024, /* nested paging fault */ VMEXIT_INVALID = -1 }; diff -r 3191627e5ad6 xen/include/asm-x86/perfc_defn.h --- a/xen/include/asm-x86/perfc_defn.h Wed Oct 31 16:21:18 2007 +0000 +++ b/xen/include/asm-x86/perfc_defn.h Thu Nov 01 14:28:45 2007 +0000 @@ -9,7 +9,7 @@ PERFCOUNTER_ARRAY(vmexits, PERFCOUNTER_ARRAY(vmexits, "vmexits", VMX_PERF_EXIT_REASON_SIZE) PERFCOUNTER_ARRAY(cause_vector, "cause vector", VMX_PERF_VECTOR_SIZE) -#define SVM_PERF_EXIT_REASON_SIZE (1+136) +#define SVM_PERF_EXIT_REASON_SIZE (1+137) PERFCOUNTER_ARRAY(svmexits, "SVMexits", SVM_PERF_EXIT_REASON_SIZE) PERFCOUNTER(seg_fixups, "segmentation fixups")