char *op_name_from_perf_id(void) { enum arm_perf_pmu_ids id = armpmu_get_pmu_id(); switch (id) { case ARM_PERF_PMU_ID_XSCALE1: return "arm/xscale1"; case ARM_PERF_PMU_ID_XSCALE2: return "arm/xscale2"; case ARM_PERF_PMU_ID_V6: return "arm/armv6"; case ARM_PERF_PMU_ID_V6MP: return "arm/mpcore"; case ARM_PERF_PMU_ID_CA8: return "arm/armv7"; case ARM_PERF_PMU_ID_CA9: return "arm/armv7-ca9"; case ARM_PERF_PMU_ID_SCORPION: return "arm/armv7-scorpion"; case ARM_PERF_PMU_ID_SCORPIONMP: return "arm/armv7-scorpionmp"; case ARM_PERF_PMU_ID_KRAIT: return "arm/armv7-krait"; default: return NULL; } }
int __init oprofile_arch_init(struct oprofile_operations *ops) { int cpu, ret = 0; perf_num_counters = armpmu_get_max_events(); counter_config = kcalloc(perf_num_counters, sizeof(struct op_counter_config), GFP_KERNEL); if (!counter_config) { pr_info("oprofile: failed to allocate %d " "counters\n", perf_num_counters); return -ENOMEM; } ret = init_driverfs(); if (ret) { kfree(counter_config); counter_config = NULL; return ret; } for_each_possible_cpu(cpu) { perf_events[cpu] = kcalloc(perf_num_counters, sizeof(struct perf_event *), GFP_KERNEL); if (!perf_events[cpu]) { pr_info("oprofile: failed to allocate %d perf events " "for cpu %d\n", perf_num_counters, cpu); while (--cpu >= 0) kfree(perf_events[cpu]); return -ENOMEM; } } ops->backtrace = arm_backtrace; ops->create_files = op_arm_create_files; ops->setup = op_arm_setup; ops->start = op_arm_start; ops->stop = op_arm_stop; ops->shutdown = op_arm_stop; ops->cpu_type = op_name_from_perf_id(armpmu_get_pmu_id()); if (!ops->cpu_type) ret = -ENODEV; else pr_info("oprofile: using %s\n", ops->cpu_type); return ret; }
char *op_name_from_perf_id(void) { enum arm_perf_pmu_ids id = armpmu_get_pmu_id(); switch (id) { case ARM_PERF_PMU_ID_XSCALE1: return "arm/xscale1"; case ARM_PERF_PMU_ID_XSCALE2: return "arm/xscale2"; case ARM_PERF_PMU_ID_V6: return "arm/armv6"; case ARM_PERF_PMU_ID_V6MP: return "arm/mpcore"; case ARM_PERF_PMU_ID_CA8: return "arm/armv7"; case ARM_PERF_PMU_ID_CA9: return "arm/armv7-ca9"; case ARM_PERF_PMU_ID_CA5: return "arm/armv7-ca5"; default: return NULL; } }