X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=linux_module%2Fiface-pmu.c;h=948e5f187d0efa9c0f306e0235c57a620a2e70a0;hb=471edd59ca70371e97cbad759e1710433f35990d;hp=1f0f4591cd08d1680e3876bc5ea40cad4091e8b4;hpb=a24e987112d3807a784b3e9599b2dceb9c6b3481;p=palacios.git diff --git a/linux_module/iface-pmu.c b/linux_module/iface-pmu.c index 1f0f459..948e5f1 100644 --- a/linux_module/iface-pmu.c +++ b/linux_module/iface-pmu.c @@ -39,7 +39,7 @@ static DEFINE_PER_CPU(u32, pmu_refcount) = 0; static inline void cpuid_string(u32 id, u32 dest[4]) { asm volatile("cpuid" - :"=a"(dest),"=b"(*(dest+1)),"=c"(*(dest+2)),"=d"(*(dest+3)) + :"=a"(*dest),"=b"(*(dest+1)),"=c"(*(dest+2)),"=d"(*(dest+3)) :"a"(id)); } @@ -124,7 +124,6 @@ static int amd_get_slot(void) { } return slot; - return -1; } /* @@ -427,14 +426,14 @@ static uint64_t amd_get_value(v3_pmon_ctr_t ctr) { } break; case V3_PMON_MEM_LOAD_COUNT: - if((ctr_idx = amd_find_idx(AMD_PREFETCH_INST_DISPATCHED, AMD_LOAD)) >= 0) { + if((ctr_idx = amd_find_idx(AMD_DATA_CACHE_ACCESSES, 0x0)) >= 0) { AMD_CTR_READ(count, ctr_idx); } else { goto AMD_READ_FAILED; } break; case V3_PMON_MEM_STORE_COUNT: - if((ctr_idx = amd_find_idx(AMD_PREFETCH_INST_DISPATCHED, AMD_STORE)) >= 0) { + if((ctr_idx = amd_find_idx(AMD_DATA_CACHE_ACCESSES, 0x0)) >= 0) { AMD_CTR_READ(count, ctr_idx); } else { goto AMD_READ_FAILED; @@ -448,7 +447,7 @@ static uint64_t amd_get_value(v3_pmon_ctr_t ctr) { } break; case V3_PMON_TLB_MISS_COUNT: - if((ctr_idx = amd_find_idx(AMD_L1_DTLB_AND_L2_DTLB_MISS, 0x0)) >= 0) { + if((ctr_idx = amd_find_idx(AMD_L1_DTLB_AND_L2_DTLB_MISS, 0x7)) >= 0) { AMD_CTR_READ(count, ctr_idx); } else { goto AMD_READ_FAILED; @@ -483,14 +482,14 @@ static int amd_start_tracking(v3_pmon_ctr_t ctr) { break; case V3_PMON_MEM_LOAD_COUNT: if((ctr_idx = amd_get_slot()) >= 0) { - AMD_CTRL_START(AMD_PREFETCH_INST_DISPATCHED, AMD_LOAD, ctr_idx); + AMD_CTRL_START(AMD_DATA_CACHE_ACCESSES, 0x0, ctr_idx); } else { goto AMD_START_FAILED; } break; case V3_PMON_MEM_STORE_COUNT: if((ctr_idx = amd_get_slot()) >= 0) { - AMD_CTRL_START(AMD_PREFETCH_INST_DISPATCHED, AMD_STORE, ctr_idx); + AMD_CTRL_START(AMD_DATA_CACHE_ACCESSES, 0x0, ctr_idx); } else { goto AMD_START_FAILED; } @@ -504,7 +503,7 @@ static int amd_start_tracking(v3_pmon_ctr_t ctr) { break; case V3_PMON_TLB_MISS_COUNT: if((ctr_idx = amd_get_slot()) >= 0) { - AMD_CTRL_START(AMD_L1_DTLB_AND_L2_DTLB_MISS, 0x0, ctr_idx); + AMD_CTRL_START(AMD_L1_DTLB_AND_L2_DTLB_MISS, 0x7, ctr_idx); } else { goto AMD_START_FAILED; } @@ -540,14 +539,14 @@ static int amd_stop_tracking(v3_pmon_ctr_t ctr) { } break; case V3_PMON_MEM_LOAD_COUNT: - if((ctr_idx = amd_find_idx(AMD_PREFETCH_INST_DISPATCHED, AMD_LOAD)) >= 0) { + if((ctr_idx = amd_find_idx(AMD_DATA_CACHE_ACCESSES, 0x0)) >= 0) { AMD_CTRL_STOP(ctr_idx); } else { goto AMD_STOP_FAILED; } break; case V3_PMON_MEM_STORE_COUNT: - if((ctr_idx = amd_find_idx(AMD_PREFETCH_INST_DISPATCHED, AMD_STORE)) >= 0) { + if((ctr_idx = amd_find_idx(AMD_DATA_CACHE_ACCESSES, 0x0)) >= 0) { AMD_CTRL_STOP(ctr_idx); } else { goto AMD_STOP_FAILED; @@ -561,7 +560,7 @@ static int amd_stop_tracking(v3_pmon_ctr_t ctr) { } break; case V3_PMON_TLB_MISS_COUNT: - if((ctr_idx = amd_find_idx(AMD_L1_DTLB_AND_L2_DTLB_MISS, 0x0)) >= 0) { + if((ctr_idx = amd_find_idx(AMD_L1_DTLB_AND_L2_DTLB_MISS, 0x7)) >= 0) { AMD_CTRL_STOP(ctr_idx); } else { goto AMD_STOP_FAILED; @@ -644,11 +643,17 @@ static int pmu_init( void ) { return 0; } +static int pmu_deinit(void) +{ + // nothing + return 0; +} + static struct linux_ext pmu_ext = { .name = "PMU", .init = pmu_init, - .deinit = NULL, + .deinit = pmu_deinit, .guest_init = NULL, .guest_deinit = NULL };