[PATCH] ibmveth: Fix more little endian issues
    Benjamin Herrenschmidt 
    benh at kernel.crashing.org
       
    Tue Dec 24 15:37:01 EST 2013
    
    
  
On Mon, 2013-12-23 at 06:52 -0800, Joe Perches wrote:
> On Mon, 2013-12-23 at 17:38 +1100, Anton Blanchard wrote:
> > The hypervisor expects MAC addresses passed in registers to be big
> > endian u64.
> 
> So maybe use __be64 declarations?
> 
> > +static unsigned long ibmveth_encode_mac_addr(char *mac)
> 
> static __be64 ibmveth_encode_mac_addr(const char *mac)
A register value has no endianness. Only memory content does. Especially
talking of a MAC address which is really a byte stream.... (Yes, our
__beXX types used without a * are borderline, but we've got used to it).
In fact I find the use of 
    memcpy(((char *)&encoded) + 2, mac, ETH_ALEN);
Really gross :-) Yes it works with the added cpu_to_be64() but in that
specific case, I think it would be nicer to simply load & shift into
position the 6 bytes and avoid the endianness issue completely.
Cheers,
Ben.
    
    
More information about the Linuxppc-dev
mailing list