From: Namhyung Kim <namhyung@kernel.org>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Namhyung Kim <namhyung.kim@lge.com>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
Hyeoncheol Lee <cheol.lee@lge.com>,
Hemant Kumar <hkshaw@linux.vnet.ibm.com>,
LKML <linux-kernel@vger.kernel.org>,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
"zhangwei\(Jovi\)" <jovi.zhangwei@huawei.com>,
Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Subject: Re: [PATCH 10/13] tracing/uprobes: Fetch args before reserving a ring buffer
Date: Mon, 04 Nov 2013 17:11:29 +0900 [thread overview]
Message-ID: <87txfs37ta.fsf@sejong.aot.lge.com> (raw)
In-Reply-To: <20131103202037.GA2785@redhat.com> (Oleg Nesterov's message of "Sun, 3 Nov 2013 21:20:37 +0100")
On Sun, 3 Nov 2013 21:20:37 +0100, Oleg Nesterov wrote:
> On 11/01, Oleg Nesterov wrote:
>>
>> Ah, please ignore... handler_chain() is not self-serialized, so
>> tu->buffer needs locking/waiting too.
>
> Still I have to admit that I strongly dislike this yet another
> (and imho strange) memory pool. However, I am not going to argue
> because I can't suggest something better right now.
Okay.
>
> But. Perhaps it makes sense to at least add a couple of trivial
> helpers in 10/13? Something like arg_buf_get/put/init, just to
> simplify the potential changes.
Good idea. How about something like below?
struct uprobe_cpu_buffer {
struct mutex mutex;
void *buf;
};
static struct uprobe_cpu_buffer __percpu *uprobe_cpu_buffer;
static DEFINE_MUTEX(uprobe_buffer_mutex);
static int uprobe_buffer_refcnt;
static int uprobe_buffer_init(void)
{
int cpu, err_cpu;
uprobe_cpu_buffer = alloc_percpu(struct uprobe_cpu_buffer);
if (uprobe_cpu_buffer == NULL)
return -ENOMEM;
for_each_possible_cpu(cpu) {
struct page *p = alloc_pages_node(cpu_to_node(cpu),
GFP_KERNEL, 0);
if (p == NULL) {
err_cpu = cpu;
goto err;
}
per_cpu_ptr(uprobe_cpu_buffer, cpu)->buf = page_address(p);
mutex_init(&per_cpu_ptr(uprobe_cpu_buffer, cpu)->mutex);
}
return 0;
err:
for_each_possible_cpu(cpu) {
if (cpu == err_cpu)
break;
free_page((unsigned long)per_cpu_ptr(uprobe_cpu_buffer, cpu)->buf);
}
free_percpu(uprobe_cpu_buffer);
return -ENOMEM;
}
static int uprobe_buffer_enable(void)
{
int ret = 0;
mutex_lock(&uprobe_buffer_mutex);
if (uprobe_buffer_refcnt++ == 0) {
ret = uprobe_buffer_init();
if (ret < 0)
uprobe_buffer_refcnt--;
}
mutex_unlock(&uprobe_buffer_mutex);
return ret;
}
static void uprobe_buffer_disable(void)
{
mutex_lock(&uprobe_buffer_mutex);
if (--uprobe_buffer_refcnt == 0) {
free_percpu(uprobe_cpu_buffer);
uprobe_cpu_buffer = NULL;
}
mutex_unlock(&uprobe_buffer_mutex);
}
static struct uprobe_cpu_buffer *uprobe_buffer_get(void)
{
struct uprobe_cpu_buffer *ucb;
int cpu;
cpu = raw_smp_processor_id();
ucb = per_cpu_ptr(uprobe_cpu_buffer, cpu);
/*
* Use per-cpu buffers for fastest access, but we might migrate
* so the mutex makes sure we have sole access to it.
*/
mutex_lock(&ucb->mutex);
return ucb;
}
static void uprobe_buffer_put(struct uprobe_cpu_buffer *ucb)
{
mutex_unlock(&ucb->mutex);
}
Thanks,
Namhyung
next prev parent reply other threads:[~2013-11-04 8:11 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-29 6:53 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v6) Namhyung Kim
2013-10-29 6:53 ` [PATCH 01/13] tracing/uprobes: Fix documentation of uprobe registration syntax Namhyung Kim
2013-10-29 6:53 ` [PATCH 02/13] tracing/probes: Fix basic print type functions Namhyung Kim
2013-10-29 6:53 ` [PATCH 03/13] tracing/kprobes: Move fetch functions to trace_kprobe.c Namhyung Kim
2013-10-29 6:53 ` [PATCH 04/13] tracing/kprobes: Add fetch{,_size} member into deref fetch method Namhyung Kim
2013-10-29 6:53 ` [PATCH 05/13] tracing/kprobes: Staticize stack and memory fetch functions Namhyung Kim
2013-10-29 6:53 ` [PATCH 06/13] tracing/kprobes: Factor out struct trace_probe Namhyung Kim
2013-10-29 6:53 ` [PATCH 07/13] tracing/uprobes: Convert to " Namhyung Kim
2013-10-29 6:53 ` [PATCH 08/13] tracing/kprobes: Move common functions to trace_probe.h Namhyung Kim
2013-10-29 6:53 ` [PATCH 09/13] tracing/kprobes: Integrate duplicate set_print_fmt() Namhyung Kim
2013-10-29 6:53 ` [PATCH 10/13] tracing/uprobes: Fetch args before reserving a ring buffer Namhyung Kim
2013-10-31 18:16 ` Oleg Nesterov
2013-11-01 9:00 ` Namhyung Kim
2013-11-04 8:06 ` Namhyung Kim
2013-11-04 14:35 ` Oleg Nesterov
2013-11-05 1:12 ` Namhyung Kim
2013-11-01 15:09 ` Oleg Nesterov
2013-11-01 15:22 ` Oleg Nesterov
2013-11-03 20:20 ` Oleg Nesterov
2013-11-04 8:11 ` Namhyung Kim [this message]
2013-11-04 14:38 ` Oleg Nesterov
2013-11-05 1:17 ` Namhyung Kim
2013-10-29 6:53 ` [PATCH 11/13] tracing/kprobes: Add priv argument to fetch functions Namhyung Kim
2013-11-04 16:09 ` Oleg Nesterov
2013-11-05 2:10 ` Namhyung Kim
2013-10-29 6:53 ` [PATCH 12/13] tracing/uprobes: Add more " Namhyung Kim
2013-10-31 18:22 ` Oleg Nesterov
2013-11-04 8:50 ` Namhyung Kim
2013-11-04 16:44 ` Oleg Nesterov
2013-11-04 17:17 ` Steven Rostedt
2013-11-05 2:19 ` Namhyung Kim
2013-11-05 2:17 ` Namhyung Kim
2013-11-01 17:53 ` Oleg Nesterov
2013-10-29 6:53 ` [PATCH 13/13] tracing/uprobes: Add support for full argument access methods Namhyung Kim
2013-10-30 10:36 ` [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v6) Masami Hiramatsu
2013-11-02 15:54 ` Oleg Nesterov
2013-11-04 8:46 ` Namhyung Kim
2013-11-04 8:59 ` Namhyung Kim
2013-11-04 15:51 ` Oleg Nesterov
2013-11-04 16:22 ` Oleg Nesterov
2013-11-04 18:47 ` Oleg Nesterov
2013-11-04 18:57 ` Oleg Nesterov
2013-11-05 2:51 ` Namhyung Kim
2013-11-05 16:41 ` Oleg Nesterov
2013-11-06 8:37 ` Namhyung Kim
2013-11-05 2:49 ` Namhyung Kim
2013-11-05 6:58 ` Namhyung Kim
2013-11-05 17:45 ` Oleg Nesterov
2013-11-05 19:24 ` Oleg Nesterov
2013-11-06 8:57 ` Namhyung Kim
2013-11-06 17:37 ` Oleg Nesterov
2013-11-06 18:24 ` Oleg Nesterov
2013-11-07 9:00 ` Namhyung Kim
2013-11-08 17:00 ` Oleg Nesterov
2013-11-12 7:49 ` Namhyung Kim
2013-11-07 8:48 ` Namhyung Kim
2013-11-09 3:18 ` Masami Hiramatsu
2013-11-09 15:23 ` Oleg Nesterov
2013-11-12 8:00 ` Namhyung Kim
2013-11-12 18:44 ` Oleg Nesterov
2013-11-25 6:59 ` Namhyung Kim
2013-11-25 14:12 ` [PATCH] uprobes: Allocate ->utask before handler_chain() for tracing handlers Oleg Nesterov
2013-11-06 8:48 ` [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v6) Namhyung Kim
2013-11-06 16:28 ` Oleg Nesterov
2013-11-07 7:33 ` Namhyung Kim
2013-11-08 16:52 ` Oleg Nesterov
2013-11-05 2:15 ` Namhyung Kim
2013-11-05 16:33 ` Oleg Nesterov
2013-11-06 8:34 ` Namhyung Kim
2013-11-05 1:59 ` Namhyung Kim
2013-11-04 15:01 ` Oleg Nesterov
2013-11-05 1:53 ` Namhyung Kim
2013-11-05 16:28 ` Oleg Nesterov
2013-11-06 8:31 ` Namhyung Kim
-- strict thread matches above, loose matches on Subject: below --
2013-09-03 5:44 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v5) Namhyung Kim
2013-09-03 5:44 ` [PATCH 10/13] tracing/uprobes: Fetch args before reserving a ring buffer Namhyung Kim
2013-09-03 10:50 ` Masami Hiramatsu
2013-09-04 7:08 ` Namhyung Kim
2013-09-03 11:10 ` zhangwei(Jovi)
2013-09-04 7:10 ` Namhyung Kim
2013-08-27 8:48 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v4) Namhyung Kim
2013-08-27 8:48 ` [PATCH 10/13] tracing/uprobes: Fetch args before reserving a ring buffer Namhyung Kim
2013-08-09 8:44 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v3) Namhyung Kim
2013-08-09 8:45 ` [PATCH 10/13] tracing/uprobes: Fetch args before reserving a ring buffer Namhyung Kim
2013-08-09 9:56 ` Masami Hiramatsu
2013-08-09 16:20 ` Oleg Nesterov
2013-08-09 16:21 ` Oleg Nesterov
2013-08-10 1:26 ` zhangwei(Jovi)
2013-08-10 1:41 ` zhangwei(Jovi)
2013-08-10 14:06 ` zhangwei(Jovi)
2013-08-22 16:42 ` Steven Rostedt
2013-08-22 23:57 ` zhangwei(Jovi)
2013-08-23 1:08 ` Steven Rostedt
2013-08-27 8:07 ` Namhyung Kim
2013-08-23 4:22 ` Masami Hiramatsu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87txfs37ta.fsf@sejong.aot.lge.com \
--to=namhyung@kernel.org \
--cc=acme@ghostprotocols.net \
--cc=cheol.lee@lge.com \
--cc=hkshaw@linux.vnet.ibm.com \
--cc=jovi.zhangwei@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=namhyung.kim@lge.com \
--cc=oleg@redhat.com \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome