On Fri, 23 Aug 2013 07:57:15 +0800 "zhangwei(Jovi)" <jovi.zhang...@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); -- Steve -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/