Re: [PATCH] fs: inode per-cpu last_ino allocator

From: Eric Dumazet
Date: Thu Sep 30 2010 - 14:05:23 EST


Le jeudi 30 septembre 2010 Ã 10:39 -0700, Andrew Morton a Ãcrit :
> On Thu, 30 Sep 2010 19:28:05 +0200 Eric Dumazet <eric.dumazet@xxxxxxxxx> wrote:
>
> > Le jeudi 30 septembre 2010 __ 09:45 -0700, Andrew Morton a __crit :
> >
> > > Could eliminate `p' I guess, but that would involve using
> > > __get_cpu_var() as an lval, which looks vile and might generate worse
> > > code.
> > >
> >
> > Hmm, I see, please check this new patch, using the most modern stuff ;)
> >
> > > Readers of this code won't know why last_ino_get() was marked noinline.
> > > It looks wrong, really.
> >
> > Oops sorry, this was a temporary hack of mine to ease disassembly
> > analysis. Good catch !
> >
> > Here is the new generated code on i686 (with the noinline) :
> > pretty good ;)
> >
> > c02e5930 <last_ino_get>:
> > c02e5930: 55 push %ebp
> > c02e5931: 89 e5 mov %esp,%ebp
> > c02e5933: 64 a1 44 29 7d c0 mov %fs:0xc07d2944,%eax
> > c02e5939: a9 ff 03 00 00 test $0x3ff,%eax
> > c02e593e: 74 09 je c02e5949 <last_ino_get+0x19>
> > c02e5940: 40 inc %eax
> > c02e5941: 64 a3 44 29 7d c0 mov %eax,%fs:0xc07d2944
> > c02e5947: c9 leave
> > c02e5948: c3 ret
> > c02e5949: b8 00 04 00 00 mov $0x400,%eax
> > c02e594e: f0 0f c1 05 80 c8 92 c0 lock xadd %eax,0xc092c880
> > c02e5956: eb e8 jmp c02e5940 <last_ino_get+0x10>
> >
>
> That uniprocessor, PREEMPT=n I guess.
>

It is SMP. PREEMPT=n

On UP, you would not have the %fs suffixes, and no "lock" before the
xadd.



--
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/