On Tuesday 30 August 2016, Martin Blumenstingl wrote:
new logic (assuming that we went for __le16/__le32 fields):
- reading data: use le16_to_cpu and le32_to_cpu for all fields
LE system:
- LE EEPROM -> no swap will be applied
- BE EEPROM -> be16_to_cpu / be32_to_cpu (or swab16 / swab32 as before)
BE system:
- LE EEPROM -> le16_to_cpu / le32_to_cpu (or swab16 / swab32 as before)
- BE EEPROM -> no swap will be applied
I think this should be:
LE and BE systems:
- LE EEPROM -> no swap will be applied
- BE EEPROM -> or swab16 / swab32
The upside of this is that we no longer care about what the CPU is,
and in my opinion that makes the code easier to understand.
There is one downside of the "new approach" I can think of: you need
to swap the data twice in some cases (BE EEPROM on a BE machine).
- first swap while writing the data to __le16/__le32 fields
- second swap while reading the data from the __le16/__le32 fields
If you forget to swap a field in either place then things will be broken.
Correct. Fortunately, "make C=1" with sparse helps you find those bugs
at compile time.
Maybe someone else wants to state his/her opinion on this - I guess
some fresh thoughts could help us a lot!
Yes, that would be helpful. It's possible I'm missing something here,
or that changing this will just add confusion with other people.
Arnd