Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e54a5a0 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar
Browse files

perf: Optimize sw events



Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 82cd6def
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -1012,19 +1012,21 @@ static inline void perf_fetch_caller_regs(struct pt_regs *regs)
	perf_arch_fetch_caller_regs(regs, CALLER_ADDR0);
}

static inline void
static __always_inline void
perf_sw_event(u32 event_id, u64 nr, int nmi, struct pt_regs *regs, u64 addr)
{
	if (atomic_read(&perf_swevent_enabled[event_id])) {
	struct pt_regs hot_regs;

	JUMP_LABEL(&perf_swevent_enabled[event_id], have_event);
	return;

have_event:
	if (!regs) {
		perf_fetch_caller_regs(&hot_regs);
		regs = &hot_regs;
	}
	__perf_sw_event(event_id, nr, nmi, regs, addr);
}
}

extern void perf_event_mmap(struct vm_area_struct *vma);
extern struct perf_guest_info_callbacks *perf_guest_cbs;
+2 −2
Original line number Diff line number Diff line
@@ -4669,7 +4669,7 @@ static void sw_perf_event_destroy(struct perf_event *event)

	WARN_ON(event->parent);

	atomic_dec(&perf_swevent_enabled[event_id]);
	jump_label_dec(&perf_swevent_enabled[event_id]);
	swevent_hlist_put(event);
}

@@ -4699,7 +4699,7 @@ static int perf_swevent_init(struct perf_event *event)
		if (err)
			return err;

		atomic_inc(&perf_swevent_enabled[event_id]);
		jump_label_inc(&perf_swevent_enabled[event_id]);
		event->destroy = sw_perf_event_destroy;
	}