[DTrace-devel] [PATCH REVIEWED 02/04] options: ensure lockmem is set before retrieving probe info
Kris Van Hees
kris.van.hees at oracle.com
Thu Nov 30 15:59:04 UTC 2023
The rawtp provider uses trial-and-error BPF program loading to determine
the number of arguments for a raw tracepoint. That requires the lockmem
option value to be applied before probe info is retrieved.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
---
libdtrace/dt_open.c | 13 ++++++++++++-
libdtrace/dt_work.c | 10 ----------
2 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/libdtrace/dt_open.c b/libdtrace/dt_open.c
index b521d887..d47acb74 100644
--- a/libdtrace/dt_open.c
+++ b/libdtrace/dt_open.c
@@ -1173,13 +1173,24 @@ dtrace_vopen(int version, int flags, int *errp,
int
dtrace_init(dtrace_hdl_t *dtp)
{
- int i;
+ int i;
+ dtrace_optval_t lockmem = dtp->dt_options[DTRACEOPT_LOCKMEM];
/*
* Initialize the BPF library handling.
*/
dt_dlib_init(dtp);
+ /*
+ * Set the locked-memory limit if so directed by the user.
+ */
+ if (lockmem != DTRACEOPT_UNSET) {
+ struct rlimit rl;
+
+ rl.rlim_cur = rl.rlim_max = lockmem;
+ setrlimit(RLIMIT_MEMLOCK, &rl);
+ }
+
/*
* Initialize consume handling.
*/
diff --git a/libdtrace/dt_work.c b/libdtrace/dt_work.c
index 1bb6104c..fe88a48e 100644
--- a/libdtrace/dt_work.c
+++ b/libdtrace/dt_work.c
@@ -136,20 +136,10 @@ dtrace_go(dtrace_hdl_t *dtp, uint_t cflags)
{
size_t size;
struct epoll_event ev;
- dtrace_optval_t lockmem = dtp->dt_options[DTRACEOPT_LOCKMEM];
- struct rlimit rl;
if (dtp->dt_active)
return dt_set_errno(dtp, EINVAL);
- /*
- * Set the locked-memory limit if so directed by the user.
- */
- if (lockmem != DTRACEOPT_UNSET) {
- rl.rlim_cur = rl.rlim_max = lockmem;
- setrlimit(RLIMIT_MEMLOCK, &rl);
- }
-
/* Create the BPF programs. */
if (dt_bpf_make_progs(dtp, cflags) == -1)
return -1;
--
2.42.0
More information about the DTrace-devel
mailing list