···5555extern void5656release_pmu(enum arm_pmu_type type);57575858-/**5959- * init_pmu() - Initialise the PMU.6060- *6161- * Initialise the system ready for PMU enabling. This should typically set the6262- * IRQ affinity and nothing else. The users (oprofile/perf events etc) will do6363- * the actual hardware initialisation.6464- */6565-extern int6666-init_pmu(enum arm_pmu_type type);6767-6858#else /* CONFIG_CPU_HAS_PMU */69597060#include <linux/err.h>
+10-1
arch/arm/kernel/perf_event.c
···343343{344344 struct perf_event *sibling, *leader = event->group_leader;345345 struct pmu_hw_events fake_pmu;346346+ DECLARE_BITMAP(fake_used_mask, ARMPMU_MAX_HWEVENTS);346347347347- memset(&fake_pmu, 0, sizeof(fake_pmu));348348+ /*349349+ * Initialise the fake PMU. We only need to populate the350350+ * used_mask for the purposes of validation.351351+ */352352+ memset(fake_used_mask, 0, sizeof(fake_used_mask));353353+ fake_pmu.used_mask = fake_used_mask;348354349355 if (!validate_event(&fake_pmu, leader))350356 return -ENOSPC;···401395 irq_handler_t handle_irq;402396 int i, err, irq, irqs;403397 struct platform_device *pmu_device = armpmu->plat_device;398398+399399+ if (!pmu_device)400400+ return -ENODEV;404401405402 err = reserve_pmu(armpmu->type);406403 if (err) {