• Vaibhav Nagarnaik's avatar
    ring-buffer: Make removal of ring buffer pages atomic · 83f40318
    Vaibhav Nagarnaik authored
    This patch adds the capability to remove pages from a ring buffer
    without destroying any existing data in it.
    
    This is done by removing the pages after the tail page. This makes sure
    that first all the empty pages in the ring buffer are removed. If the
    head page is one in the list of pages to be removed, then the page after
    the removed ones is made the head page. This removes the oldest data
    from the ring buffer and keeps the latest data around to be read.
    
    To do this in a non-racey manner, tracing is stopped for a very short
    time while the pages to be removed are identified and unlinked from the
    ring buffer. The pages are freed after the tracing is restarted to
    minimize the time needed to stop tracing.
    
    The context in which the pages from the per-cpu ring buffer are removed
    runs on the respective CPU. This minimizes the events not traced to only
    NMI trace contexts.
    
    Link: http://lkml.kernel.org/r/1336096792-25373-1-git-send-email-vnagarnaik@google.com
    
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Laurent Chavey <chavey@google.com>
    Cc: Justin Teravest <teravest@google.com>
    Cc: David Sharp <dhsharp@google.com>
    Signed-off-by: default avatarVaibhav Nagarnaik <vnagarnaik@google.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    83f40318
ring_buffer.c 110 KB