Re: [PATCH 10/11] ring-buffer: move big if statement down

From: Ingo Molnar
Date: Wed May 06 2009 - 10:38:21 EST



* Steven Rostedt <rostedt@xxxxxxxxxxx> wrote:

>
> On Wed, 6 May 2009, Ingo Molnar wrote:
>
> >
> > * Steven Rostedt <rostedt@xxxxxxxxxxx> 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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/