trace: use this_cpu_ptr per-cpu helper
Subsystems (2)
PATCH v3 7/9 trace: use this_cpu_ptr per-cpu helper
From: Shan Wei <[email protected]>
Signed-off-by Shan Wei <[email protected]>
---
v3:
directly return member address of per-cpu variable.
--- kernel/trace/blktrace.c | 2 +- kernel/trace/trace.c | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-)
kernel/trace/blktrace.c +1 -1
@@ -147,7 +147,7 @@ void __trace_note_message(struct blk_trace *bt, const char *fmt, ...)return ;local_irq_save (flags); - buf =per_cpu_ptr (bt->msg_data,smp_processor_id ()); + buf =this_cpu_ptr (bt->msg_data);va_start (args, fmt); n =vscnprintf (buf,BLK_TN_MAX_MSG , fmt, args);va_end (args);
kernel/trace/trace.c +1 -4
@@ -1495,7 +1495,6 @@ static struct trace_buffer_struct *trace_percpu_nmi_buffer;static char *get_trace_buf (void ) {struct trace_buffer_struct *percpu_buffer; -struct trace_buffer_struct *buffer;/* * If we have allocated per cpu buffers, then we do not
@@ -1513,9 +1512,7 @@ static char *get_trace_buf(void)if (!percpu_buffer)return NULL ; - buffer =per_cpu_ptr (percpu_buffer,smp_processor_id ()); - -return buffer->buffer; +return (char *)this_cpu_ptr (&percpu_buffer->buffer); }static int alloc_percpu_trace_buffer (void )
Signature · 1 line
1.7.1
kernel/trace/trace.c static char *get_trace_buf(void) · line 1516
Quoted 3 lines · Shan Wei
kernel/trace/trace.c +1
-1-return buffer->buffer; +return (char *)this_cpu_ptr (&percpu_buffer->buffer); }
Add a comment to explain the cast?
Christoph Lameter said, at 2012/11/10 4:15:
Quoted 7 lines · Shan Wei
kernel/trace/trace.c static char *get_trace_buf(void) · line 1516
Quoted 4 lines
kernel/trace/trace.c +1
-1-return buffer->buffer; +return (char *)this_cpu_ptr (&percpu_buffer->buffer); }Add a comment to explain the cast?
typeof(&buffer) is a pointer to array of 1024 char, or char (*)[1024].
But, typeof(&buffer[0]) is a pointer to char which match the return type of get_trace_buf(). As well-known, the value of &buffer is equal to &buffer[0].
so return this_cpu_ptr(&percpu_buffer->buffer[0]) can avoid this cast.
I will submit v4 version patch which improve it.
Thanks~