]> git.baikalelectronics.ru Git - kernel.git/commit
tracing/uprobes: Fetch args before reserving a ring buffer
authorNamhyung Kim <namhyung.kim@lge.com>
Wed, 3 Jul 2013 07:40:28 +0000 (16:40 +0900)
committerSteven Rostedt <rostedt@goodmis.org>
Thu, 2 Jan 2014 21:17:44 +0000 (16:17 -0500)
commiteda4ccb1f4c9a384617d7c217ce5beb60aaf33c7
tree801d8e11c1e2ffef8c8de48980a01a08a5ddd194
parentdc35bd303ba6812b4116bdb06306a415e13852e8
tracing/uprobes: Fetch args before reserving a ring buffer

Fetching from user space should be done in a non-atomic context.  So
use a per-cpu buffer and copy its content to the ring buffer
atomically.  Note that we can migrate during accessing user memory
thus use a per-cpu mutex to protect concurrent accesses.

This is needed since we'll be able to fetch args from an user memory
which can be swapped out.  Before that uprobes could fetch args from
registers only which saved in a kernel space.

While at it, use __get_data_size() and store_trace_args() to reduce
code duplication.  And add struct uprobe_cpu_buffer and its helpers as
suggested by Oleg.

Reviewed-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: zhangwei(Jovi) <jovi.zhangwei@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
kernel/trace/trace_uprobe.c