Patchwork sparc: unify ipcbuf.h

login
register
mail settings
Submitter Sam Ravnborg
Date Dec. 28, 2008, 8:04 p.m.
Message ID <20081228200418.GA22991@uranus.ravnborg.org>
Download mbox | patch
Permalink /patch/15824/
State Rejected
Delegated to: David Miller
Headers show

Comments

Sam Ravnborg - Dec. 28, 2008, 8:04 p.m.
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
David Miller - Jan. 3, 2009, 2:25 a.m.
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
Sam Ravnborg - Jan. 3, 2009, 8:43 a.m.
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
David Miller - Jan. 3, 2009, 8:56 a.m.
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

Patch

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 */