Re: Reduce struct page by 8 bytes on 64bit

Jakub Jelinek
2003-04-16T13:10:15Z

On Wed, Apr 16, 2003 at 05:45:21AM -0700, David S. Miller wrote:
> From: Andi Kleen <ak@muc.de>
> Date: Tue, 15 Apr 2003 13:24:30 +0200
>
> I worked around this by declaring a new data type atomic_bitmask32
> with matching set_bit32/clear_bit32 etc. interfaces. Currently only
> on x86-64 aomitc_bitmask32 is defined to unsigned, everybody else
> still uses unsigned long. The other 64bit architectures can define it to
> unsigned too if they can confirm that it's ok to do.
>
> I have no problem with this.
>
> If you are clever, you can define a generic version even for the
> "unsigned long" 64-bit platforms. It's left as an exercise to
> the reader :-)

Why is any new macro needed?

struct page
{
#if BITS_PER_LONG == 64 && defined __BIG_ENDIAN
union {
unsigned long flags;
atomic_t count;
};
#elif BITS_PER_LONG == 64 && defined __LITTLE_ENDIAN
union {
unsigned long flags;
struct {
int : 32;
atomic_t count;
};
};
#else
unsigned long flags;
atomic_t count;
#endif
...
};

should do the job.

Jakub