• Steven Rostedt's avatar
    ring-buffer: move big if statement down · aa20ae84
    Steven Rostedt authored
    In the hot path of the ring buffer "__rb_reserve_next" there's a big
    if statement that does not even return back to the work flow.
    
    	code;
    
    	if (cross to next page) {
    
    		[ lots of code ]
    
    		return;
    	}
    
    	more code;
    
    The condition is even the unlikely path, although we do not denote it
    with an unlikely because gcc is fine with it. The condition is true when
    the write crosses a page boundary, and we need to start at a new page.
    
    Having this if statement makes it hard to read, but calling another
    function to do the work is also not appropriate, because we are using a lot
    of variables that were set before the if statement, and we do not want to
    send them as parameters.
    
    This patch changes it to a goto:
    
    	code;
    
    	if (cross to next page)
    		goto next_page;
    
    	more code;
    
    	return;
    
    next_page:
    
    	[ lots of code]
    
    This makes the code easier to understand, and a bit more obvious.
    
    The output from gcc is practically identical. For some reason, gcc decided
    to use different registers when I switched it to a goto. But other than that,
    the logic is the same.
    
    [ Impact: easier to read code ]
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    aa20ae84
ring_buffer.c 76 KB