1
0
Files
linux/kernel
Lai Jiangshan 7e53bd42d1 tracing: Consolidate protection of reader access to the ring buffer
At the beginning, access to the ring buffer was fully serialized
by trace_types_lock. Patch d7350c3f45 gives more freedom to readers,
and patch b04cc6b1f6 adds code to protect trace_pipe and cpu#/trace_pipe.

But actually it is not enough, ring buffer readers are not always
read-only, they may consume data.

This patch makes accesses to trace, trace_pipe, trace_pipe_raw
cpu#/trace, cpu#/trace_pipe and cpu#/trace_pipe_raw serialized.
And removes tracing_reader_cpumask which is used to protect trace_pipe.

Details:

Ring buffer serializes readers, but it is low level protection.
The validity of the events (which returns by ring_buffer_peek() ..etc)
are not protected by ring buffer.

The content of events may become garbage if we allow another process to consume
these events concurrently:
  A) the page of the consumed events may become a normal page
     (not reader page) in ring buffer, and this page will be rewritten
     by the events producer.
  B) The page of the consumed events may become a page for splice_read,
     and this page will be returned to system.

This patch adds trace_access_lock() and trace_access_unlock() primitives.

These primitives allow multi process access to different cpu ring buffers
concurrently.

These primitives don't distinguish read-only and read-consume access.
Multi read-only access is also serialized.

And we don't use these primitives when we open files,
we only use them when we read files.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
LKML-Reference: <4B447D52.1050602@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
2010-01-06 12:51:34 -05:00
..
2009-09-21 14:29:21 +02:00
2009-12-22 14:10:37 -08:00
2009-12-15 08:53:10 -08:00
2009-12-22 12:27:34 -05:00
2009-10-29 07:39:25 -07:00
2009-12-06 21:10:56 +01:00
2009-09-18 09:48:52 -07:00
2009-12-14 23:55:34 +01:00
2009-12-22 14:17:56 -08:00
2009-12-28 10:25:31 +01:00
2009-12-16 10:23:43 -08:00
2009-12-17 15:45:32 -08:00
2009-12-09 10:03:07 +01:00
2009-12-20 19:05:02 +01:00
2009-10-26 09:40:30 +01:00
2009-12-22 14:10:37 -08:00
2009-09-23 18:13:10 -07:00
2009-11-02 16:02:39 +01:00