sparc: unify ipcbuf.h
PATCH 1/1 sparc: unify ipcbuf.h
Looking closer the two structures only differed on the size of __kernel_umode_t.
Add a sparc32 specific padding to cover this difference.
The other types had same size on sparc32 and sparc64.
--- arch/sparc/include/asm/Kbuild | 2 -- arch/sparc/include/asm/ipcbuf.h | 36 ++++++++++++++++++++++++++++++------ arch/sparc/include/asm/ipcbuf_32.h | 31 ------------------------------- arch/sparc/include/asm/ipcbuf_64.h | 28 ---------------------------- 4 files changed, 30 insertions(+), 67 deletions(-) delete mode 100644 arch/sparc/include/asm/ipcbuf_32.h delete mode 100644 arch/sparc/include/asm/ipcbuf_64.h
arch/sparc/include/asm/Kbuild +0 -2
@@ -1,8 +1,6 @@ # User exported sparc header files include include/asm-generic/Kbuild.asm -header-y += ipcbuf_32.h -header-y += ipcbuf_64.h header-y += posix_types_32.h header-y += posix_types_64.h header-y += ptrace_32.h
arch/sparc/include/asm/ipcbuf.h +30 -6
@@ -1,8 +1,32 @@ -#ifndef ___ASM_SPARC_IPCBUF_H -#define ___ASM_SPARC_IPCBUF_H +#ifndef __SPARC_IPCBUF_H +#define __SPARC_IPCBUF_H + +/* +* The ipc64_perm structure for sparc architecture. +* Note extra padding because this structure is passed back and forth +* between kernel and user space. +* +* Pad space is left for: +* - 32 bit mode (only sparc32, it is 32 bit on sparc64) +* - 32-bit seq +* - 2 miscellaneous 64-bit values +*/ + +struct ipc64_perm +{ +__kernel_key_t key; +__kernel_uid_t uid; +__kernel_gid_t gid; +__kernel_uid_t cuid; +__kernel_gid_t cgid;#if defined(__sparc__) && defined(__arch64__) -#include <asm/ipcbuf_64.h> -#else -#include <asm/ipcbuf_32.h> -#endif +unsigned short __pad0;#endif +__kernel_mode_t mode; +unsigned short __pad1; +unsigned short seq; +unsigned long __unused1; +unsigned long __unused2; +}; + +#endif /* __SPARC_IPCBUF_H */
arch/sparc/include/asm/ipcbuf_32.h deleted +0 -31
@@ -1,31 +0,0 @@ -#ifndef _SPARC_IPCBUF_H -#define _SPARC_IPCBUF_H - -/* -* The ipc64_perm structure for sparc architecture. -* Note extra padding because this structure is passed back and forth -* between kernel and user space. -* -* Pad space is left for: -* - 32-bit mode -* - 32-bit seq -* - 2 miscellaneous 64-bit values (so that this structure matches -* sparc64 ipc64_perm) -*/ - -struct ipc64_perm -{ -__kernel_key_t key; -__kernel_uid32_t uid; -__kernel_gid32_t gid; -__kernel_uid32_t cuid; -__kernel_gid32_t cgid; -unsigned short __pad1; -__kernel_mode_t mode; -unsigned short __pad2; -unsigned short seq; -unsigned long long __unused1; -unsigned long long __unused2; -}; - -#endif /* _SPARC_IPCBUF_H */
arch/sparc/include/asm/ipcbuf_64.h deleted +0 -28
@@ -1,28 +0,0 @@ -#ifndef _SPARC64_IPCBUF_H -#define _SPARC64_IPCBUF_H - -/* -* The ipc64_perm structure for sparc64 architecture. -* Note extra padding because this structure is passed back and forth -* between kernel and user space. -* -* Pad space is left for: -* - 32-bit seq -* - 2 miscellaneous 64-bit values -*/ - -struct ipc64_perm -{ -__kernel_key_t key; -__kernel_uid_t uid; -__kernel_gid_t gid; -__kernel_uid_t cuid; -__kernel_gid_t cgid; -__kernel_mode_t mode; -unsigned short __pad1; -unsigned short seq; -unsigned long __unused1; -unsigned long __unused2; -}; - -#endif /* _SPARC64_IPCBUF_H */
Signature · 1 line
1.6.0.2.GIT
David Miller
maintainerFrom: Sam Ravnborg <[email protected]>
Date: Sun, 28 Dec 2008 21:04:18 +0100
Quoted 7 lines
Looking closer the two structures only differed on the size of
__kernel_umode_t.
Add a sparc32 specific padding to cover this difference.The other types had same size on sparc32 and sparc64.
Signed-off-by Sam Ravnborg <[email protected]>
I'm not sure this will work.
You've changed the size of the structure on 32-bit.
The last two "unused" members of ipc64_perm are "unsigned long long", not just plain "unsigned long" in the 32-bit variant.
But you've used plain "unsigned long" in the unified copy.
Quoted 11 lines · David Miller
From: Sam Ravnborg <[email protected]>
Date: Sun, 28 Dec 2008 21:04:18 +0100Quoted 7 lines
Looking closer the two structures only differed on the size of
__kernel_umode_t.
Add a sparc32 specific padding to cover this difference.The other types had same size on sparc32 and sparc64.
Signed-off-by Sam Ravnborg <[email protected]>
Quoted 8 lines
I'm not sure this will work.
You've changed the size of the structure on 32-bit.
The last two "unused" members of
ipc64_permare "unsigned long long", not just plain "unsigned long" in the 32-bit variant.But you've used plain "unsigned long" in the unified copy.
Good catch - this is obviously wrong.
I think I confused myself with the fact that
(sparc32)long long eqals to (sparc64)long
but not the other way around.
So the padding should be changed to long long which will do the right thing on both sparc32 and sparc64.
I considered changing the padding to use __u64, __u16 etc, but I could see that no other archicettures do so for their ipcbuf definition.
No patch as I am waiting until you push out the updated sparc-next tree. Or you can just fix it up yourself if you prefer.
Sam
David Miller
maintainerFrom: Sam Ravnborg <[email protected]>
Date: Sat, 3 Jan 2009 09:43:59 +0100
Quoted 2 lines
No patch as I am waiting until you push out the updated sparc-next tree.
I was waiting for some test builds to finish :-)
I just pushed everything to sparc-2.6.git on kernel.org
PATCH 1/1 sparc: unify ipcbuf.h
In reply to Sam RavnborgThe ony difference is the size of the mode.
sparc has extra padding to compensate for this.
---
Compared to v1:
- fixed size of padding as noted by davem
- corrected #ifdef so mode padding is used on sparc - not sparc64 (ups)
- simplified ifdef to use only __arch64__ as discussed in another mail
Only build tested on saprc64 as my sparc toolchain needs an update due to stricter version checks in compiler.h
Sam
arch/sparc/include/asm/Kbuild | 3 --
arch/sparc/include/asm/{ipcbuf_64.h => ipcbuf.h} | 16 +++++++----
arch/sparc/include/asm/ipcbuf_32.h | 31 ----------------------
3 files changed, 10 insertions(+), 40 deletions(-)
rename arch/sparc/include/asm/{ipcbuf_64.h => ipcbuf.h} (56%)
delete mode 100644 arch/sparc/include/asm/ipcbuf_32.harch/sparc/include/asm/Kbuild +0 -3
@@ -1,9 +1,6 @@ # User exported sparc header files include include/asm-generic/Kbuild.asm -header-y += ipcbuf_32.h -header-y += ipcbuf_64.h - header-y += apc.h header-y += asi.h header-y += display7seg.h
arch/sparc/include/asm/ipcbuf.h renamed from arch/sparc/include/asm/ipcbuf_64.h +10 -6
@@ -1,13 +1,14 @@ -#ifndef _SPARC64_IPCBUF_H -#define _SPARC64_IPCBUF_H +#ifndef __SPARC_IPCBUF_H +#define __SPARC_IPCBUF_H/* -* The ipc64_perm structure for sparc64 architecture. +* The ipc64_perm structure for sparc/sparc64 architecture. * Note extra padding because this structure is passed back and forth * between kernel and user space. * * Pad space is left for: * - 32-bit seq +* - on sparc for 32 bit mode (it is 32 bit on sparc64) * - 2 miscellaneous 64-bit values */
@@ -18,11 +19,14 @@ struct ipc64_perm__kernel_gid_t gid;__kernel_uid_t cuid;__kernel_gid_t cgid; +#ifndef __arch64__ +unsigned short __pad0; +#endif __kernel_mode_t mode;unsigned short __pad1;unsigned short seq; -unsigned long __unused1; - unsigned long __unused2; +unsigned long long __unused1; + unsigned long long __unused2; }; -#endif /* _SPARC64_IPCBUF_H */ +#endif /* __SPARC_IPCBUF_H */
arch/sparc/include/asm/ipcbuf_32.h deleted +0 -31
@@ -1,31 +0,0 @@ -#ifndef _SPARC_IPCBUF_H -#define _SPARC_IPCBUF_H - -/* -* The ipc64_perm structure for sparc architecture. -* Note extra padding because this structure is passed back and forth -* between kernel and user space. -* -* Pad space is left for: -* - 32-bit mode -* - 32-bit seq -* - 2 miscellaneous 64-bit values (so that this structure matches -* sparc64 ipc64_perm) -*/ - -struct ipc64_perm -{ -__kernel_key_t key; -__kernel_uid32_t uid; -__kernel_gid32_t gid; -__kernel_uid32_t cuid; -__kernel_gid32_t cgid; -unsigned short __pad1; -__kernel_mode_t mode; -unsigned short __pad2; -unsigned short seq; -unsigned long long __unused1; -unsigned long long __unused2; -}; - -#endif /* _SPARC_IPCBUF_H */
Signature · 1 line
1.6.0.2.GIT
From: Sam Ravnborg <[email protected]>
Date: Sat, 3 Jan 2009 13:38:49 +0100
Quoted 4 lines
The ony difference is the size of the mode.
sparc has extra padding to compensate for this.Signed-off-by Sam Ravnborg <[email protected]>
Applied, thanks Sam.