public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] Update kernel uabi header files for x32
@ 2013-12-27 17:25 H.J. Lu
  2013-12-27 17:25 ` [PATCH 1/8] Use __kernel_long_t in struct timex H.J. Lu
                   ` (7 more replies)
  0 siblings, 8 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

X32 uses the same kernel system call interface as x86-64 for many
system calls.  However, "long" is 64-bit for x86-64 and is 32-bit for
x32.  Where long or unsigned long are used in struct types for such
system calls, they are wrong for x32.  __kernel_[u]long_t is [unsigned]
long for all ABIs other than x32.  I am submitting 8 patches to replace
long or unsigned long with __kernel_[u]long_t so that those struct types
can be used with x32 system calls.

H.J. Lu (8):
  Use __kernel_long_t in struct timex
  Use __kernel_long_t/__kernel_ulong_t in <linux/resource.h>
  Use __kernel_ulong_t in uapi struct ipc64_perm
  Use __kernel_long_t in struct msgbuf
  Use __kernel_ulong_t in struct msqid64_ds
  Use __kernel_ulong_t in x86 struct semid64_ds
  Use __kernel_ulong_t in shmid64_ds/shminfo64/shm_info
  Use __kernel_long_t in struct mq_attr

 arch/x86/include/uapi/asm/sembuf.h | 10 ++++-----
 include/uapi/asm-generic/ipcbuf.h  |  5 +++++
 include/uapi/asm-generic/msgbuf.h  | 19 +++++++++++-----
 include/uapi/asm-generic/shmbuf.h  | 36 +++++++++++++++++++++--------
 include/uapi/linux/mqueue.h        | 18 ++++++++++-----
 include/uapi/linux/msg.h           |  8 +++++--
 include/uapi/linux/resource.h      | 26 +++++++++++++++++++--
 include/uapi/linux/shm.h           | 14 +++++++++---
 include/uapi/linux/timex.h         | 46 +++++++++++++++++++++++++++++++-------
 9 files changed, 143 insertions(+), 39 deletions(-)

-- 
1.8.4.2


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

* [PATCH 1/8] Use __kernel_long_t in struct timex
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  2013-12-27 22:06   ` H. Peter Anvin
  2014-01-21 16:58   ` Catalin Marinas
  2013-12-27 17:25 ` [PATCH 2/8] Use __kernel_long_t/__kernel_ulong_t in <linux/resource.h> H.J. Lu
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

X32 adjtimex system call is the same as x86-64 adjtimex system call,
which uses 64-bit integer for long in struct timex. But x32 long is
32 bit.  This patch replaces long in struct timex with __kernel_long_t
if __BITS_PER_LONG == 64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 include/uapi/linux/timex.h | 46 ++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 38 insertions(+), 8 deletions(-)

diff --git a/include/uapi/linux/timex.h b/include/uapi/linux/timex.h
index a7ea81f..98314e9 100644
--- a/include/uapi/linux/timex.h
+++ b/include/uapi/linux/timex.h
@@ -63,28 +63,58 @@
  */
 struct timex {
 	unsigned int modes;	/* mode selector */
+#if __BITS_PER_LONG == 64
+	__kernel_long_t offset;	/* time offset (usec) */
+	__kernel_long_t freq;	/* frequency offset (scaled ppm) */
+	__kernel_long_t maxerror;/* maximum error (usec) */
+	__kernel_long_t esterror;/* estimated error (usec) */
+#else
 	long offset;		/* time offset (usec) */
 	long freq;		/* frequency offset (scaled ppm) */
 	long maxerror;		/* maximum error (usec) */
 	long esterror;		/* estimated error (usec) */
+#endif
 	int status;		/* clock command/status */
+#if __BITS_PER_LONG == 64
+	__kernel_long_t constant;/* pll time constant */
+	__kernel_long_t precision;/* clock precision (usec) (read only) */
+	__kernel_long_t tolerance;/* clock frequency tolerance (ppm)
+				   * (read only)
+				   */
+#else
 	long constant;		/* pll time constant */
 	long precision;		/* clock precision (usec) (read only) */
 	long tolerance;		/* clock frequency tolerance (ppm)
 				 * (read only)
 				 */
+#endif
 	struct timeval time;	/* (read only, except for ADJ_SETOFFSET) */
+#if __BITS_PER_LONG == 64
+	__kernel_long_t tick;	/* (modified) usecs between clock ticks */
+
+	__kernel_long_t ppsfreq;/* pps frequency (scaled ppm) (ro) */
+	__kernel_long_t jitter; /* pps jitter (us) (ro) */
+#else
 	long tick;		/* (modified) usecs between clock ticks */
 
-	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */
-	long jitter;            /* pps jitter (us) (ro) */
+	long ppsfreq;		/* pps frequency (scaled ppm) (ro) */
+	long jitter;		/* pps jitter (us) (ro) */
+#endif
 	int shift;              /* interval duration (s) (shift) (ro) */
-	long stabil;            /* pps stability (scaled ppm) (ro) */
-	long jitcnt;            /* jitter limit exceeded (ro) */
-	long calcnt;            /* calibration intervals (ro) */
-	long errcnt;            /* calibration errors (ro) */
-	long stbcnt;            /* stability limit exceeded (ro) */
-
+#if __BITS_PER_LONG == 64
+	__kernel_long_t stabil; /* pps stability (scaled ppm) (ro) */
+	__kernel_long_t jitcnt; /* jitter limit exceeded (ro) */
+	__kernel_long_t calcnt; /* calibration intervals (ro) */
+	__kernel_long_t errcnt; /* calibration errors (ro) */
+	__kernel_long_t stbcnt; /* stability limit exceeded (ro) */
+
+#else
+	long stabil;		/* pps stability (scaled ppm) (ro) */
+	long jitcnt;		/* jitter limit exceeded (ro) */
+	long calcnt;		/* calibration intervals (ro) */
+	long errcnt;		/* calibration errors (ro) */
+	long stbcnt;		/* stability limit exceeded (ro) */
+#endif
 	int tai;		/* TAI offset (ro) */
 
 	int  :32; int  :32; int  :32; int  :32;
-- 
1.8.4.2


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

* [PATCH 2/8] Use __kernel_long_t/__kernel_ulong_t in <linux/resource.h>
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
  2013-12-27 17:25 ` [PATCH 1/8] Use __kernel_long_t in struct timex H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  2013-12-27 17:25 ` [PATCH 3/8] Use __kernel_ulong_t in uapi struct ipc64_perm H.J. Lu
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

Both x32 and x86-64 use the same struct rusage and struct rlimit for
system calls.  But x32 log is 32-bit.  This patch change uapi
<linux/resource.h> to use __kernel_long_t in struct rusage and
__kernel_ulong_t in and struct rlimit if __BITS_PER_LONG == 64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 include/uapi/linux/resource.h | 26 ++++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/include/uapi/linux/resource.h b/include/uapi/linux/resource.h
index e0ed284..87d2daa 100644
--- a/include/uapi/linux/resource.h
+++ b/include/uapi/linux/resource.h
@@ -23,6 +23,22 @@
 struct	rusage {
 	struct timeval ru_utime;	/* user time used */
 	struct timeval ru_stime;	/* system time used */
+#if __BITS_PER_LONG == 64
+	__kernel_long_t	ru_maxrss;	/* maximum resident set size */
+	__kernel_long_t	ru_ixrss;	/* integral shared memory size */
+	__kernel_long_t	ru_idrss;	/* integral unshared data size */
+	__kernel_long_t	ru_isrss;	/* integral unshared stack size */
+	__kernel_long_t	ru_minflt;	/* page reclaims */
+	__kernel_long_t	ru_majflt;	/* page faults */
+	__kernel_long_t	ru_nswap;	/* swaps */
+	__kernel_long_t	ru_inblock;	/* block input operations */
+	__kernel_long_t	ru_oublock;	/* block output operations */
+	__kernel_long_t	ru_msgsnd;	/* messages sent */
+	__kernel_long_t	ru_msgrcv;	/* messages received */
+	__kernel_long_t	ru_nsignals;	/* signals received */
+	__kernel_long_t	ru_nvcsw;	/* voluntary context switches */
+	__kernel_long_t	ru_nivcsw;	/* involuntary " */
+#else
 	long	ru_maxrss;		/* maximum resident set size */
 	long	ru_ixrss;		/* integral shared memory size */
 	long	ru_idrss;		/* integral unshared data size */
@@ -37,11 +53,17 @@ struct	rusage {
 	long	ru_nsignals;		/* signals received */
 	long	ru_nvcsw;		/* voluntary context switches */
 	long	ru_nivcsw;		/* involuntary " */
+#endif
 };
 
 struct rlimit {
-	unsigned long	rlim_cur;
-	unsigned long	rlim_max;
+#if __BITS_PER_LONG == 64
+	__kernel_ulong_t	rlim_cur;
+	__kernel_ulong_t	rlim_max;
+#else
+	unsigned long		rlim_cur;
+	unsigned long		rlim_max;
+#endif
 };
 
 #define RLIM64_INFINITY		(~0ULL)
-- 
1.8.4.2


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

* [PATCH 3/8] Use __kernel_ulong_t in uapi struct ipc64_perm
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
  2013-12-27 17:25 ` [PATCH 1/8] Use __kernel_long_t in struct timex H.J. Lu
  2013-12-27 17:25 ` [PATCH 2/8] Use __kernel_long_t/__kernel_ulong_t in <linux/resource.h> H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  2013-12-27 17:25 ` [PATCH 4/8] Use __kernel_long_t in struct msgbuf H.J. Lu
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

X32 IPC system call is the same as x86-64 IPC system call, which uses
64-bit integer for unsigned long in struct ipc64_perm.  But x32 long is
32 bit.  This patch replaces unsigned long in uapi struct ipc64_perm with
__kernel_ulong_t if __BITS_PER_LONG == 64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 include/uapi/asm-generic/ipcbuf.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/include/uapi/asm-generic/ipcbuf.h b/include/uapi/asm-generic/ipcbuf.h
index 76982b2..4635fa5 100644
--- a/include/uapi/asm-generic/ipcbuf.h
+++ b/include/uapi/asm-generic/ipcbuf.h
@@ -27,8 +27,13 @@ struct ipc64_perm {
 	unsigned char		__pad1[4 - sizeof(__kernel_mode_t)];
 	unsigned short		seq;
 	unsigned short		__pad2;
+#if __BITS_PER_LONG == 64
+	__kernel_ulong_t	__unused1;
+	__kernel_ulong_t	__unused2;
+#else
 	unsigned long		__unused1;
 	unsigned long		__unused2;
+#endif
 };
 
 #endif /* __ASM_GENERIC_IPCBUF_H */
-- 
1.8.4.2


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

* [PATCH 4/8] Use __kernel_long_t in struct msgbuf
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
                   ` (2 preceding siblings ...)
  2013-12-27 17:25 ` [PATCH 3/8] Use __kernel_ulong_t in uapi struct ipc64_perm H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  2013-12-27 17:25 ` [PATCH 5/8] Use __kernel_ulong_t in struct msqid64_ds H.J. Lu
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

X32 msgsnd/msgrcv system calls are the same as x86-64 msgsnd/msgrcv system
calls, which use 64-bit integer for long in struct msgbuf . But x32 long
is 32 bit.  This patch replaces long in struct msgbuf with __kernel_long_t
if __BITS_PER_LONG == 64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 include/uapi/linux/msg.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/uapi/linux/msg.h b/include/uapi/linux/msg.h
index 22d95c6..6b6ec96 100644
--- a/include/uapi/linux/msg.h
+++ b/include/uapi/linux/msg.h
@@ -34,8 +34,12 @@ struct msqid_ds {
 
 /* message buffer for msgsnd and msgrcv calls */
 struct msgbuf {
-	long mtype;         /* type of message */
-	char mtext[1];      /* message text */
+#if __BITS_PER_LONG == 64
+	__kernel_long_t mtype;          /* type of message */
+#else
+	long mtype;                     /* type of message */
+#endif
+	char mtext[1];                  /* message text */
 };
 
 /* buffer for msgctl calls IPC_INFO, MSG_INFO */
-- 
1.8.4.2


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

* [PATCH 5/8] Use __kernel_ulong_t in struct msqid64_ds
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
                   ` (3 preceding siblings ...)
  2013-12-27 17:25 ` [PATCH 4/8] Use __kernel_long_t in struct msgbuf H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  2013-12-27 17:25 ` [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds H.J. Lu
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

Both x32 and x86-64 use the same struct msqid64_ds for system calls.
But x32 long is 32-bit. This patch replaces unsigned long with
__kernel_ulong_t in struct msqid64_ds if __BITS_PER_LONG == 64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 include/uapi/asm-generic/msgbuf.h | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/include/uapi/asm-generic/msgbuf.h b/include/uapi/asm-generic/msgbuf.h
index aec850d..e73766a 100644
--- a/include/uapi/asm-generic/msgbuf.h
+++ b/include/uapi/asm-generic/msgbuf.h
@@ -34,14 +34,23 @@ struct msqid64_ds {
 	__kernel_time_t msg_ctime;	/* last change time */
 #if __BITS_PER_LONG != 64
 	unsigned long	__unused3;
+	unsigned long	msg_cbytes;	/* current number of bytes on queue */
+	unsigned long	msg_qnum;	/* number of messages in queue */
+	unsigned long	msg_qbytes;	/* max number of bytes on queue */
+#else
+	__kernel_ulong_t msg_cbytes;	/* current number of bytes on queue */
+	__kernel_ulong_t msg_qnum;	/* number of messages in queue */
+	__kernel_ulong_t msg_qbytes;	/* max number of bytes on queue */
 #endif
-	unsigned long  msg_cbytes;	/* current number of bytes on queue */
-	unsigned long  msg_qnum;	/* number of messages in queue */
-	unsigned long  msg_qbytes;	/* max number of bytes on queue */
 	__kernel_pid_t msg_lspid;	/* pid of last msgsnd */
 	__kernel_pid_t msg_lrpid;	/* last receive pid */
-	unsigned long  __unused4;
-	unsigned long  __unused5;
+#if __BITS_PER_LONG != 64
+	unsigned long	__unused4;
+	unsigned long	__unused5;
+#else
+	__kernel_ulong_t __unused4;
+	__kernel_ulong_t __unused5;
+#endif
 };
 
 #endif /* __ASM_GENERIC_MSGBUF_H */
-- 
1.8.4.2


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

* [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
                   ` (4 preceding siblings ...)
  2013-12-27 17:25 ` [PATCH 5/8] Use __kernel_ulong_t in struct msqid64_ds H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  2014-01-21 17:10   ` Catalin Marinas
  2013-12-27 17:25 ` [PATCH 7/8] Use __kernel_ulong_t in shmid64_ds/shminfo64/shm_info H.J. Lu
  2013-12-27 17:25 ` [PATCH 8/8] Use __kernel_long_t in struct mq_attr H.J. Lu
  7 siblings, 1 reply; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

Both x32 and x86-64 use the same struct semid64_ds for system calls.
But x32 long is 32-bit. This patch replaces unsigned long with
__kernel_ulong_t in x86 struct semid64_ds.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 arch/x86/include/uapi/asm/sembuf.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/uapi/asm/sembuf.h b/arch/x86/include/uapi/asm/sembuf.h
index ee50c80..cc2d6a3 100644
--- a/arch/x86/include/uapi/asm/sembuf.h
+++ b/arch/x86/include/uapi/asm/sembuf.h
@@ -13,12 +13,12 @@
 struct semid64_ds {
 	struct ipc64_perm sem_perm;	/* permissions .. see ipc.h */
 	__kernel_time_t	sem_otime;	/* last semop time */
-	unsigned long	__unused1;
+	__kernel_ulong_t __unused1;
 	__kernel_time_t	sem_ctime;	/* last change time */
-	unsigned long	__unused2;
-	unsigned long	sem_nsems;	/* no. of semaphores in array */
-	unsigned long	__unused3;
-	unsigned long	__unused4;
+	__kernel_ulong_t __unused2;
+	__kernel_ulong_t sem_nsems;	/* no. of semaphores in array */
+	__kernel_ulong_t __unused3;
+	__kernel_ulong_t __unused4;
 };
 
 #endif /* _ASM_X86_SEMBUF_H */
-- 
1.8.4.2


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

* [PATCH 7/8] Use __kernel_ulong_t in shmid64_ds/shminfo64/shm_info
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
                   ` (5 preceding siblings ...)
  2013-12-27 17:25 ` [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  2013-12-27 17:25 ` [PATCH 8/8] Use __kernel_long_t in struct mq_attr H.J. Lu
  7 siblings, 0 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

Both x32 and x86-64 use the same struct shmid64_ds/shminfo64/shm_info for
system calls.  But x32 long is 32-bit. This patch replaces unsigned long
with __kernel_ulong_t in struct shmid64_ds/shminfo64/shm_info if
__BITS_PER_LONG == 64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 include/uapi/asm-generic/shmbuf.h | 36 +++++++++++++++++++++++++++---------
 include/uapi/linux/shm.h          | 14 +++++++++++---
 2 files changed, 38 insertions(+), 12 deletions(-)

diff --git a/include/uapi/asm-generic/shmbuf.h b/include/uapi/asm-generic/shmbuf.h
index 5768fa6..c5d9d34 100644
--- a/include/uapi/asm-generic/shmbuf.h
+++ b/include/uapi/asm-generic/shmbuf.h
@@ -39,21 +39,39 @@ struct shmid64_ds {
 #endif
 	__kernel_pid_t		shm_cpid;	/* pid of creator */
 	__kernel_pid_t		shm_lpid;	/* pid of last operator */
+#if __BITS_PER_LONG != 64
 	unsigned long		shm_nattch;	/* no. of current attaches */
 	unsigned long		__unused4;
 	unsigned long		__unused5;
+#else
+	__kernel_ulong_t	shm_nattch;	/* no. of current attaches */
+	__kernel_ulong_t	__unused4;
+	__kernel_ulong_t	__unused5;
+#endif
 };
 
 struct shminfo64 {
-	unsigned long	shmmax;
-	unsigned long	shmmin;
-	unsigned long	shmmni;
-	unsigned long	shmseg;
-	unsigned long	shmall;
-	unsigned long	__unused1;
-	unsigned long	__unused2;
-	unsigned long	__unused3;
-	unsigned long	__unused4;
+#if __BITS_PER_LONG != 64
+	unsigned long		shmmax;
+	unsigned long		shmmin;
+	unsigned long		shmmni;
+	unsigned long		shmseg;
+	unsigned long		shmall;
+	unsigned long		__unused1;
+	unsigned long		__unused2;
+	unsigned long		__unused3;
+	unsigned long		__unused4;
+#else
+	__kernel_ulong_t	shmmax;
+	__kernel_ulong_t	shmmin;
+	__kernel_ulong_t	shmmni;
+	__kernel_ulong_t	shmseg;
+	__kernel_ulong_t	shmall;
+	__kernel_ulong_t	__unused1;
+	__kernel_ulong_t	__unused2;
+	__kernel_ulong_t	__unused3;
+	__kernel_ulong_t	__unused4;
+#endif
 };
 
 #endif /* __ASM_GENERIC_SHMBUF_H */
diff --git a/include/uapi/linux/shm.h b/include/uapi/linux/shm.h
index ec36fa1..970d255 100644
--- a/include/uapi/linux/shm.h
+++ b/include/uapi/linux/shm.h
@@ -68,11 +68,19 @@ struct	shminfo {
 
 struct shm_info {
 	int used_ids;
-	unsigned long shm_tot;	/* total allocated shm */
-	unsigned long shm_rss;	/* total resident shm */
-	unsigned long shm_swp;	/* total swapped shm */
+#if __BITS_PER_LONG == 64
+	__kernel_ulong_t shm_tot;	/* total allocated shm */
+	__kernel_ulong_t shm_rss;	/* total resident shm */
+	__kernel_ulong_t shm_swp;	/* total swapped shm */
+	__kernel_ulong_t swap_attempts;
+	__kernel_ulong_t swap_successes;
+#else
+	unsigned long shm_tot;		/* total allocated shm */
+	unsigned long shm_rss;		/* total resident shm */
+	unsigned long shm_swp;		/* total swapped shm */
 	unsigned long swap_attempts;
 	unsigned long swap_successes;
+#endif
 };
 
 
-- 
1.8.4.2


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

* [PATCH 8/8] Use __kernel_long_t in struct mq_attr
  2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
                   ` (6 preceding siblings ...)
  2013-12-27 17:25 ` [PATCH 7/8] Use __kernel_ulong_t in shmid64_ds/shminfo64/shm_info H.J. Lu
@ 2013-12-27 17:25 ` H.J. Lu
  7 siblings, 0 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 17:25 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

Both x32 and x86-64 use the same struct mq_attr for system calls.  But
x32 long is 32-bit. This patch replaces long with __kernel_long_t in
struct mq_attr if __BITS_PER_LONG == 64.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 include/uapi/linux/mqueue.h | 18 +++++++++++++-----
 1 file changed, 13 insertions(+), 5 deletions(-)

diff --git a/include/uapi/linux/mqueue.h b/include/uapi/linux/mqueue.h
index 8b5a796..03bf30e 100644
--- a/include/uapi/linux/mqueue.h
+++ b/include/uapi/linux/mqueue.h
@@ -23,11 +23,19 @@
 #define MQ_BYTES_MAX	819200
 
 struct mq_attr {
-	long	mq_flags;	/* message queue flags			*/
-	long	mq_maxmsg;	/* maximum number of messages		*/
-	long	mq_msgsize;	/* maximum message size			*/
-	long	mq_curmsgs;	/* number of messages currently queued	*/
-	long	__reserved[4];	/* ignored for input, zeroed for output */
+#if __BITS_PER_LONG == 64
+	__kernel_long_t	mq_flags;	/* message queue flags			*/
+	__kernel_long_t	mq_maxmsg;	/* maximum number of messages		*/
+	__kernel_long_t	mq_msgsize;	/* maximum message size			*/
+	__kernel_long_t	mq_curmsgs;	/* number of messages currently queued	*/
+	__kernel_long_t	__reserved[4];	/* ignored for input, zeroed for output */
+#else
+	long	mq_flags;		/* message queue flags			*/
+	long	mq_maxmsg;		/* maximum number of messages		*/
+	long	mq_msgsize;		/* maximum message size			*/
+	long	mq_curmsgs;		/* number of messages currently queued	*/
+	long	__reserved[4];		/* ignored for input, zeroed for output */
+#endif
 };
 
 /*
-- 
1.8.4.2


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

* Re: [PATCH 1/8] Use __kernel_long_t in struct timex
  2013-12-27 17:25 ` [PATCH 1/8] Use __kernel_long_t in struct timex H.J. Lu
@ 2013-12-27 22:06   ` H. Peter Anvin
  2014-01-21 16:58   ` Catalin Marinas
  1 sibling, 0 replies; 18+ messages in thread
From: H. Peter Anvin @ 2013-12-27 22:06 UTC (permalink / raw)
  To: H.J. Lu, LKML

On 12/27/2013 09:25 AM, H.J. Lu wrote:
> X32 adjtimex system call is the same as x86-64 adjtimex system call,
> which uses 64-bit integer for long in struct timex. But x32 long is
> 32 bit.  This patch replaces long in struct timex with __kernel_long_t
> if __BITS_PER_LONG == 64.
> 
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
>  include/uapi/linux/timex.h | 46 ++++++++++++++++++++++++++++++++++++++--------
>  1 file changed, 38 insertions(+), 8 deletions(-)
> 
> diff --git a/include/uapi/linux/timex.h b/include/uapi/linux/timex.h
> index a7ea81f..98314e9 100644
> --- a/include/uapi/linux/timex.h
> +++ b/include/uapi/linux/timex.h
> @@ -63,28 +63,58 @@
>   */
>  struct timex {
>  	unsigned int modes;	/* mode selector */
> +#if __BITS_PER_LONG == 64
> +	__kernel_long_t offset;	/* time offset (usec) */
> +	__kernel_long_t freq;	/* frequency offset (scaled ppm) */
> +	__kernel_long_t maxerror;/* maximum error (usec) */
> +	__kernel_long_t esterror;/* estimated error (usec) */
> +#else
>  	long offset;		/* time offset (usec) */
>  	long freq;		/* frequency offset (scaled ppm) */
>  	long maxerror;		/* maximum error (usec) */
>  	long esterror;		/* estimated error (usec) */
> +#endif
>  	int status;		/* clock command/status */

I thought we already discussed this?  No __BITS_PER_LONG conditionals,
please, unless you can strongly motivate them... and if so, we probably
should introduce another __kernel type instead.

	-hpa



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

* [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds
  2013-12-27 22:14 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
@ 2013-12-27 22:14 ` H.J. Lu
  0 siblings, 0 replies; 18+ messages in thread
From: H.J. Lu @ 2013-12-27 22:14 UTC (permalink / raw)
  To: H. Peter Anvin, LKML; +Cc: H.J. Lu

Both x32 and x86-64 use the same struct semid64_ds for system calls.
But x32 long is 32-bit. This patch replaces unsigned long with
__kernel_ulong_t in x86 struct semid64_ds.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
---
 arch/x86/include/uapi/asm/sembuf.h | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/uapi/asm/sembuf.h b/arch/x86/include/uapi/asm/sembuf.h
index ee50c80..cc2d6a3 100644
--- a/arch/x86/include/uapi/asm/sembuf.h
+++ b/arch/x86/include/uapi/asm/sembuf.h
@@ -13,12 +13,12 @@
 struct semid64_ds {
 	struct ipc64_perm sem_perm;	/* permissions .. see ipc.h */
 	__kernel_time_t	sem_otime;	/* last semop time */
-	unsigned long	__unused1;
+	__kernel_ulong_t __unused1;
 	__kernel_time_t	sem_ctime;	/* last change time */
-	unsigned long	__unused2;
-	unsigned long	sem_nsems;	/* no. of semaphores in array */
-	unsigned long	__unused3;
-	unsigned long	__unused4;
+	__kernel_ulong_t __unused2;
+	__kernel_ulong_t sem_nsems;	/* no. of semaphores in array */
+	__kernel_ulong_t __unused3;
+	__kernel_ulong_t __unused4;
 };
 
 #endif /* _ASM_X86_SEMBUF_H */
-- 
1.8.4.2


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

* Re: [PATCH 1/8] Use __kernel_long_t in struct timex
  2013-12-27 17:25 ` [PATCH 1/8] Use __kernel_long_t in struct timex H.J. Lu
  2013-12-27 22:06   ` H. Peter Anvin
@ 2014-01-21 16:58   ` Catalin Marinas
  2014-01-21 17:03     ` H. Peter Anvin
  1 sibling, 1 reply; 18+ messages in thread
From: Catalin Marinas @ 2014-01-21 16:58 UTC (permalink / raw)
  To: H.J. Lu; +Cc: H. Peter Anvin, LKML

On Fri, Dec 27, 2013 at 05:25:05PM +0000, H.J. Lu wrote:
> X32 adjtimex system call is the same as x86-64 adjtimex system call,
> which uses 64-bit integer for long in struct timex. But x32 long is
> 32 bit.  This patch replaces long in struct timex with __kernel_long_t
> if __BITS_PER_LONG == 64.
> 
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
>  include/uapi/linux/timex.h | 46 ++++++++++++++++++++++++++++++++++++++--------
>  1 file changed, 38 insertions(+), 8 deletions(-)
> 
> diff --git a/include/uapi/linux/timex.h b/include/uapi/linux/timex.h
> index a7ea81f..98314e9 100644
> --- a/include/uapi/linux/timex.h
> +++ b/include/uapi/linux/timex.h
> @@ -63,28 +63,58 @@
>   */
>  struct timex {
>  	unsigned int modes;	/* mode selector */
> +#if __BITS_PER_LONG == 64
> +	__kernel_long_t offset;	/* time offset (usec) */
> +	__kernel_long_t freq;	/* frequency offset (scaled ppm) */
> +	__kernel_long_t maxerror;/* maximum error (usec) */
> +	__kernel_long_t esterror;/* estimated error (usec) */
> +#else
>  	long offset;		/* time offset (usec) */
>  	long freq;		/* frequency offset (scaled ppm) */
>  	long maxerror;		/* maximum error (usec) */
>  	long esterror;		/* estimated error (usec) */
> +#endif

These changes should work on arm64 ILP32 as well.

>  	int status;		/* clock command/status */
> +#if __BITS_PER_LONG == 64
> +	__kernel_long_t constant;/* pll time constant */
> +	__kernel_long_t precision;/* clock precision (usec) (read only) */
> +	__kernel_long_t tolerance;/* clock frequency tolerance (ppm)
> +				   * (read only)
> +				   */
> +#else
>  	long constant;		/* pll time constant */
>  	long precision;		/* clock precision (usec) (read only) */
>  	long tolerance;		/* clock frequency tolerance (ppm)
>  				 * (read only)
>  				 */
> +#endif
>  	struct timeval time;	/* (read only, except for ADJ_SETOFFSET) */

struct timeval is already defined in terms of __kernel_long_t, so no
issues here either.

BTW, could we not avoid the #if and always use __kernel_long_t? This
wouldn't break the user ABI.

-- 
Catalin

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

* Re: [PATCH 1/8] Use __kernel_long_t in struct timex
  2014-01-21 16:58   ` Catalin Marinas
@ 2014-01-21 17:03     ` H. Peter Anvin
  2014-01-21 17:12       ` Catalin Marinas
  0 siblings, 1 reply; 18+ messages in thread
From: H. Peter Anvin @ 2014-01-21 17:03 UTC (permalink / raw)
  To: Catalin Marinas, H.J. Lu; +Cc: LKML

On 01/21/2014 08:58 AM, Catalin Marinas wrote:
> 
> BTW, could we not avoid the #if and always use __kernel_long_t? This
> wouldn't break the user ABI.
> 

Ah yes, this is the wrong version of the patchset.  I already gave that
feedback and H.J. posted an update.  My bad.

	-hpa


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

* Re: [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds
  2013-12-27 17:25 ` [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds H.J. Lu
@ 2014-01-21 17:10   ` Catalin Marinas
  2014-01-21 18:06     ` H.J. Lu
  0 siblings, 1 reply; 18+ messages in thread
From: Catalin Marinas @ 2014-01-21 17:10 UTC (permalink / raw)
  To: H.J. Lu; +Cc: H. Peter Anvin, LKML

On Fri, Dec 27, 2013 at 05:25:10PM +0000, H.J. Lu wrote:
> Both x32 and x86-64 use the same struct semid64_ds for system calls.
> But x32 long is 32-bit. This patch replaces unsigned long with
> __kernel_ulong_t in x86 struct semid64_ds.
> 
> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> ---
>  arch/x86/include/uapi/asm/sembuf.h | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/x86/include/uapi/asm/sembuf.h b/arch/x86/include/uapi/asm/sembuf.h
> index ee50c80..cc2d6a3 100644
> --- a/arch/x86/include/uapi/asm/sembuf.h
> +++ b/arch/x86/include/uapi/asm/sembuf.h
> @@ -13,12 +13,12 @@
>  struct semid64_ds {
>  	struct ipc64_perm sem_perm;	/* permissions .. see ipc.h */
>  	__kernel_time_t	sem_otime;	/* last semop time */
> -	unsigned long	__unused1;
> +	__kernel_ulong_t __unused1;
>  	__kernel_time_t	sem_ctime;	/* last change time */
> -	unsigned long	__unused2;
> -	unsigned long	sem_nsems;	/* no. of semaphores in array */
> -	unsigned long	__unused3;
> -	unsigned long	__unused4;
> +	__kernel_ulong_t __unused2;
> +	__kernel_ulong_t sem_nsems;	/* no. of semaphores in array */
> +	__kernel_ulong_t __unused3;
> +	__kernel_ulong_t __unused4;
>  };

Since you are at this, could you please change the
include/uapi/asm-generic/sembuf.h structure as well?

-- 
Catalin

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

* Re: [PATCH 1/8] Use __kernel_long_t in struct timex
  2014-01-21 17:03     ` H. Peter Anvin
@ 2014-01-21 17:12       ` Catalin Marinas
  0 siblings, 0 replies; 18+ messages in thread
From: Catalin Marinas @ 2014-01-21 17:12 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: H.J. Lu, LKML

On Tue, Jan 21, 2014 at 05:03:09PM +0000, H. Peter Anvin wrote:
> On 01/21/2014 08:58 AM, Catalin Marinas wrote:
> > BTW, could we not avoid the #if and always use __kernel_long_t? This
> > wouldn't break the user ABI.
> 
> Ah yes, this is the wrong version of the patchset.  I already gave that
> feedback and H.J. posted an update.  My bad.

Ah, I have to dig a newer version then.

-- 
Catalin

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

* Re: [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds
  2014-01-21 17:10   ` Catalin Marinas
@ 2014-01-21 18:06     ` H.J. Lu
  2014-01-22 14:57       ` Catalin Marinas
  0 siblings, 1 reply; 18+ messages in thread
From: H.J. Lu @ 2014-01-21 18:06 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: H. Peter Anvin, LKML

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

On Tue, Jan 21, 2014 at 9:10 AM, Catalin Marinas
<catalin.marinas@arm.com> wrote:
> On Fri, Dec 27, 2013 at 05:25:10PM +0000, H.J. Lu wrote:
>> Both x32 and x86-64 use the same struct semid64_ds for system calls.
>> But x32 long is 32-bit. This patch replaces unsigned long with
>> __kernel_ulong_t in x86 struct semid64_ds.
>>
>> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
>> ---
>>  arch/x86/include/uapi/asm/sembuf.h | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/arch/x86/include/uapi/asm/sembuf.h b/arch/x86/include/uapi/asm/sembuf.h
>> index ee50c80..cc2d6a3 100644
>> --- a/arch/x86/include/uapi/asm/sembuf.h
>> +++ b/arch/x86/include/uapi/asm/sembuf.h
>> @@ -13,12 +13,12 @@
>>  struct semid64_ds {
>>       struct ipc64_perm sem_perm;     /* permissions .. see ipc.h */
>>       __kernel_time_t sem_otime;      /* last semop time */
>> -     unsigned long   __unused1;
>> +     __kernel_ulong_t __unused1;
>>       __kernel_time_t sem_ctime;      /* last change time */
>> -     unsigned long   __unused2;
>> -     unsigned long   sem_nsems;      /* no. of semaphores in array */
>> -     unsigned long   __unused3;
>> -     unsigned long   __unused4;
>> +     __kernel_ulong_t __unused2;
>> +     __kernel_ulong_t sem_nsems;     /* no. of semaphores in array */
>> +     __kernel_ulong_t __unused3;
>> +     __kernel_ulong_t __unused4;
>>  };
>
> Since you are at this, could you please change the
> include/uapi/asm-generic/sembuf.h structure as well?
>

I could, but my build doesn't use that header file.  I prefer not to
change something I can't test.

I am enclosing a program to check kernel uabi header files
against glibc header files.  You can try it on ILP32 ARM64.

-- 
H.J.

[-- Attachment #2: uapi-header-check.tar.xz --]
[-- Type: application/x-xz, Size: 1320 bytes --]

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

* Re: [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds
  2014-01-21 18:06     ` H.J. Lu
@ 2014-01-22 14:57       ` Catalin Marinas
  2014-01-22 15:20         ` H. Peter Anvin
  0 siblings, 1 reply; 18+ messages in thread
From: Catalin Marinas @ 2014-01-22 14:57 UTC (permalink / raw)
  To: H.J. Lu; +Cc: H. Peter Anvin, LKML

On Tue, Jan 21, 2014 at 06:06:11PM +0000, H.J. Lu wrote:
> On Tue, Jan 21, 2014 at 9:10 AM, Catalin Marinas
> <catalin.marinas@arm.com> wrote:
> > On Fri, Dec 27, 2013 at 05:25:10PM +0000, H.J. Lu wrote:
> >> Both x32 and x86-64 use the same struct semid64_ds for system calls.
> >> But x32 long is 32-bit. This patch replaces unsigned long with
> >> __kernel_ulong_t in x86 struct semid64_ds.
> >>
> >> Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
> >> ---
> >>  arch/x86/include/uapi/asm/sembuf.h | 10 +++++-----
> >>  1 file changed, 5 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/arch/x86/include/uapi/asm/sembuf.h b/arch/x86/include/uapi/asm/sembuf.h
> >> index ee50c80..cc2d6a3 100644
> >> --- a/arch/x86/include/uapi/asm/sembuf.h
> >> +++ b/arch/x86/include/uapi/asm/sembuf.h
> >> @@ -13,12 +13,12 @@
> >>  struct semid64_ds {
> >>       struct ipc64_perm sem_perm;     /* permissions .. see ipc.h */
> >>       __kernel_time_t sem_otime;      /* last semop time */
> >> -     unsigned long   __unused1;
> >> +     __kernel_ulong_t __unused1;
> >>       __kernel_time_t sem_ctime;      /* last change time */
> >> -     unsigned long   __unused2;
> >> -     unsigned long   sem_nsems;      /* no. of semaphores in array */
> >> -     unsigned long   __unused3;
> >> -     unsigned long   __unused4;
> >> +     __kernel_ulong_t __unused2;
> >> +     __kernel_ulong_t sem_nsems;     /* no. of semaphores in array */
> >> +     __kernel_ulong_t __unused3;
> >> +     __kernel_ulong_t __unused4;
> >>  };
> >
> > Since you are at this, could you please change the
> > include/uapi/asm-generic/sembuf.h structure as well?
> 
> I could, but my build doesn't use that header file.  I prefer not to
> change something I can't test.

OK, it makes sense.

> I am enclosing a program to check kernel uabi header files
> against glibc header files.  You can try it on ILP32 ARM64.

Thanks, very useful. We'll give it a try when we get there. So far I
NAK'ed the first set of arm64 ILP32 patches as they were mostly using
the compat ABI (https://lkml.org/lkml/2013/9/9/502).

-- 
Catalin

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

* Re: [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds
  2014-01-22 14:57       ` Catalin Marinas
@ 2014-01-22 15:20         ` H. Peter Anvin
  0 siblings, 0 replies; 18+ messages in thread
From: H. Peter Anvin @ 2014-01-22 15:20 UTC (permalink / raw)
  To: Catalin Marinas, H.J. Lu; +Cc: LKML

On 01/22/2014 06:57 AM, Catalin Marinas wrote:
> 
> Thanks, very useful. We'll give it a try when we get there. So far I
> NAK'ed the first set of arm64 ILP32 patches as they were mostly using
> the compat ABI (https://lkml.org/lkml/2013/9/9/502).
> 

That's mostly where we started out, too.

	-hpa


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

end of thread, other threads:[~2014-01-22 15:21 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-27 17:25 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
2013-12-27 17:25 ` [PATCH 1/8] Use __kernel_long_t in struct timex H.J. Lu
2013-12-27 22:06   ` H. Peter Anvin
2014-01-21 16:58   ` Catalin Marinas
2014-01-21 17:03     ` H. Peter Anvin
2014-01-21 17:12       ` Catalin Marinas
2013-12-27 17:25 ` [PATCH 2/8] Use __kernel_long_t/__kernel_ulong_t in <linux/resource.h> H.J. Lu
2013-12-27 17:25 ` [PATCH 3/8] Use __kernel_ulong_t in uapi struct ipc64_perm H.J. Lu
2013-12-27 17:25 ` [PATCH 4/8] Use __kernel_long_t in struct msgbuf H.J. Lu
2013-12-27 17:25 ` [PATCH 5/8] Use __kernel_ulong_t in struct msqid64_ds H.J. Lu
2013-12-27 17:25 ` [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds H.J. Lu
2014-01-21 17:10   ` Catalin Marinas
2014-01-21 18:06     ` H.J. Lu
2014-01-22 14:57       ` Catalin Marinas
2014-01-22 15:20         ` H. Peter Anvin
2013-12-27 17:25 ` [PATCH 7/8] Use __kernel_ulong_t in shmid64_ds/shminfo64/shm_info H.J. Lu
2013-12-27 17:25 ` [PATCH 8/8] Use __kernel_long_t in struct mq_attr H.J. Lu
  -- strict thread matches above, loose matches on Subject: below --
2013-12-27 22:14 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
2013-12-27 22:14 ` [PATCH 6/8] Use __kernel_ulong_t in x86 struct semid64_ds H.J. Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox