tracing: event_id_read() uses simple buffer instead of trace_seq
PATCH 2/6 tracing: event_id_read() uses simple buffer instead of trace_seq
It seems that struct trace_seq is too heavy for event_id_read(). we use simple buffer instead of struct trace_seq.
Signed-off-by Lai Jiangshan <[email protected]>
---
kernel/trace/trace_events.c +5 -12
@@ -604,23 +604,16 @@ static ssize_t event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) { struct ftrace_event_call *call = filp->private_data; -struct trace_seq *s; -int r; +char buf[20 ]; +int len;if (*ppos)return 0 ; - s =kmalloc (sizeof (*s),GFP_KERNEL ); -if (!s) -return -ENOMEM ; + len =snprintf (buf,sizeof (buf),"%d\n" , call->id); + len =simple_read_from_buffer (ubuf, cnt, ppos, buf, len); -trace_seq_init (s); -trace_seq_printf (s,"%d\n" , call->id); - - r =simple_read_from_buffer (ubuf, cnt, ppos, - s->buffer, s->len); -kfree (s); -return r; +return len; } static ssize_t
Quoted 5 lines · Lai Jiangshan
It seems that struct
trace_seqis too heavy forevent_id_read(). we use simple buffer instead of structtrace_seq.Signed-off-by Lai Jiangshan <[email protected]>
Quoted 36 lines
---
kernel/trace/trace_events.c +5
-12@@ -604,23 +604,16 @@ static ssize_t event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) { struct ftrace_event_call *call = filp->private_data; -struct trace_seq *s; -int r; +char buf[20 ]; +int len;if (*ppos)return 0 ; - s =kmalloc (sizeof (*s),GFP_KERNEL ); -if (!s) -return -ENOMEM ; + len =snprintf (buf,sizeof (buf),"%d\n" , call->id); + len =simple_read_from_buffer (ubuf, cnt, ppos, buf, len); -trace_seq_init (s); -trace_seq_printf (s,"%d\n" , call->id); - - r =simple_read_from_buffer (ubuf, cnt, ppos, - s->buffer, s->len); -kfree (s); -return r; +return len; } static ssize_t