• Steven Rostedt's avatar
    ring-buffer: make the buffer a true circular link list · 3adc54fa
    Steven Rostedt authored
    This patch changes the ring buffer data pages from using a link list
    head pointer, to making each buffer page point to another buffer page
    and never back to a "head".
    
    This makes the handling of the ring buffer less complex, since the
    traversing of the ring buffer pages no longer needs to account for the
    head pointer.
    
    This change also is needed to make the ring buffer lockless.
    
    [
      Changes in version 2:
    
      - Added change that Lai Jiangshan mentioned.
    
      From: Lai Jiangshan <laijs@cn.fujitsu.com>
      Date: Thu, 11 Jun 2009 11:25:48 +0800
      LKML-Reference: <4A30793C.6090208@cn.fujitsu.com>
    
      I'm not sure whether these 4 lines:
    	bpage = list_entry(pages.next, struct buffer_page, list);
    	list_del_init(&bpage->list);
    	cpu_buffer->pages = &bpage->list;
    
    	list_splice(&pages, cpu_buffer->pages);
      equal to these 2 lines:
     	cpu_buffer->pages = pages.next;
     	list_del(&pages);
    
      If there are equivalent, I think the second one
      are simpler. It may be not a really necessarily cleanup.
    
      What I asked is: if there are equivalent, could you use these two line:
     	cpu_buffer->pages = pages.next;
    	list_del(&pages);
    ]
    
    [ Impact: simplify the ring buffer to help make it lockless ]
    Signed-off-by: default avatarSteven Rostedt <srostedt@redhat.com>
    3adc54fa
ring_buffer.c 79.4 KB