Re: [patch] arca-vm-2.2.5

Ingo Molnar
1999-04-06T22:49:44Z

On Tue, 6 Apr 1999, David Miller wrote:

> #define log2(x) \
>
> Look at the code just the 'i' in question will output :-)
>
> mov inode, %o0
> srlx %o0, 3, %o4
>
> So on sparc64 atleast, it amounts to "inode >> 3". So:

(yep it's the same on x86 too, given sizeof(struct inode) == 0x110)

> (sizeof(struct inode) & ~ (sizeof(struct inode) - 1))
>
> is 8 on sparc64. The 'i' construct is just meant to get rid of the
> "non significant" lower bits of the inode pointer and it does so very
> nicely. :-)

but it's not just the lower 3 bits that are unsignificant. It's 8
unsignificant bits. (8.1 actually :) It should be 'inode >> 8' (which is
done by the log2 solution). Unless i'm misunderstanding something. The
thing we are AFAIU trying to avoid is 'x/sizeof(inode)', which can be a
costy division. So i've substituted it with
'x/nearest_power_of_2(sizeof(inode))' which is just as good in getting rid
of insignificant bits.

-- mingo