unaligned: use generic implementation on packed-struct arches
Subsystems (6)
PATCH 3/7 unaligned: use generic implementation on packed-struct arches
No functional changes, convert arches that use the packed-struct implementation for native-endianness and C byteshifting for the other endianness.
--- arch/alpha/include/asm/unaligned.h | 7 +------ arch/avr32/include/asm/unaligned.h | 8 +------- arch/blackfin/include/asm/unaligned.h | 7 +------ arch/ia64/include/asm/unaligned.h | 7 +------ arch/mips/include/asm/unaligned.h | 17 +---------------- arch/parisc/include/asm/unaligned.h | 6 +----- arch/sh/include/asm/unaligned.h | 15 +-------------- arch/sparc/include/asm/unaligned.h | 6 +----- arch/xtensa/include/asm/unaligned.h | 16 +--------------- include/asm-frv/unaligned.h | 7 +------ 10 files changed, 10 insertions(+), 86 deletions(-)
arch/alpha/include/asm/unaligned.h +1 -6
@@ -1,11 +1,6 @@#ifndef _ASM_ALPHA_UNALIGNED_H#define _ASM_ALPHA_UNALIGNED_H -#include <linux/unaligned/le_struct.h> -#include <linux/unaligned/be_byteshift.h> -#include <linux/unaligned/generic.h> - -#define get_unaligned __get_unaligned_le -#define put_unaligned __put_unaligned_le +#include <asm-generic/unaligned.h> #endif /* _ASM_ALPHA_UNALIGNED_H */
arch/avr32/include/asm/unaligned.h +1 -7
@@ -10,12 +10,6 @@* However, swapped word loads must be word-aligned so we can't * optimize word loads in general. */ - -#include <linux/unaligned/be_struct.h> -#include <linux/unaligned/le_byteshift.h> -#include <linux/unaligned/generic.h> - -#define get_unaligned __get_unaligned_be -#define put_unaligned __put_unaligned_be +#include <asm-generic/unaligned.h> #endif /* _ASM_AVR32_UNALIGNED_H */
arch/blackfin/include/asm/unaligned.h +1 -6
@@ -1,11 +1,6 @@#ifndef _ASM_BLACKFIN_UNALIGNED_H#define _ASM_BLACKFIN_UNALIGNED_H -#include <linux/unaligned/le_struct.h> -#include <linux/unaligned/be_byteshift.h> -#include <linux/unaligned/generic.h> - -#define get_unaligned __get_unaligned_le -#define put_unaligned __put_unaligned_le +#include <asm-generic/unaligned.h> #endif /* _ASM_BLACKFIN_UNALIGNED_H */
arch/ia64/include/asm/unaligned.h +1 -6
@@ -1,11 +1,6 @@#ifndef _ASM_IA64_UNALIGNED_H#define _ASM_IA64_UNALIGNED_H -#include <linux/unaligned/le_struct.h> -#include <linux/unaligned/be_byteshift.h> -#include <linux/unaligned/generic.h> - -#define get_unaligned __get_unaligned_le -#define put_unaligned __put_unaligned_le +#include <asm-generic/unaligned.h> #endif /* _ASM_IA64_UNALIGNED_H */
arch/mips/include/asm/unaligned.h +1 -16
@@ -8,21 +8,6 @@#ifndef _ASM_MIPS_UNALIGNED_H#define _ASM_MIPS_UNALIGNED_H -#include <linux/compiler.h> -#if defined(__MIPSEB__) -# include <linux/unaligned/be_struct.h> -# include <linux/unaligned/le_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_be -# define put_unaligned __put_unaligned_be -#elif defined(__MIPSEL__) -# include <linux/unaligned/le_struct.h> -# include <linux/unaligned/be_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_le -# define put_unaligned __put_unaligned_le -#else -# error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" -#endif +#include <asm-generic/unaligned.h> #endif /* _ASM_MIPS_UNALIGNED_H */
arch/parisc/include/asm/unaligned.h +1 -5
@@ -1,11 +1,7 @@#ifndef _ASM_PARISC_UNALIGNED_H#define _ASM_PARISC_UNALIGNED_H -#include <linux/unaligned/be_struct.h> -#include <linux/unaligned/le_byteshift.h> -#include <linux/unaligned/generic.h> -#define get_unaligned __get_unaligned_be -#define put_unaligned __put_unaligned_be +#include <asm-generic/unaligned.h> #ifdef __KERNEL__struct pt_regs ;
arch/sh/include/asm/unaligned.h +1 -14
@@ -1,19 +1,6 @@#ifndef _ASM_SH_UNALIGNED_H#define _ASM_SH_UNALIGNED_H -/* SH can't handle unaligned accesses. */ -#ifdef __LITTLE_ENDIAN__ -# include <linux/unaligned/le_struct.h> -# include <linux/unaligned/be_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_le -# define put_unaligned __put_unaligned_le -#else -# include <linux/unaligned/be_struct.h> -# include <linux/unaligned/le_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_be -# define put_unaligned __put_unaligned_be -#endif +#include <asm-generic/unaligned.h> #endif /* _ASM_SH_UNALIGNED_H */
arch/sparc/include/asm/unaligned.h +1 -5
@@ -1,10 +1,6 @@#ifndef _ASM_SPARC_UNALIGNED_H#define _ASM_SPARC_UNALIGNED_H -#include <linux/unaligned/be_struct.h> -#include <linux/unaligned/le_byteshift.h> -#include <linux/unaligned/generic.h> -#define get_unaligned __get_unaligned_be -#define put_unaligned __put_unaligned_be +#include <asm-generic/unaligned.h> #endif /* _ASM_SPARC_UNALIGNED_H */
arch/xtensa/include/asm/unaligned.h +1 -15
@@ -10,20 +10,6 @@#ifndef _ASM_XTENSA_UNALIGNED_H#define _ASM_XTENSA_UNALIGNED_H -#include <asm/byteorder.h> - -#ifdef __LITTLE_ENDIAN -# include <linux/unaligned/le_struct.h> -# include <linux/unaligned/be_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_le -# define put_unaligned __put_unaligned_le -#else -# include <linux/unaligned/be_struct.h> -# include <linux/unaligned/le_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_be -# define put_unaligned __put_unaligned_be -#endif +#include <asm-generic/unaligned.h> #endif /* _ASM_XTENSA_UNALIGNED_H */
include/asm-frv/unaligned.h +1 -6
@@ -12,11 +12,6 @@#ifndef _ASM_UNALIGNED_H#define _ASM_UNALIGNED_H -#include <linux/unaligned/le_byteshift.h> -#include <linux/unaligned/be_struct.h> -#include <linux/unaligned/generic.h> - -#define get_unaligned __get_unaligned_be -#define put_unaligned __put_unaligned_be +#include <asm-generic/unaligned.h> #endif /* _ASM_UNALIGNED_H */
Signature · 1 line
1.6.0.4.994.g16bd3e
Quoted 3 lines · On Mon, 17 Nov 2008 19:39:11 -0800 Harvey Harrison <[email protected]>…
No functional changes, convert arches that use the packed-struct implementation for native-endianness and C byteshifting for the other endianness.
arch/sh has gone and changed things in linux-next.
Quoted 15 lines
arch/sh/include/asm/unaligned.h +0
-7@@ -1,19 +1,6 @@#ifndef _ASM_SH_UNALIGNED_H#define _ASM_SH_UNALIGNED_H -/* SH can't handle unaligned accesses. */ -#ifdef __LITTLE_ENDIAN__ -# include <linux/unaligned/le_struct.h> -# include <linux/unaligned/be_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_le -# define put_unaligned __put_unaligned_le
arch/sh/include/asm/unaligned.h line 6
Quoted 10 lines
arch/sh/include/asm/unaligned.h +1
-7-#else -# include <linux/unaligned/be_struct.h> -# include <linux/unaligned/le_byteshift.h> -# include <linux/unaligned/generic.h> -# define get_unaligned __get_unaligned_be -# define put_unaligned __put_unaligned_be -#endif +#include <asm-generic/unaligned.h> #endif /* _ASM_SH_UNALIGNED_H */
But this happened instead:
arch/sh/include/asm/unaligned.h +6 -1
@@ -1,7 +1,11 @@#ifndef _ASM_SH_UNALIGNED_H#define _ASM_SH_UNALIGNED_H -/* SH can't handle unaligned accesses. */ +#ifdef CONFIG_CPU_SH4A +/* SH-4A can handle unaligned loads in a relatively neutered fashion. */ +#include <asm/unaligned-sh4a.h> +#else +/* Otherwise, SH can't handle unaligned accesses. */ #ifdef __LITTLE_ENDIAN__# include <linux/unaligned/le_struct.h> # include <linux/unaligned/be_byteshift.h>
@@ -15,5 +19,6 @@# define get_unaligned __get_unaligned_be# define put_unaligned __put_unaligned_be#endif +#endif #endif /* _ASM_SH_UNALIGNED_H */
It's a bit sad to create a new variant of the sh unaligned accessors while Harvey is madly tugging everything in the opposite direction.
I am tempted to revise the patch by just blowing away the above changes, so the new unaligned-sh4a.h just doesn't get used by anything. However...
commit accccfb3d8c2cb65baf7cdfc74a2da4cdeee65ab
Author: Paul Mundt <[email protected]> Date: Wed Nov 26 00:29:58 2008 +0900
sh: Provide optimized unaligned loads on SH-4A.
This adds support for unaligned loads on SH-4A, using the SH-4A's neutered movua.l instruction. As movua.l is r0-inspired, stores are still handled through the packed struct.
Based on asm-generic/unaligned.h by Harvey Harrison.
so I'll just drop the sh hunk from unaligned-use-generic-implementation-on-packed-struct-arches.patch, I think.
Quoted 8 lines · Andrew Morton
Quoted 3 lines · On Mon, 17 Nov 2008 19:39:11 -0800 Harvey Harrison <[email protected]>…
No functional changes, convert arches that use the packed-struct implementation for native-endianness and C byteshifting for the other endianness.
arch/shhas gone and changed things in linux-next.
Yes, please drop the SH portions of my patch in -mm (your inbox should already have such a patch)
I also followed up with a new patch to deal with the SH changes and then a revised patch to deal with some fallout in asm-generic/unaligned.h
Hopefully this is agreable to everyone.
Quoted 4 lines
so I'll just drop the sh hunk from unaligned-use-generic-implementation-on-packed-struct-arches.patch, I think.
Please do and add my revised patch and the sh-specific patch.
Cheers,
Harvey