23 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_LIB 27 #include <linux/kernel.h> 28 #include <linux/module.h> 29 #include <linux/version.h> 35 static void enable_user_space_access_pccnt(
void *dt)
40 asm volatile(
"msr pmcntenset_el0, %0" ::
"r" ((u64)(1 << 31)));
43 asm volatile(
"msr pmuserenr_el0, %0" : :
"r"(1 |((u64)(1 << 2))));
46 asm volatile(
"mrs %0, pmcr_el0" :
"=r" (pmcr_val));
47 asm volatile(
"msr pmcr_el0, %0" : :
"r" (pmcr_val | 1 |((u64)(1 << 2))));
50 static void disable_user_space_pccnt_access(
void *dt)
53 asm volatile(
"msr pmcntenset_el0, %0" ::
"r" (0 << 31));
56 asm volatile(
"msr pmuserenr_el0, %0" : :
"r"((u64)0));
62 on_each_cpu(enable_user_space_access_pccnt,
NULL, 1);
69 on_each_cpu(disable_user_space_pccnt_access,
NULL, 1);
73 #undef M0_TRACE_SUBSYSTEM
int start_cycle_counter(void)
void finish_cycle_counter(void)