Re: [uClinux-dev] Kernel 2.6 size increase - get_current()?

David McCullough
2003-07-24T11:51:13Z

Jivin Alan Cox lays it down ...
> On Iau, 2003-07-24 at 06:06, David McCullough wrote:
> > Back when I first did the 2.4 uClinux port, the m68k MMU code was
> > dedicating a register (a2) for current. I thought that was a bad idea
> > given how often you run out of registers on the 68k, and made it a
>
> On some platforms a global register current was a win, I can't speak for
> m68k - current is used a lot.

I'm sure that using a register for current was the right thing to do at
the time. One problem with a global register approach is that the more
inlining the code uses, the more like the compiler is going to want
that extra register :-)

> > On the 2.5/2.6 front, I think the change comes from the 8K (2 page) task
> > structure and everyone just masking the kernel stack pointer to get the
> > task pointer. Gerg would know for sure, he did the 2.5 work in this area.
> > We should be easily able to switch back to the current_task pointer with a
> > few small mods to entry.S.
>
> A lot of platforms went this way because "current" is hard to do right
> on an SMP box. Its effectively per CPU dependant, and that means you
> either set up the MMU to do per CPU pages (via segments or tables) which
> is a pita, or you do the stack trick. For uniprocessor a global still
> works perfectly well.

Sounds like something that can at least be made conditional on SMP.
I'll look into it for m68knommu since it is more likely to care about "size"
than SMP.

> > A general comment on the use of inline throughout the kernel. Although
> > they may show gains on x86 platforms, they often perform worse on
> > embedded processors with limited cache, as well as adding size. I
>
> Code size for critical paths is getting more and more performance critical
> on x86 as well as on the embedded CPU systems. 3Ghz superscalar processors
> lose a lot of clocks to a memory stall.

So should the trend be away from inlining, especially larger functions ?

I know on m68k some of the really simple inlines are actually smaller as
an inline than as a function call. But they have to be very simple, or
only used once.

Cheers,
Davidm

--
David McCullough, davidm@snapgear.com Ph:+61 7 34352815 http://www.SnapGear.com
Custom Embedded Solutions + Security Fx:+61 7 38913630 http://www.uCdot.org