netdev
[Top] [All Lists]

Re: multicast hash incorrect on big endian archs

To: "David S. Miller" <davem@xxxxxxxxxx>
Subject: Re: multicast hash incorrect on big endian archs
From: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx>
Date: Mon, 04 Jun 2001 11:35:10 +0200
Cc: linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx
References: <3B1A9558.2DBAECE7@colorfullife.com> <15130.61778.471925.245018@pizda.ninka.net> <3B1B3268.2A02D2C@colorfullife.com>
Sender: owner-netdev@xxxxxxxxxxx
Manfred Spraul wrote:
> 
> "David S. Miller" wrote:
> >
> > Many big-endian systems already need to provide little-endian bitops,
> > for ext2's sake for example.
> >
> > We should formalize this, with {set,clear,change,test}_le_bit which
> > technically every port has implemented in some for or another already.
> >

That could cause alignment problems.
<<< from starfire.c
{
     long filter_addr;
     u16 mc_filter[32] __attribute__ ((aligned(sizeof(long)))); 
<<<
set_bit requires word alignment, but without the __attibute__ the
compiler would only guarantee 16-bit alignment. IMHO ugly.

Should I add __set_bit_{8,16,32} into <linux/bitops.h>, overridable with
__HAVE_ARCH_SET_BIT_n?

Default implementation for the nonatomic __set_bit could be added into
<linux/bitops.h>, too.

Btw, the correct name would be __set_bit_n: the function don't guarantee
atomicity.

--
        Manfred

<Prev in Thread] Current Thread [Next in Thread>