Commit 54aea454 authored by Petr Mladek's avatar Petr Mladek Committed by Linus Torvalds

kprobes: use _do_fork() in samples to make them work again

Commit 3033f14a ("clone: support passing tls argument via C rather
than pt_regs magic") introduced _do_fork() that allowed to pass @tls
parameter.

The old do_fork() is defined only for architectures that are not ready
to use this way and do not define HAVE_COPY_THREAD_TLS.

Let's use _do_fork() in the kprobe examples to make them work again on
all architectures.
Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Thiago Macieira <thiago.macieira@intel.com>
Cc: Jiri Kosina <jkosina@suse.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 09a59a9d
/* /*
* Here's a sample kernel module showing the use of jprobes to dump * Here's a sample kernel module showing the use of jprobes to dump
* the arguments of do_fork(). * the arguments of _do_fork().
* *
* For more information on theory of operation of jprobes, see * For more information on theory of operation of jprobes, see
* Documentation/kprobes.txt * Documentation/kprobes.txt
* *
* Build and insert the kernel module as done in the kprobe example. * Build and insert the kernel module as done in the kprobe example.
* You will see the trace data in /var/log/messages and on the * You will see the trace data in /var/log/messages and on the
* console whenever do_fork() is invoked to create a new process. * console whenever _do_fork() is invoked to create a new process.
* (Some messages may be suppressed if syslogd is configured to * (Some messages may be suppressed if syslogd is configured to
* eliminate duplicate messages.) * eliminate duplicate messages.)
*/ */
...@@ -17,13 +17,13 @@ ...@@ -17,13 +17,13 @@
#include <linux/kprobes.h> #include <linux/kprobes.h>
/* /*
* Jumper probe for do_fork. * Jumper probe for _do_fork.
* Mirror principle enables access to arguments of the probed routine * Mirror principle enables access to arguments of the probed routine
* from the probe handler. * from the probe handler.
*/ */
/* Proxy routine having the same arguments as actual do_fork() routine */ /* Proxy routine having the same arguments as actual _do_fork() routine */
static long jdo_fork(unsigned long clone_flags, unsigned long stack_start, static long j_do_fork(unsigned long clone_flags, unsigned long stack_start,
unsigned long stack_size, int __user *parent_tidptr, unsigned long stack_size, int __user *parent_tidptr,
int __user *child_tidptr) int __user *child_tidptr)
{ {
...@@ -36,9 +36,9 @@ static long jdo_fork(unsigned long clone_flags, unsigned long stack_start, ...@@ -36,9 +36,9 @@ static long jdo_fork(unsigned long clone_flags, unsigned long stack_start,
} }
static struct jprobe my_jprobe = { static struct jprobe my_jprobe = {
.entry = jdo_fork, .entry = j_do_fork,
.kp = { .kp = {
.symbol_name = "do_fork", .symbol_name = "_do_fork",
}, },
}; };
......
/* /*
* NOTE: This example is works on x86 and powerpc. * NOTE: This example is works on x86 and powerpc.
* Here's a sample kernel module showing the use of kprobes to dump a * Here's a sample kernel module showing the use of kprobes to dump a
* stack trace and selected registers when do_fork() is called. * stack trace and selected registers when _do_fork() is called.
* *
* For more information on theory of operation of kprobes, see * For more information on theory of operation of kprobes, see
* Documentation/kprobes.txt * Documentation/kprobes.txt
* *
* You will see the trace data in /var/log/messages and on the console * You will see the trace data in /var/log/messages and on the console
* whenever do_fork() is invoked to create a new process. * whenever _do_fork() is invoked to create a new process.
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
/* For each probe you need to allocate a kprobe structure */ /* For each probe you need to allocate a kprobe structure */
static struct kprobe kp = { static struct kprobe kp = {
.symbol_name = "do_fork", .symbol_name = "_do_fork",
}; };
/* kprobe pre_handler: called just before the probed instruction is executed */ /* kprobe pre_handler: called just before the probed instruction is executed */
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* usage: insmod kretprobe_example.ko func=<func_name> * usage: insmod kretprobe_example.ko func=<func_name>
* *
* If no func_name is specified, do_fork is instrumented * If no func_name is specified, _do_fork is instrumented
* *
* For more information on theory of operation of kretprobes, see * For more information on theory of operation of kretprobes, see
* Documentation/kprobes.txt * Documentation/kprobes.txt
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include <linux/limits.h> #include <linux/limits.h>
#include <linux/sched.h> #include <linux/sched.h>
static char func_name[NAME_MAX] = "do_fork"; static char func_name[NAME_MAX] = "_do_fork";
module_param_string(func, func_name, NAME_MAX, S_IRUGO); module_param_string(func, func_name, NAME_MAX, S_IRUGO);
MODULE_PARM_DESC(func, "Function to kretprobe; this module will report the" MODULE_PARM_DESC(func, "Function to kretprobe; this module will report the"
" function's execution time"); " function's execution time");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment