Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

asm-generic: allow generic unaligned access if the arch supports it

Switch the default unaligned access method to 'hardware implemented'
if HAVE_EFFICIENT_UNALIGNED_ACCESS is set.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Acked-by: Arnd Bergmann <arnd@arndb.de>

+13 -8
+13 -8
include/asm-generic/unaligned.h
··· 4 4 /* 5 5 * This is the most generic implementation of unaligned accesses 6 6 * and should work almost anywhere. 7 - * 8 - * If an architecture can handle unaligned accesses in hardware, 9 - * it may want to use the linux/unaligned/access_ok.h implementation 10 - * instead. 11 7 */ 12 8 #include <asm/byteorder.h> 13 9 10 + /* Set by the arch if it can handle unaligned accesses in hardware. */ 11 + #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 12 + # include <linux/unaligned/access_ok.h> 13 + #endif 14 + 14 15 #if defined(__LITTLE_ENDIAN) 15 - # include <linux/unaligned/le_struct.h> 16 - # include <linux/unaligned/be_byteshift.h> 16 + # ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 17 + # include <linux/unaligned/le_struct.h> 18 + # include <linux/unaligned/be_byteshift.h> 19 + # endif 17 20 # include <linux/unaligned/generic.h> 18 21 # define get_unaligned __get_unaligned_le 19 22 # define put_unaligned __put_unaligned_le 20 23 #elif defined(__BIG_ENDIAN) 21 - # include <linux/unaligned/be_struct.h> 22 - # include <linux/unaligned/le_byteshift.h> 24 + # ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 25 + # include <linux/unaligned/be_struct.h> 26 + # include <linux/unaligned/le_byteshift.h> 27 + # endif 23 28 # include <linux/unaligned/generic.h> 24 29 # define get_unaligned __get_unaligned_be 25 30 # define put_unaligned __put_unaligned_be