Skip to content

uprobes: misc cleanups/simplifications

Oleg Nesterov bpf linux-trace-kernel lkml 3 versions – Applied

Status from this message: The following commit has been merged into the perf/core branch of tip:

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v4 Latest9 patches 7 repliesApplied
  2. v25 patches 18 repliesSuperseded
  3. v12 patches 7 repliesSuperseded

Changes from the cover letter

- added the acks I got from Andrii, Masami, and Jiri
- new 4/9 patch from Jiri, fixes the unrelated bug in bpf_testmod
- adapt tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c to the API changes in 5/9 an 6/9

Patches in v4 Applied

#Subject and filesSizeRepliesApplied
1/9uprobes: document the usage of mm->mmap_lockkernel/events/uprobes.c+8 -20 replies
2/9uprobes: is_trap_at_addr: don't use get_user_pages_remote()kernel/events/uprobes.c+1 -70 replies
3/9uprobes: simplify error handling for alloc_uprobe()kernel/events/uprobes.c+1 -30 replies
4/9selftests/bpf: fix uprobe.path leak in bpf_testmodtools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c+1 -00 replies
5/9uprobes: kill uprobe_register_refctr()include/linux/uprobes.h kernel/events/uprobes.c kernel/trace/bpf_trace.c +2 more+15 -370 replies
6/9uprobes: make uprobe_register() return struct uprobe *include/linux/uprobes.h kernel/events/uprobes.c kernel/trace/bpf_trace.c +2 more+67 -800 replies
7/9uprobes: change uprobe_register() to use uprobe_unregister() instead of __uprobe_unregister()kernel/events/uprobes.c+7 -50 replies
8/9uprobes: fold __uprobe_unregister() into uprobe_unregister()kernel/events/uprobes.c+10 -150 replies
9/9uprobes: shift put_uprobe() from delete_uprobe() to uprobe_unregister()kernel/events/uprobes.c+9 -50 replies

Reviews trailers per patch

8 of 9 patches have a Reviewed-by or Acked-by.

PatchAndrii NakryikoMasami Hiramatsu (Google)Jiri Olsa
1/9A-b A-b R-b
2/9A-b R-b
3/9R-b R-b
4/9
5/9A-b R-b
6/9R-b
7/9A-b A-b R-b
8/9A-b A-b R-b
9/9A-b A-b R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v4 thread

Cover letter [PATCH v4 0/9] uprobes: misc cleanups/simplifications

(Andrii, I'll try to look at your new series on Weekend).

Changes:

- added the acks I got from Andrii, Masami, and Jiri
- new 4/9 patch from Jiri, fixes the unrelated bug in bpf_testmod
- adapt tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c to the API changes in 5/9 an 6/9

see the interdiff below.

Oleg.
---

 include/linux/uprobes.h                            |  22 ++--
 kernel/events/uprobes.c                            | 137 +++++++++------------
 kernel/trace/bpf_trace.c                           |  25 ++--
 kernel/trace/trace_uprobe.c                        |  31 ++---
 .../selftests/bpf/bpf_testmod/bpf_testmod.c        |  26 ++--
 5 files changed, 103 insertions(+), 138 deletions(-)

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

tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c +13 -13
@@ -432,7 +432,7 @@ uprobe_ret_handler(struct uprobe_consumer *self, unsigned long func,
 
 struct testmod_uprobe {
 	struct path path;
-	loff_t offset;
+	struct uprobe *uprobe;
 	struct uprobe_consumer consumer;
 };
 
@@ -446,25 +446,25 @@ static int testmod_register_uprobe(loff_t offset)
 {
 	int err = -EBUSY;
 
-	if (uprobe.offset)
+	if (uprobe.uprobe)
 		return -EBUSY;
 
 	mutex_lock(&testmod_uprobe_mutex);
 
-	if (uprobe.offset)
+	if (uprobe.uprobe)
 		goto out;
 
 	err = kern_path("/proc/self/exe", LOOKUP_FOLLOW, &uprobe.path);
 	if (err)
 		goto out;
 
-	err = uprobe_register_refctr(d_real_inode(uprobe.path.dentry),
-				     offset, 0, &uprobe.consumer);
-	if (err)
+	uprobe.uprobe = uprobe_register(d_real_inode(uprobe.path.dentry),
+					offset, 0, &uprobe.consumer);
+	if (IS_ERR(uprobe.uprobe)) {
+		err = PTR_ERR(uprobe.uprobe);
 		path_put(&uprobe.path);
-	else
-		uprobe.offset = offset;
-
+		uprobe.uprobe = NULL;
+	}
 out:
 	mutex_unlock(&testmod_uprobe_mutex);
 	return err;
@@ -474,10 +474,10 @@ static void testmod_unregister_uprobe(void)
 {
 	mutex_lock(&testmod_uprobe_mutex);
 
-	if (uprobe.offset) {
-		uprobe_unregister(d_real_inode(uprobe.path.dentry),
-				  uprobe.offset, &uprobe.consumer);
-		uprobe.offset = 0;
+	if (uprobe.uprobe) {
+		uprobe_unregister(uprobe.uprobe, &uprobe.consumer);
+		path_put(&uprobe.path);
+		uprobe.uprobe = NULL;
 	}
 
 	mutex_unlock(&testmod_uprobe_mutex);