Message ID | 20081228200418.GA22991@uranus.ravnborg.org |
---|---|
State | Rejected |
Delegated to: | David Miller |
Headers | show |
From: Sam Ravnborg <sam@ravnborg.org> Date: Sun, 28 Dec 2008 21:04:18 +0100 > 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 <sam@ravnborg.org> 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. -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Jan 02, 2009 at 06:25:26PM -0800, David Miller wrote: > From: Sam Ravnborg <sam@ravnborg.org> > Date: Sun, 28 Dec 2008 21:04:18 +0100 > > > 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 <sam@ravnborg.org> > > 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. 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 -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Sam Ravnborg <sam@ravnborg.org> Date: Sat, 3 Jan 2009 09:43:59 +0100 > 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 -- To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/sparc/include/asm/Kbuild b/arch/sparc/include/asm/Kbuild index 89c260a..b938232 100644 --- a/arch/sparc/include/asm/Kbuild +++ b/arch/sparc/include/asm/Kbuild @@ -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 diff --git a/arch/sparc/include/asm/ipcbuf.h b/arch/sparc/include/asm/ipcbuf.h index 17d6ef7..1e8d84f 100644 --- a/arch/sparc/include/asm/ipcbuf.h +++ b/arch/sparc/include/asm/ipcbuf.h @@ -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 */ diff --git a/arch/sparc/include/asm/ipcbuf_32.h b/arch/sparc/include/asm/ipcbuf_32.h deleted file mode 100644 index 6387209..0000000 --- a/arch/sparc/include/asm/ipcbuf_32.h +++ /dev/null @@ -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 */ diff --git a/arch/sparc/include/asm/ipcbuf_64.h b/arch/sparc/include/asm/ipcbuf_64.h deleted file mode 100644 index a44b855..0000000 --- a/arch/sparc/include/asm/ipcbuf_64.h +++ /dev/null @@ -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 */
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 <sam@ravnborg.org> --- 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