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));
}
if ((get_cpu_var(pmu_refcount)--)==0) {
put_cpu_var(pmu_refcount);
// actually deinit
+ return;
}
put_cpu_var(pmu_refcount);
}
}
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;
}
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;
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;
}
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;
}
}
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;
}
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;
if ((get_cpu_var(pmu_refcount)--)==0) {
put_cpu_var(pmu_refcount);
// actually deinit
+ return;
}
put_cpu_var(pmu_refcount);
}
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
};