Commit 4baeb068 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar
Browse files

perf/core: Merge struct pmu::pmu_disable_count into struct perf_cpu_pmu_context::pmu_disable_count



Because it makes no sense to have two per-cpu allocations per pmu.

Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
Reviewed-by: default avatarRavi Bangoria <ravi.bangoria@amd.com>
Link: https://lore.kernel.org/r/20241104135518.518730578@infradead.org
parent 8f2221f5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -343,7 +343,6 @@ struct pmu {
	 */
	unsigned int			scope;

	int __percpu			*pmu_disable_count;
	struct perf_cpu_pmu_context __percpu *cpu_pmu_context;
	atomic_t			exclusive_cnt; /* < 0: cpu; > 0: tsk */
	int				task_ctx_nr;
@@ -1031,6 +1030,7 @@ struct perf_cpu_pmu_context {

	int				active_oncpu;
	int				exclusive;
	int				pmu_disable_count;

	raw_spinlock_t			hrtimer_lock;
	struct hrtimer			hrtimer;
+4 −8
Original line number Diff line number Diff line
@@ -1219,21 +1219,22 @@ static int perf_mux_hrtimer_restart_ipi(void *arg)

void perf_pmu_disable(struct pmu *pmu)
{
	int *count = this_cpu_ptr(pmu->pmu_disable_count);
	int *count = &this_cpu_ptr(pmu->cpu_pmu_context)->pmu_disable_count;
	if (!(*count)++)
		pmu->pmu_disable(pmu);
}

void perf_pmu_enable(struct pmu *pmu)
{
	int *count = this_cpu_ptr(pmu->pmu_disable_count);
	int *count = &this_cpu_ptr(pmu->cpu_pmu_context)->pmu_disable_count;
	if (!--(*count))
		pmu->pmu_enable(pmu);
}

static void perf_assert_pmu_disabled(struct pmu *pmu)
{
	WARN_ON_ONCE(*this_cpu_ptr(pmu->pmu_disable_count) == 0);
	int *count = &this_cpu_ptr(pmu->cpu_pmu_context)->pmu_disable_count;
	WARN_ON_ONCE(*count == 0);
}

static inline void perf_pmu_read(struct perf_event *event)
@@ -11906,7 +11907,6 @@ static bool idr_cmpxchg(struct idr *idr, unsigned long id, void *old, void *new)

static void perf_pmu_free(struct pmu *pmu)
{
	free_percpu(pmu->pmu_disable_count);
	if (pmu_bus_running && pmu->dev && pmu->dev != PMU_NULL_DEV) {
		if (pmu->nr_addr_filters)
			device_remove_file(pmu->dev, &dev_attr_nr_addr_filters);
@@ -11925,10 +11925,6 @@ int perf_pmu_register(struct pmu *_pmu, const char *name, int type)
	struct pmu *pmu __free(pmu_unregister) = _pmu;
	guard(mutex)(&pmus_lock);

	pmu->pmu_disable_count = alloc_percpu(int);
	if (!pmu->pmu_disable_count)
		return -ENOMEM;

	if (WARN_ONCE(!name, "Can not register anonymous pmu.\n"))
		return -EINVAL;