Commit 9474e27a authored by Ilya Leoshkevich's avatar Ilya Leoshkevich Committed by Alexei Starovoitov
Browse files

libbpf: Add the ability to suppress perf event enablement



Automatically enabling a perf event after attaching a BPF prog to it is
not always desirable.

Add a new "dont_enable" field to struct bpf_perf_event_opts. While
introducing "enable" instead would be nicer in that it would avoid
a double negation in the implementation, it would make
DECLARE_LIBBPF_OPTS() less efficient.

Acked-by: default avatarEduard Zingerman <eddyz87@gmail.com>
Suggested-by: default avatarJiri Olsa <jolsa@kernel.org>
Tested-by: default avatarThomas Richter <tmricht@linux.ibm.com>
Co-developed-by: default avatarThomas Richter <tmricht@linux.ibm.com>
Signed-off-by: default avatarThomas Richter <tmricht@linux.ibm.com>
Signed-off-by: default avatarIlya Leoshkevich <iii@linux.ibm.com>
Link: https://lore.kernel.org/r/20250806162417.19666-2-iii@linux.ibm.com


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 1b30d444
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -10965,12 +10965,15 @@ struct bpf_link *bpf_program__attach_perf_event_opts(const struct bpf_program *p
		}
		link->link.fd = pfd;
	}

	if (!OPTS_GET(opts, dont_enable, false)) {
		if (ioctl(pfd, PERF_EVENT_IOC_ENABLE, 0) < 0) {
			err = -errno;
			pr_warn("prog '%s': failed to enable perf_event FD %d: %s\n",
				prog->name, pfd, errstr(err));
			goto err_out;
		}
	}

	return &link->link;
err_out:
+3 −1
Original line number Diff line number Diff line
@@ -499,9 +499,11 @@ struct bpf_perf_event_opts {
	__u64 bpf_cookie;
	/* don't use BPF link when attach BPF program */
	bool force_ioctl_attach;
	/* don't automatically enable the event */
	bool dont_enable;
	size_t :0;
};
#define bpf_perf_event_opts__last_field force_ioctl_attach
#define bpf_perf_event_opts__last_field dont_enable

LIBBPF_API struct bpf_link *
bpf_program__attach_perf_event(const struct bpf_program *prog, int pfd);