Commit 2b1b3624 authored by Anshuman Khandual's avatar Anshuman Khandual Committed by Junhao He
Browse files

drivers: perf: arm_pmu: Add new sched_task() callback

maillist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I8EC9K
CVE: NA

Reference: https://lore.kernel.org/lkml/20230711082455.215983-2-anshuman.khandual@arm.com/



--------------------------------

This adds armpmu_sched_task(), as generic pmu's sched_task() override which
in turn can utilize a new arm_pmu.sched_task() callback when available from
the arm_pmu instance. This new callback will be used while enabling BRBE in
ARMV8 PMUV3.

Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
Signed-off-by: default avatarJunhao He <hejunhao3@huawei.com>
parent c04137a7
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -518,6 +518,14 @@ static int armpmu_event_init(struct perf_event *event)
	return __hw_perf_event_init(event);
}

static void armpmu_sched_task(struct perf_event_context *ctx, bool sched_in)
{
	struct arm_pmu *armpmu = to_arm_pmu(ctx->pmu);

	if (armpmu->sched_task)
		armpmu->sched_task(ctx, sched_in);
}

static void armpmu_enable(struct pmu *pmu)
{
	struct arm_pmu *armpmu = to_arm_pmu(pmu);
@@ -904,6 +912,7 @@ static struct arm_pmu *__armpmu_alloc(gfp_t flags)
	}

	pmu->pmu = (struct pmu) {
		.sched_task	= armpmu_sched_task,
		.pmu_enable	= armpmu_enable,
		.pmu_disable	= armpmu_disable,
		.event_init	= armpmu_event_init,
+1 −0
Original line number Diff line number Diff line
@@ -97,6 +97,7 @@ struct arm_pmu {
	void		(*stop)(struct arm_pmu *);
	void		(*reset)(void *);
	int		(*map_event)(struct perf_event *event);
	void		(*sched_task)(struct perf_event_context *ctx, bool sched_in);
	int		(*filter_match)(struct perf_event *event);
	int		num_events;
	bool		secure_access; /* 32-bit ARM only */