• Namhyung Kim's avatar
    tracing/uprobes: Fetch args before reserving a ring buffer · dcad1a20
    Namhyung Kim authored
    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: default avatarMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Acked-by: default avatarOleg 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: default avatarNamhyung Kim <namhyung@kernel.org>
    dcad1a20
trace_uprobe.c 27.6 KB