On 01/04/2017 01:19 PM, Andrew Lunn wrote: > On Wed, Jan 04, 2017 at 04:11:03PM -0500, David Miller wrote: >> From: Andrew Lunn <and...@lunn.ch> >> Date: Wed, 4 Jan 2017 19:56:24 +0100 >> >>> +static inline u64 ether_addr_to_u64(const u8 *addr) >>> +{ >>> + u64 u = 0; >>> + int i; >>> + >>> + for (i = 0; i < ETH_ALEN; i++) >>> + u = u << 8 | addr[i]; >>> + >>> + return u; >>> +} >> ... >>> +static inline void u64_to_ether_addr(u64 u, u8 *addr) >>> +{ >>> + int i; >>> + >>> + for (i = ETH_ALEN - 1; i >= 0; i--) { >>> + addr[i] = u & 0xff; >>> + u = u >> 8; >>> + } >>> +} >> >> I think these two routines behave differently on big vs little >> endian. And I doubt this was your intention. > > I don't have a big endian system to test on.
You could build the driver for e.g: a MIPS Malta board and use the qemu-system-mips to validate this, there could be a way to do that on ARM too although it's a different kind of BE (BE8 vs. BE32) AFAIR. > > I tried to avoid the usual pitfalls. I don't cast a collection of > bytes to a u64, which i know has no chance of working. Accessing a MAC > address as a byte array should be endian safe. The shift operation > should also be endian safe. > > What exactly do you think will behave differently? > > Andrew > -- Florian