linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [RFC] IPC64 with glibc-2.2 and linux-2.4
@ 2000-09-24 19:50   ` Franz Sirl
  2000-09-25  6:51     ` Ulrich Drepper
  0 siblings, 1 reply; 10+ messages in thread
From: Franz Sirl @ 2000-09-24 19:50 UTC (permalink / raw)
  To: libc-alpha, linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 550 bytes --]

Hi,

I would like to ask the PPC (and PPC64) kernel and glibc developers to look
closely over the appended glibc and kernel patches.

I'm especially interested in:
- did I get the alignment and data types right everywhere? also right for
PPC64?
- I would like to bump ipc64_perm.seq to 32bit as it is internally in
linux-2.4. Is this safe for userspace? Why didn't the other archs bump it to
the kernels size?
- other comments?

This stuff fixes the last "showstopper" bug for glibc-2.2 on PPC, now xf4
works fine on a linux-2.4 kernel too.

Franz.


[-- Attachment #2: kernel24-ipc-2.patch --]
[-- Type: text/plain, Size: 2499 bytes --]

===== ipcbuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/ipcbuf.h	Wed Jan 19 03:00:31 2000
+++ edited/ipcbuf.h	Sat Sep 23 13:52:17 2000
@@ -2,10 +2,29 @@
 #define __PPC_IPCBUF_H__

 /*
- * The ipc64_perm structure for the PPC is identical to kern_ipc_perm
- * as we have always had 32-bit UIDs and GIDs in the kernel.
+ * The ipc64_perm structure for PPC 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 (so that this structure matches
+ *                                  PPC64 ipc64_perm)
  */
-
-#define ipc64_perm	kern_ipc_perm
+
+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 int		__pad2;
+	unsigned long long	__unused1;
+	unsigned long long	__unused2;
+};

 #endif /* __PPC_IPCBUF_H__ */
===== msgbuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/msgbuf.h	Wed Jan 19 03:00:31 2000
+++ edited/msgbuf.h	Fri Sep 22 23:27:16 2000
@@ -7,7 +7,6 @@

 struct msqid64_ds {
 	struct ipc64_perm msg_perm;
-	unsigned int	__unused0;
 	unsigned int	__unused1;
 	__kernel_time_t msg_stime;	/* last msgsnd time */
 	unsigned int	__unused2;
===== sembuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/sembuf.h	Wed Jan 19 03:00:31 2000
+++ edited/sembuf.h	Sun Sep 24 11:19:56 2000
@@ -7,7 +7,6 @@

 struct semid64_ds {
 	struct ipc64_perm sem_perm;		/* permissions .. see ipc.h */
-	unsigned int	__unused0;
 	unsigned int	__unused1;
 	__kernel_time_t	sem_otime;		/* last semop time */
 	unsigned int	__unused2;
===== shmbuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/shmbuf.h	Wed Jan 19 03:00:31 2000
+++ edited/shmbuf.h	Sun Sep 24 12:03:19 2000
@@ -7,14 +7,13 @@

 struct shmid64_ds {
 	struct ipc64_perm	shm_perm;	/* operation perms */
-	unsigned int		__unused0;
-	size_t			shm_segsz;	/* size of segment (bytes) */
 	unsigned long		__unused1;
 	__kernel_time_t		shm_atime;	/* last attach time */
 	unsigned long		__unused2;
 	__kernel_time_t		shm_dtime;	/* last detach time */
 	unsigned long		__unused3;
 	__kernel_time_t		shm_ctime;	/* last change time */
+	size_t			shm_segsz;	/* size of segment (bytes) */
 	__kernel_pid_t		shm_cpid;	/* pid of creator */
 	__kernel_pid_t		shm_lpid;	/* pid of last operator */
 	unsigned long		shm_nattch;	/* no. of current attaches */

[-- Attachment #3: glibc22-ipctest.patch --]
[-- Type: text/plain, Size: 12265 bytes --]

? powerpc/bits/msq.h
? powerpc/bits/shm.h
? powerpc/bits/sem.h
Index: kernel-features.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/kernel-features.h,v
retrieving revision 1.20
diff -u -p -r1.20 kernel-features.h
--- kernel-features.h	2000/09/18 16:40:02	1.20
+++ kernel-features.h	2000/09/24 19:26:16
@@ -110,13 +110,21 @@
 # define __ASSUME_NEW_GETRLIMIT_SYSCALL	1
 #endif

-/* Linux 2.3.39 introduced 32bit UID/GIDs.  Some platforms had 32 bit
+/* Linux 2.3.39 introduced 32bit UID/GIDs and IPC64.  Some platforms had 32 bit
    type all along.  */
 #if __LINUX_KERNEL_VERSION >= 131879 || defined __powerpc__ || defined __mips__
 # define __ASSUME_32BITUIDS		1
+# ifndef __powerpc__
+#  define __ASSUME_IPC64		1
+# endif
 # ifdef __sparc__
 #  define __ASSUME_SETRESUID_SYSCALL	1
 # endif
+#endif
+
+/* Linux 2.4.0 on PPC introduced a correct IPC64.  */
+#if __LINUX_KERNEL_VERSION >= 132096 && defined __powerpc__
+# define __ASSUME_IPC64			1
 #endif

 /* We can use the LDTs for threading with Linux 2.3.99 and newer.  */
Index: msgctl.c
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/msgctl.c,v
retrieving revision 1.7
diff -u -p -r1.7 msgctl.c
--- msgctl.c	2000/07/27 06:13:08	1.7
+++ msgctl.c	2000/09/24 19:26:16
@@ -65,7 +65,7 @@ compat_symbol (libc, __old_msgctl, msgct
 int
 __new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
 {
-#if __ASSUME_32BITUIDS > 0
+#if __ASSUME_IPC64 > 0
   return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
 			 msqid, cmd | __IPC_64, 0, CHECK_1 (buf));
 #else
Index: semctl.c
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/semctl.c,v
retrieving revision 1.10
diff -u -p -r1.10 semctl.c
--- semctl.c	2000/07/27 06:13:08	1.10
+++ semctl.c	2000/09/24 19:26:16
@@ -93,7 +93,7 @@ __new_semctl (int semid, int semnum, int

   va_end (ap);

-#if __ASSUME_32BITUIDS > 0
+#if __ASSUME_IPC64 > 0
   return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64,
 			 CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
 #else
Index: shmctl.c
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/shmctl.c,v
retrieving revision 1.9
diff -u -p -r1.9 shmctl.c
--- shmctl.c	2000/08/17 07:37:01	1.9
+++ shmctl.c	2000/09/24 19:26:16
@@ -73,7 +73,7 @@ compat_symbol (libc, __old_shmctl, shmct
 int
 __new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
 {
-#if __ASSUME_32BITUIDS > 0
+#if __ASSUME_IPC64 > 0
   return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd | __IPC_64, 0, CHECK_1 (buf));
 #else
   switch (cmd) {
Index: powerpc/bits/ipc.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/powerpc/bits/ipc.h,v
retrieving revision 1.4
diff -u -p -r1.4 ipc.h
--- ipc.h	2000/05/23 08:43:01	1.4
+++ ipc.h	2000/09/24 19:26:16
@@ -48,7 +48,11 @@ struct ipc_perm
     __uid_t cuid;		/* Creator's user ID.  */
     __gid_t cgid;		/* Creator's group ID.  */
     __mode_t mode;		/* Read/write permission.  */
+    unsigned short int __pad1;
     unsigned short int __seq;	/* Sequence number.  */
+    unsigned int __pad2;
+    unsigned long long __unused1;
+    unsigned long long __unused2;
   };


--- /dev/null	Tue May  5 16:32:27 1998
+++ powerpc/bits/msq.h	Fri Sep 22 14:24:06 2000
@@ -0,0 +1,77 @@
+/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_MSG_H
+# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Define options for message queue functions.  */
+#define MSG_NOERROR	010000	/* no error if message is too big */
+#ifdef __USE_GNU
+# define MSG_EXCEPT	020000	/* recv any msg except of specified type */
+#endif
+
+/* Types used in the structure definition.  */
+typedef unsigned long int msgqnum_t;
+typedef unsigned long int msglen_t;
+
+
+/* Structure of record for one message inside the kernel.
+   The type `struct msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;	/* structure describing operation permission */
+  unsigned int __unused1;
+  __time_t msg_stime;		/* time of last msgsnd command */
+  unsigned int __unused2;
+  __time_t msg_rtime;		/* time of last msgrcv command */
+  unsigned int __unused3;
+  __time_t msg_ctime;		/* time of last change */
+  unsigned long __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;		/* number of messages currently on queue */
+  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
+  __pid_t msg_lspid;		/* pid of last msgsnd() */
+  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+  unsigned long __unused4;
+  unsigned long __unused5;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes	__msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
--- /dev/null	Tue May  5 16:32:27 1998
+++ powerpc/bits/sem.h	Sun Sep 24 04:43:56 2000
@@ -0,0 +1,87 @@
+/* Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO	0x1000		/* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID		11		/* get sempid */
+#define GETVAL		12		/* get semval */
+#define GETALL		13		/* get all semval's */
+#define GETNCNT		14		/* get semncnt */
+#define GETZCNT		15		/* get semzcnt */
+#define SETVAL		16		/* set semval */
+#define SETALL		17		/* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  unsigned int __unused1;
+  __time_t sem_otime;			/* last semop() time */
+  unsigned int __unused2;
+  __time_t sem_ctime;			/* last time changed by semctl() */
+  unsigned long int sem_nsems;		/* number of semaphores in set */
+  unsigned long __unused3;
+  unsigned long __unused4;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;				<= value for SETVAL
+     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;		<= array for GETALL & SETALL
+     struct seminfo *__buf;		<= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED	1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct  seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
--- /dev/null	Tue May  5 16:32:27 1998
+++ powerpc/bits/shm.h	Sun Sep 24 04:42:58 2000
@@ -0,0 +1,93 @@
+/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SHM_H
+# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Permission flag for shmget.  */
+#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */
+#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY	010000		/* attach read-only else read-write */
+#define SHM_RND		020000		/* round attach address to SHMLBA */
+#define SHM_REMAP	040000		/* take-over region on attach */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK	11		/* lock segment (root only) */
+#define SHM_UNLOCK	12		/* unlock segment (root only) */
+
+
+/* Type to count number of attaches.  */
+typedef unsigned long int shmatt_t;
+
+/* Data structure describing a set of semaphores.  */
+struct shmid_ds
+  {
+    struct ipc_perm shm_perm;		/* operation permission struct */
+    unsigned long __unused1;
+    __time_t shm_atime;			/* time of last shmat() */
+    unsigned long __unused2;
+    __time_t shm_dtime;			/* time of last shmdt() */
+    unsigned long __unused3;
+    __time_t shm_ctime;			/* time of last change by shmctl() */
+    size_t shm_segsz;			/* size of segment in bytes */
+    __pid_t shm_cpid;			/* pid of creator */
+    __pid_t shm_lpid;			/* pid of last shmop */
+    shmatt_t shm_nattch;		/* number of current attaches */
+    unsigned long __unused4;
+    unsigned long __unused5;
+  };
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+# define SHM_STAT 	13
+# define SHM_INFO 	14
+
+/* shm_mode upper byte flags */
+# define SHM_DEST	01000	/* segment will be destroyed on last detach */
+# define SHM_LOCKED	02000   /* segment will not be swapped */
+
+struct	shminfo
+  {
+    unsigned long int shmmax;
+    unsigned long int shmmin;
+    unsigned long int shmmni;
+    unsigned long int shmseg;
+    unsigned long int shmall;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+    unsigned long int __unused3;
+    unsigned long int __unused4;
+  };
+
+struct shm_info
+  {
+    int used_ids;
+    unsigned long int shm_tot;	/* total allocated shm */
+    unsigned long int shm_rss;	/* total resident shm */
+    unsigned long int shm_swp;	/* total swapped shm */
+    unsigned long int swap_attempts;
+    unsigned long int swap_successes;
+  };
+
+#endif /* __USE_MISC */

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-24 19:50   ` Franz Sirl
@ 2000-09-25  6:51     ` Ulrich Drepper
  2000-09-25  9:10       ` Franz Sirl
  0 siblings, 1 reply; 10+ messages in thread
From: Ulrich Drepper @ 2000-09-25  6:51 UTC (permalink / raw)
  To: Franz Sirl; +Cc: libc-alpha, linuxppc-dev


Franz Sirl <Franz.Sirl-kernel@lauterbach.com> writes:

> I'm especially interested in:
> - did I get the alignment and data types right everywhere? also right for
> PPC64?
> - I would like to bump ipc64_perm.seq to 32bit as it is internally in
> linux-2.4. Is this safe for userspace? Why didn't the other archs bump it to
> the kernels size?
> - other comments?

The patch looks reasonable to me but I cannot decide about using it
since the kernel would have to be changed first.

--
---------------.                          ,-.   1325 Chesapeake Terrace
Ulrich Drepper  \    ,-------------------'   \  Sunnyvale, CA 94089 USA
Red Hat          `--' drepper at redhat.com   `------------------------

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-25  6:51     ` Ulrich Drepper
@ 2000-09-25  9:10       ` Franz Sirl
  2000-09-25 15:25         ` Ulrich Drepper
  2000-09-25 21:24         ` Geoff Keating
  0 siblings, 2 replies; 10+ messages in thread
From: Franz Sirl @ 2000-09-25  9:10 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: libc-alpha, linuxppc-dev


At 08:51 25.09.00, Ulrich Drepper wrote:
>Franz Sirl <Franz.Sirl-kernel@lauterbach.com> writes:
>
> > I'm especially interested in:
> > - did I get the alignment and data types right everywhere? also right for
> > PPC64?
> > - I would like to bump ipc64_perm.seq to 32bit as it is internally in
> > linux-2.4. Is this safe for userspace? Why didn't the other archs bump
> it to
> > the kernels size?
> > - other comments?
>
>The patch looks reasonable to me but I cannot decide about using it
>since the kernel would have to be changed first.

Yeah, I know. But it's no problem for me to push this change into the
kernel after some people (including you :-)) have agreed to the principle
of the patch.

What about 'seq'? Can I safely bump it to 32bit for userspace in the final
patch? I see no need for the kernel and userspace being different here, but
all other archs are limiting it to 16bit, so there may be a reason...

Franz.


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-25  9:10       ` Franz Sirl
@ 2000-09-25 15:25         ` Ulrich Drepper
  2000-09-25 15:54           ` Franz Sirl
  2000-09-25 21:24         ` Geoff Keating
  1 sibling, 1 reply; 10+ messages in thread
From: Ulrich Drepper @ 2000-09-25 15:25 UTC (permalink / raw)
  To: Franz Sirl; +Cc: libc-alpha, linuxppc-dev


Franz Sirl <Franz.Sirl-kernel@lauterbach.com> writes:

> What about 'seq'? Can I safely bump it to 32bit for userspace in the final
> patch? I see no need for the kernel and userspace being different here, but
> all other archs are limiting it to 16bit, so there may be a reason...

You should avoid changing the size of the struct.  I haven't done the
math on this.

--
---------------.                          ,-.   1325 Chesapeake Terrace
Ulrich Drepper  \    ,-------------------'   \  Sunnyvale, CA 94089 USA
Red Hat          `--' drepper at redhat.com   `------------------------

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-25 15:25         ` Ulrich Drepper
@ 2000-09-25 15:54           ` Franz Sirl
  2000-09-25 16:08             ` Ulrich Drepper
  0 siblings, 1 reply; 10+ messages in thread
From: Franz Sirl @ 2000-09-25 15:54 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: libc-alpha, linuxppc-dev


At 17:25 25.09.00, Ulrich Drepper wrote:
>Franz Sirl <Franz.Sirl-kernel@lauterbach.com> writes:
>
> > What about 'seq'? Can I safely bump it to 32bit for userspace in the final
> > patch? I see no need for the kernel and userspace being different here, but
> > all other archs are limiting it to 16bit, so there may be a reason...
>
>You should avoid changing the size of the struct.  I haven't done the
>math on this.

Well, changing compared to what? IPC_64 on PPC was never functional so far,
so there is no problem here. The IPC_64 structs on the other archs have
this, eg on sparc:

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;
};

but internally the kernel uses:

/* used by in-kernel data structures */
struct kern_ipc_perm
{
         key_t           key;
         uid_t           uid;
         gid_t           gid;
         uid_t           cuid;
         gid_t           cgid;
         mode_t          mode;
         unsigned long   seq;
};

So, is there a reason why seq is limited to 16bit in the
kern_ipc_perm<->ipc64_perm interface in the kernel? ipc64_perm is prepared
for a 32bit value anyway with the __pad2 padding. Since I for myself can't
think of a valid reason for limiting seq to 16bit in userspace, I'm asking
here, cause I have not the slightest idea how the IPC is handled/used
outside of kernel/glibc. If there is no reason, I really would prefer to
change my patch to use 'unsigned long seq' on PPC.

Franz.


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-25 15:54           ` Franz Sirl
@ 2000-09-25 16:08             ` Ulrich Drepper
  0 siblings, 0 replies; 10+ messages in thread
From: Ulrich Drepper @ 2000-09-25 16:08 UTC (permalink / raw)
  To: Franz Sirl; +Cc: libc-alpha, linuxppc-dev


Franz Sirl <Franz.Sirl-kernel@lauterbach.com> writes:

> Well, changing compared to what? IPC_64 on PPC was never functional
> so far, so there is no problem here. The IPC_64 structs on the other
> archs have this, eg on sparc:

I'm failing to see where you want to see ipc_perm64 included in the
compilation environment unless you replace ipc_perm.  There are no LFS
variants for the SysV IPC functions.  And then ipc_perm64 should be
the same size as ipc_perm.

--
---------------.                          ,-.   1325 Chesapeake Terrace
Ulrich Drepper  \    ,-------------------'   \  Sunnyvale, CA 94089 USA
Red Hat          `--' drepper at redhat.com   `------------------------

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-25  9:10       ` Franz Sirl
  2000-09-25 15:25         ` Ulrich Drepper
@ 2000-09-25 21:24         ` Geoff Keating
  2000-09-26 21:24           ` Franz Sirl
  1 sibling, 1 reply; 10+ messages in thread
From: Geoff Keating @ 2000-09-25 21:24 UTC (permalink / raw)
  To: Franz.Sirl-kernel; +Cc: drepper, libc-alpha, linuxppc-dev


> Date: Mon, 25 Sep 2000 11:10:45 +0200
> From: Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
> Cc: libc-alpha@sources.redhat.com, linuxppc-dev@lists.linuxppc.org

> Yeah, I know. But it's no problem for me to push this change into the
> kernel after some people (including you :-)) have agreed to the principle
> of the patch.

I too agree with the principle of the patch.  There's no reason to
limit this quantity to 16 bits.

> What about 'seq'? Can I safely bump it to 32bit for userspace in the final
> patch? I see no need for the kernel and userspace being different here, but
> all other archs are limiting it to 16bit, so there may be a reason...

I can't see any particular reason.

Did you test it?  There are four combinations to check:

new application/new kernel
old application/new kernel  (to test symbol versioning)
new application/old kernel  (test translation of old structure to new)
old application/old kernel  (this should Just Work if the above cases work)
			    (but of course you should still check it :-) )

--
- Geoffrey Keating <geoffk@cygnus.com>

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
@ 2000-09-26  2:38 Jack Howarth
  0 siblings, 0 replies; 10+ messages in thread
From: Jack Howarth @ 2000-09-26  2:38 UTC (permalink / raw)
  To: geoffk, Franz.Sirl-kernel, drepper, libc-alpha, linuxppc-dev


Geoff,
      I believe I have covered all of the combination of tests you asked
about concerning
Franz's glibc 2.1.94 and Linux 2.4-test9 patches for the IPC64 issue.
Again this problem
arose when we recompiled XFree86 4.0.1 against glibc 2.1.9x. Thus I have
done the following
tests...

1) XFree86 built against patched glibc 2.1.94 with patched Linux
2.4-test9  - gnome is working now
2) XFree86 built against glibc 2.1.3 with patched Linux 2.4-test9 -
gnome is working....always did before
3) XFree86 built against patched glibc 2.1.94 with Linux 2.2.17pre20 -
gnome is working now
4) XFree86 built against glibc 2.1.3 with Linux 2.2.17pre20 - gnome is
working

I believe we are safe with Franz's proposed patch and the only question
is do we increase the seq
field to 32 bits from 16 bits.
                                                          Jack
ps Of course without Franz's patches to glibc 2.1.94 and Linux
2.4-test9, tests 1 and 3 would have
failed when I tried to run gnome.


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-25 21:24         ` Geoff Keating
@ 2000-09-26 21:24           ` Franz Sirl
  2000-09-27  0:45             ` Geoff Keating
  0 siblings, 1 reply; 10+ messages in thread
From: Franz Sirl @ 2000-09-26 21:24 UTC (permalink / raw)
  To: Geoff Keating; +Cc: drepper, libc-alpha, linuxppc-dev

[-- Attachment #1: Type: text/plain, Size: 1887 bytes --]

On Mon, 25 Sep 2000, Geoff Keating wrote:
> > Date: Mon, 25 Sep 2000 11:10:45 +0200
> > From: Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
> > Cc: libc-alpha@sources.redhat.com, linuxppc-dev@lists.linuxppc.org
> >
> > Yeah, I know. But it's no problem for me to push this change into the
> > kernel after some people (including you :-)) have agreed to the principle
> > of the patch.
>
> I too agree with the principle of the patch.  There's no reason to
> limit this quantity to 16 bits.

OK, here is the final patch, if nobody objects I'll ask Ben to push the
kernel changes into bitkeeper.

Changes to previous version:
	- bumped ipc_perm.seq member to 32 bit
	- padded shmid_ds.shm_segsz to prepare for size_t expansion
	- added an unrelated LFS change for fcntl.h


> Did you test it?  There are four combinations to check:
>
> new application/new kernel
> old application/new kernel  (to test symbol versioning)
> new application/old kernel  (test translation of old structure to new)
> old application/old kernel  (this should Just Work if the above cases work)
> 			    (but of course you should still check it :-) )

Yeah, I did test all but the new/new combination myself (haven't had time to
recompile xf4 yet), but Jack tested it successfully.

Franz.


	* sysdeps/unix/sysv/linux/kernel-features.h: Add __ASSUME_IPC64, only define´
	it for powerpc for kernel >= 2.4.0.
	* sysdeps/unix/sysv/linux/msgctl.c: Test for __ASSUME_IPC64, not
	__ASSUME_32BITUIDS.
	* sysdeps/unix/sysv/linux/semctl.c: Likewise.
	* sysdeps/unix/sysv/linux/shmctl.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/ipc.h: Sync with kernel.
	* sysdeps/unix/sysv/linux/powerpc/bits/msq.h: New file.
	* sysdeps/unix/sysv/linux/powerpc/bits/sem.h: New file.
	* sysdeps/unix/sysv/linux/powerpc/bits/shm.h: New file.
	* sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h: Add defines for LFS record
	locking.


[-- Attachment #2: glibc22-ipc.patch --]
[-- Type: text/plain, Size: 13701 bytes --]

Index: sysdeps/unix/sysv/linux/kernel-features.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/kernel-features.h,v
retrieving revision 1.20
diff -u -p -r1.20 kernel-features.h
--- sysdeps/unix/sysv/linux/kernel-features.h	2000/09/18 16:40:02	1.20
+++ sysdeps/unix/sysv/linux/kernel-features.h	2000/09/26 19:03:23
@@ -110,13 +110,21 @@
 # define __ASSUME_NEW_GETRLIMIT_SYSCALL	1
 #endif

-/* Linux 2.3.39 introduced 32bit UID/GIDs.  Some platforms had 32 bit
+/* Linux 2.3.39 introduced 32bit UID/GIDs and IPC64.  Some platforms had 32 bit
    type all along.  */
 #if __LINUX_KERNEL_VERSION >= 131879 || defined __powerpc__ || defined __mips__
 # define __ASSUME_32BITUIDS		1
+# ifndef __powerpc__
+#  define __ASSUME_IPC64		1
+# endif
 # ifdef __sparc__
 #  define __ASSUME_SETRESUID_SYSCALL	1
 # endif
+#endif
+
+/* Linux 2.4.0 on PPC introduced a correct IPC64.  */
+#if __LINUX_KERNEL_VERSION >= 132096 && defined __powerpc__
+# define __ASSUME_IPC64			1
 #endif

 /* We can use the LDTs for threading with Linux 2.3.99 and newer.  */
Index: sysdeps/unix/sysv/linux/msgctl.c
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/msgctl.c,v
retrieving revision 1.7
diff -u -p -r1.7 msgctl.c
--- sysdeps/unix/sysv/linux/msgctl.c	2000/07/27 06:13:08	1.7
+++ sysdeps/unix/sysv/linux/msgctl.c	2000/09/26 19:03:24
@@ -65,7 +65,7 @@ compat_symbol (libc, __old_msgctl, msgct
 int
 __new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
 {
-#if __ASSUME_32BITUIDS > 0
+#if __ASSUME_IPC64 > 0
   return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl,
 			 msqid, cmd | __IPC_64, 0, CHECK_1 (buf));
 #else
Index: sysdeps/unix/sysv/linux/semctl.c
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/semctl.c,v
retrieving revision 1.10
diff -u -p -r1.10 semctl.c
--- sysdeps/unix/sysv/linux/semctl.c	2000/07/27 06:13:08	1.10
+++ sysdeps/unix/sysv/linux/semctl.c	2000/09/26 19:03:24
@@ -93,7 +93,7 @@ __new_semctl (int semid, int semnum, int

   va_end (ap);

-#if __ASSUME_32BITUIDS > 0
+#if __ASSUME_IPC64 > 0
   return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd | __IPC_64,
 			 CHECK_SEMCTL (&arg, semid, cmd | __IPC_64));
 #else
Index: sysdeps/unix/sysv/linux/shmctl.c
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/shmctl.c,v
retrieving revision 1.9
diff -u -p -r1.9 shmctl.c
--- sysdeps/unix/sysv/linux/shmctl.c	2000/08/17 07:37:01	1.9
+++ sysdeps/unix/sysv/linux/shmctl.c	2000/09/26 19:03:24
@@ -73,7 +73,7 @@ compat_symbol (libc, __old_shmctl, shmct
 int
 __new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
 {
-#if __ASSUME_32BITUIDS > 0
+#if __ASSUME_IPC64 > 0
   return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd | __IPC_64, 0, CHECK_1 (buf));
 #else
   switch (cmd) {
Index: sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h,v
retrieving revision 1.1
diff -u -p -r1.1 fcntl.h
--- sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h	2000/09/01 07:13:37	1.1
+++ sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h	2000/09/26 19:03:25
@@ -78,10 +78,9 @@
 # define F_SETLKW	F_SETLKW64 /* Set record locking info (blocking).  */
 #endif

-/* XXX missing */
-#define F_GETLK64	5	/* Get record locking info.  */
-#define F_SETLK64	6	/* Set record locking info (non-blocking).  */
-#define F_SETLKW64	7	/* Set record locking info (blocking).  */
+#define F_GETLK64	12	/* Get record locking info.  */
+#define F_SETLK64	13	/* Set record locking info (non-blocking).  */
+#define F_SETLKW64	14	/* Set record locking info (blocking).  */

 #if defined __USE_BSD || defined __USE_XOPEN2K
 # define F_SETOWN	8	/* Get owner of socket (receiver of SIGIO).  */
Index: sysdeps/unix/sysv/linux/powerpc/bits/ipc.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/powerpc/bits/ipc.h,v
retrieving revision 1.4
diff -u -p -r1.4 ipc.h
--- sysdeps/unix/sysv/linux/powerpc/bits/ipc.h	2000/05/23 08:43:01	1.4
+++ sysdeps/unix/sysv/linux/powerpc/bits/ipc.h	2000/09/26 19:03:25
@@ -48,7 +48,10 @@ struct ipc_perm
     __uid_t cuid;		/* Creator's user ID.  */
     __gid_t cgid;		/* Creator's group ID.  */
     __mode_t mode;		/* Read/write permission.  */
-    unsigned short int __seq;	/* Sequence number.  */
+    unsigned long __seq;	/* Sequence number.  */
+    unsigned int __pad1;
+    unsigned long long __unused1;
+    unsigned long long __unused2;
   };


--- /dev/null	Tue May  5 22:32:27 1998
+++ sysdeps/unix/sysv/linux/powerpc/bits/msq.h	Tue Sep 26 20:40:24 2000
@@ -0,0 +1,77 @@
+/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_MSG_H
+# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Define options for message queue functions.  */
+#define MSG_NOERROR	010000	/* no error if message is too big */
+#ifdef __USE_GNU
+# define MSG_EXCEPT	020000	/* recv any msg except of specified type */
+#endif
+
+/* Types used in the structure definition.  */
+typedef unsigned long int msgqnum_t;
+typedef unsigned long int msglen_t;
+
+
+/* Structure of record for one message inside the kernel.
+   The type `struct msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;	/* structure describing operation permission */
+  unsigned int __unused1;
+  __time_t msg_stime;		/* time of last msgsnd command */
+  unsigned int __unused2;
+  __time_t msg_rtime;		/* time of last msgrcv command */
+  unsigned int __unused3;
+  __time_t msg_ctime;		/* time of last change */
+  unsigned long __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;		/* number of messages currently on queue */
+  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
+  __pid_t msg_lspid;		/* pid of last msgsnd() */
+  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+  unsigned long __unused4;
+  unsigned long __unused5;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes	__msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
--- /dev/null	Tue May  5 22:32:27 1998
+++ sysdeps/unix/sysv/linux/powerpc/bits/sem.h	Tue Sep 26 20:40:24 2000
@@ -0,0 +1,87 @@
+/* Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO	0x1000		/* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID		11		/* get sempid */
+#define GETVAL		12		/* get semval */
+#define GETALL		13		/* get all semval's */
+#define GETNCNT		14		/* get semncnt */
+#define GETZCNT		15		/* get semzcnt */
+#define SETVAL		16		/* set semval */
+#define SETALL		17		/* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  unsigned int __unused1;
+  __time_t sem_otime;			/* last semop() time */
+  unsigned int __unused2;
+  __time_t sem_ctime;			/* last time changed by semctl() */
+  unsigned long int sem_nsems;		/* number of semaphores in set */
+  unsigned long __unused3;
+  unsigned long __unused4;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;				<= value for SETVAL
+     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;		<= array for GETALL & SETALL
+     struct seminfo *__buf;		<= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED	1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct  seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
--- /dev/null	Tue May  5 22:32:27 1998
+++ sysdeps/unix/sysv/linux/powerpc/bits/shm.h	Tue Sep 26 20:43:17 2000
@@ -0,0 +1,94 @@
+/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _SYS_SHM_H
+# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Permission flag for shmget.  */
+#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */
+#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY	010000		/* attach read-only else read-write */
+#define SHM_RND		020000		/* round attach address to SHMLBA */
+#define SHM_REMAP	040000		/* take-over region on attach */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK	11		/* lock segment (root only) */
+#define SHM_UNLOCK	12		/* unlock segment (root only) */
+
+
+/* Type to count number of attaches.  */
+typedef unsigned long int shmatt_t;
+
+/* Data structure describing a set of semaphores.  */
+struct shmid_ds
+  {
+    struct ipc_perm shm_perm;		/* operation permission struct */
+    unsigned int __unused1;
+    __time_t shm_atime;			/* time of last shmat() */
+    unsigned int __unused2;
+    __time_t shm_dtime;			/* time of last shmdt() */
+    unsigned int __unused3;
+    __time_t shm_ctime;			/* time of last change by shmctl() */
+    unsigned int __unused4;
+    size_t shm_segsz;			/* size of segment in bytes */
+    __pid_t shm_cpid;			/* pid of creator */
+    __pid_t shm_lpid;			/* pid of last shmop */
+    shmatt_t shm_nattch;		/* number of current attaches */
+    unsigned long __unused5;
+    unsigned long __unused6;
+  };
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+# define SHM_STAT 	13
+# define SHM_INFO 	14
+
+/* shm_mode upper byte flags */
+# define SHM_DEST	01000	/* segment will be destroyed on last detach */
+# define SHM_LOCKED	02000   /* segment will not be swapped */
+
+struct	shminfo
+  {
+    unsigned long int shmmax;
+    unsigned long int shmmin;
+    unsigned long int shmmni;
+    unsigned long int shmseg;
+    unsigned long int shmall;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+    unsigned long int __unused3;
+    unsigned long int __unused4;
+  };
+
+struct shm_info
+  {
+    int used_ids;
+    unsigned long int shm_tot;	/* total allocated shm */
+    unsigned long int shm_rss;	/* total resident shm */
+    unsigned long int shm_swp;	/* total swapped shm */
+    unsigned long int swap_attempts;
+    unsigned long int swap_successes;
+  };
+
+#endif /* __USE_MISC */

[-- Attachment #3: kernel24-ipc-2.patch --]
[-- Type: text/plain, Size: 2853 bytes --]

===== include/asm-ppc/ipcbuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/ipcbuf.h	Wed Jan 19 03:00:31 2000
+++ edited/include/asm-ppc/ipcbuf.h	Tue Sep 26 19:40:42 2000
@@ -2,10 +2,28 @@
 #define __PPC_IPCBUF_H__

 /*
- * The ipc64_perm structure for the PPC is identical to kern_ipc_perm
- * as we have always had 32-bit UIDs and GIDs in the kernel.
+ * The ipc64_perm structure for PPC architecture.
+ * Note extra padding because this structure is passed back and forth
+ * between kernel and user space.
+ *
+ * Pad space is left for:
+ * - 1 32-bit value to fill up for 8-byte alignment
+ * - 2 miscellaneous 64-bit values (so that this structure matches
+ *                                  PPC64 ipc64_perm)
  */
-
-#define ipc64_perm	kern_ipc_perm
+
+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 long		seq;
+	unsigned int		__pad2;
+	unsigned long long	__unused1;
+	unsigned long long	__unused2;
+};

 #endif /* __PPC_IPCBUF_H__ */
===== include/asm-ppc/msgbuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/msgbuf.h	Wed Jan 19 03:00:31 2000
+++ edited/include/asm-ppc/msgbuf.h	Fri Sep 22 23:27:16 2000
@@ -7,7 +7,6 @@

 struct msqid64_ds {
 	struct ipc64_perm msg_perm;
-	unsigned int	__unused0;
 	unsigned int	__unused1;
 	__kernel_time_t msg_stime;	/* last msgsnd time */
 	unsigned int	__unused2;
===== include/asm-ppc/sembuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/sembuf.h	Wed Jan 19 03:00:31 2000
+++ edited/include/asm-ppc/sembuf.h	Sun Sep 24 11:19:56 2000
@@ -7,7 +7,6 @@

 struct semid64_ds {
 	struct ipc64_perm sem_perm;		/* permissions .. see ipc.h */
-	unsigned int	__unused0;
 	unsigned int	__unused1;
 	__kernel_time_t	sem_otime;		/* last semop time */
 	unsigned int	__unused2;
===== include/asm-ppc/shmbuf.h 1.1 vs edited =====
--- 1.1/include/asm-ppc/shmbuf.h	Wed Jan 19 03:00:31 2000
+++ edited/include/asm-ppc/shmbuf.h	Tue Sep 26 20:26:16 2000
@@ -7,19 +7,19 @@

 struct shmid64_ds {
 	struct ipc64_perm	shm_perm;	/* operation perms */
-	unsigned int		__unused0;
-	size_t			shm_segsz;	/* size of segment (bytes) */
-	unsigned long		__unused1;
+	unsigned int		__unused1;
 	__kernel_time_t		shm_atime;	/* last attach time */
-	unsigned long		__unused2;
+	unsigned int		__unused2;
 	__kernel_time_t		shm_dtime;	/* last detach time */
-	unsigned long		__unused3;
+	unsigned int		__unused3;
 	__kernel_time_t		shm_ctime;	/* last change time */
+	unsigned int		__unused4;
+	size_t			shm_segsz;	/* size of segment (bytes) */
 	__kernel_pid_t		shm_cpid;	/* pid of creator */
 	__kernel_pid_t		shm_lpid;	/* pid of last operator */
 	unsigned long		shm_nattch;	/* no. of current attaches */
-	unsigned long		__unused4;
 	unsigned long		__unused5;
+	unsigned long		__unused6;
 };

 struct shminfo64 {

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [RFC] IPC64 with glibc-2.2 and linux-2.4
  2000-09-26 21:24           ` Franz Sirl
@ 2000-09-27  0:45             ` Geoff Keating
  0 siblings, 0 replies; 10+ messages in thread
From: Geoff Keating @ 2000-09-27  0:45 UTC (permalink / raw)
  To: Franz.Sirl-kernel; +Cc: drepper, libc-alpha, linuxppc-dev


This is OK for glibc; feel free to commit it.

--
- Geoffrey Keating <geoffk@cygnus.com>

** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2000-09-27  0:45 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-09-26  2:38 [RFC] IPC64 with glibc-2.2 and linux-2.4 Jack Howarth
     [not found] <Franz Sirl's message of "Mon, 25 Sep 2000 11:10:45 +0200">
     [not found] ` <Franz Sirl's message of "Sun, 24 Sep 2000 21:50:44 +0200">
2000-09-24 19:50   ` Franz Sirl
2000-09-25  6:51     ` Ulrich Drepper
2000-09-25  9:10       ` Franz Sirl
2000-09-25 15:25         ` Ulrich Drepper
2000-09-25 15:54           ` Franz Sirl
2000-09-25 16:08             ` Ulrich Drepper
2000-09-25 21:24         ` Geoff Keating
2000-09-26 21:24           ` Franz Sirl
2000-09-27  0:45             ` Geoff Keating

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).