static void service_level_perf_print(struct seq_file *m, struct service_level *sl) { if (cpum_cf_avail()) sl_print_counter(m); if (cpum_sf_avail()) sl_print_sampling(m); }
int perf_num_counters(void) { int num = 0; if (cpum_cf_avail()) num += PERF_CPUM_CF_MAX_CTR; if (cpum_sf_avail()) num += PERF_CPUM_SF_MAX_CTR; return num; }
void perf_event_print_debug(void) { unsigned long flags; local_irq_save(flags); if (cpum_cf_avail()) print_debug_cf(); if (cpum_sf_avail()) print_debug_sf(); local_irq_restore(flags); }
/* Get the CPU speed, try sampling facility first and CPU attributes second. */ static void cf_diag_get_cpu_speed(void) { if (cpum_sf_avail()) { /* Sampling facility first */ struct hws_qsi_info_block si; memset(&si, 0, sizeof(si)); if (!qsi(&si)) { cf_diag_cpu_speed = si.cpu_speed; return; } } if (test_facility(34)) { /* CPU speed extract static part */ unsigned long mhz = __ecag(ECAG_CPU_ATTRIBUTE, 0); if (mhz != -1UL) cf_diag_cpu_speed = mhz & 0xffffffff; } }
const char *perf_pmu_name(void) { if (cpum_cf_avail() || cpum_sf_avail()) return "CPU-measurement facilities (CPUMF)"; return "pmu"; }