Messages in this thread |  | | | Date | Wed, 01 Oct 2008 00:29:51 -0400 | | From | Steven Rostedt <> | | Subject | [PATCH 0/2] ring_buffer: updates for linux-tip |
| |
The first patch is just a lockdep clean up of the ring buffer.
The next patch is a new locking design. It is not lockless (yet) but the locking is a bit cleaner than the original. The basic idea is that the reader now has its own page to read from that is not in the ring buffer. When the reader (a consumer) finishes a page, it then grabs a lock to pull out a new page from the ring buffer and replace it with the one that it just finished reading.
The writer only locks when it needs to go to the next page. We still disable interrupts, but it would not be too hard to allow interrupts to take place on writes. But I will leave that for version 2 (or 1.2)
The iterator (non consuming read) still expects the tracer to be disabled when iterating the loop (no locks taken).
The ring_buffer_{un}lock is now no longer around and not needed. I ran this with lockdep on and it ran fine.
I did lots of testing of trace_pipe (consuming reader) while running the function trace. The function trace with out a doubt will stress the consumer/producer reads since the producer is much faster than the consumer.
Tomorrow, I'll change the buffer_page from being a page_frame to something that is allocated separately.
-- Steve
|  |