lkml.org 
[lkml]   [2013]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 10/13] tracing/uprobes: Fetch args before reserving a ring buffer
    Date
    Hi Steven,

    On Thu, 22 Aug 2013 21:08:30 -0400, Steven Rostedt wrote:
    > On Fri, 23 Aug 2013 07:57:15 +0800
    > "zhangwei(Jovi)" <jovi.zhangwei@huawei.com> wrote:
    >
    >
    >> >
    >> > What about creating a per cpu buffer when uprobes are registered, and
    >> > delete them when they are finished? Basically what trace_printk() does
    >> > if it detects that there are users of trace_printk() in the kernel.
    >> > Note, it does not deallocate them when finished, as it is never
    >> > finished until reboot ;-)
    >> >
    >> > -- Steve
    >> >
    >> I also thought out this approach, but the issue is we cannot fetch user
    >> memory into per-cpu buffer, because use per-cpu buffer should under
    >> preempt disabled, and fetching user memory could sleep.
    >
    > Actually, we could create a per_cpu mutex to match the per_cpu buffers.
    > This is not unlike what we do in -rt.
    >
    > int cpu;
    > struct mutex *mutex;
    > void *buf;
    >
    >
    > /*
    > * Use per cpu buffers for fastest access, but we might migrate
    > * So the mutex makes sure we have sole access to it.
    > */
    >
    > cpu = raw_smp_processor_id();
    > mutex = per_cpu(uprobe_cpu_mutex, cpu);
    > buf = per_cpu(uprobe_cpu_buffer, cpu);
    >
    > mutex_lock(mutex);
    > store_trace_args(..., buf,...);
    > mutex_unlock(mutex);
    >

    Great! I'll go with this approach. Is it OK to you, Masami?

    Thanks,
    Namhyung


    \
     
     \ /
      Last update: 2013-08-27 10:21    [W:4.836 / U:0.220 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site