diff options
Diffstat (limited to 'arch/arc/kernel/perf_event.c')
-rw-r--r-- | arch/arc/kernel/perf_event.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/arch/arc/kernel/perf_event.c b/arch/arc/kernel/perf_event.c index b9a5685a990e..ae1c485cbc68 100644 --- a/arch/arc/kernel/perf_event.c +++ b/arch/arc/kernel/perf_event.c | |||
@@ -244,25 +244,23 @@ static int arc_pmu_device_probe(struct platform_device *pdev) | |||
244 | pr_err("This core does not have performance counters!\n"); | 244 | pr_err("This core does not have performance counters!\n"); |
245 | return -ENODEV; | 245 | return -ENODEV; |
246 | } | 246 | } |
247 | BUG_ON(pct_bcr.c > ARC_PMU_MAX_HWEVENTS); | ||
247 | 248 | ||
248 | arc_pmu = devm_kzalloc(&pdev->dev, sizeof(struct arc_pmu), | 249 | READ_BCR(ARC_REG_CC_BUILD, cc_bcr); |
249 | GFP_KERNEL); | 250 | if (!cc_bcr.v) { |
251 | pr_err("Performance counters exist, but no countable conditions?\n"); | ||
252 | return -ENODEV; | ||
253 | } | ||
254 | |||
255 | arc_pmu = devm_kzalloc(&pdev->dev, sizeof(struct arc_pmu), GFP_KERNEL); | ||
250 | if (!arc_pmu) | 256 | if (!arc_pmu) |
251 | return -ENOMEM; | 257 | return -ENOMEM; |
252 | 258 | ||
253 | arc_pmu->n_counters = pct_bcr.c; | 259 | arc_pmu->n_counters = pct_bcr.c; |
254 | BUG_ON(arc_pmu->n_counters > ARC_PMU_MAX_HWEVENTS); | ||
255 | |||
256 | arc_pmu->counter_size = 32 + (pct_bcr.s << 4); | 260 | arc_pmu->counter_size = 32 + (pct_bcr.s << 4); |
257 | pr_info("ARC PMU found with %d counters of size %d bits\n", | ||
258 | arc_pmu->n_counters, arc_pmu->counter_size); | ||
259 | |||
260 | READ_BCR(ARC_REG_CC_BUILD, cc_bcr); | ||
261 | |||
262 | if (!cc_bcr.v) | ||
263 | pr_err("Strange! Performance counters exist, but no countable conditions?\n"); | ||
264 | 261 | ||
265 | pr_info("ARC PMU has %d countable conditions\n", cc_bcr.c); | 262 | pr_info("ARC perf\t: %d counters (%d bits), %d countable conditions\n", |
263 | arc_pmu->n_counters, arc_pmu->counter_size, cc_bcr.c); | ||
266 | 264 | ||
267 | cc_name.str[8] = 0; | 265 | cc_name.str[8] = 0; |
268 | for (i = 0; i < PERF_COUNT_HW_MAX; i++) | 266 | for (i = 0; i < PERF_COUNT_HW_MAX; i++) |