From: Andrew Lunn <and...@lunn.ch> Date: Wed, 4 Jan 2017 22:19:57 +0100
> 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. > > 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? Maybe I over-reacted. I just ran some test programs in userspace on both little and big endian and they checked out. Sorry for the false alarm. I'll apply this, thanks.