lkml.org 
[lkml]   [2009]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH 10/11] ring-buffer: move big if statement down

* Steven Rostedt <rostedt@goodmis.org> wrote:

>
> On Wed, 6 May 2009, Ingo Molnar wrote:
>
> >
> > * Steven Rostedt <rostedt@goodmis.org> wrote:
> >
> > > This patch changes it to a goto:
> > >
> > > code;
> > >
> > > if (cross to next page)
> > > goto next_page;
> > >
> > > more code;
> > >
> > > return;
> > >
> > > next_page:
> > >
> > > [ lots of code]
> >
> > I have pulled it, but could you please change it to a helper
> > function instead? There's almost never a good reason to combine
> > 'more code' with 'lots of code' in a single function. It also
> > documents the unlikeliness, etc.
>
> As I stated in the change log, I did not want to convert it to a helper
> function because it uses the variables created before. It would end up
> going from:
>
> if (write > BUF_PAGE_SIZE)
> goto next_page;
>
>
> to:
>
> if (write > BUF_PAGE_SIZE)
> return rb_move_tail(cpu_buffer, length, tail,
> commit_page, tail_page);
>
>
> Although it is the "unlikely" case, it is still a fast path. It
> happens every time a write into the page buffer crosses a page
> boundary. Since it is only used once, gcc would hopefully inline
> it. If it does not, then we are copying a bunch of parameters for
> nothing.
>
> I could still do this and see what gcc does with it.

GCC might make a mess of it - but parameters shouldnt be copied
normally (on 64-bit at least), they'll just be held in parameter
registers.

Ingo


\
 
 \ /
  Last update: 2009-05-06 16:41    [W:0.041 / U:3.096 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site