* [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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ 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; 32+ 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] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-21 17:06 ` H. Peter Anvin
@ 2014-01-22 15:10 ` Catalin Marinas
0 siblings, 0 replies; 32+ messages in thread
From: Catalin Marinas @ 2014-01-22 15:10 UTC (permalink / raw)
To: H. Peter Anvin
Cc: H.J. Lu, LKML, linux-arch, Christoph Hellwig, Ralf Baechle,
Will Deacon, Linus Torvalds
On Tue, Jan 21, 2014 at 09:06:59AM -0800, H. Peter Anvin wrote:
> On 12/27/2013 02:14 PM, H.J. Lu wrote:
> > 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
> >
>
> As Catalin indirectly pointed out, I had made a followup to the wrong
> version of the patchset (because I commented to Christoph's feedback.)
> This is threaded to the proper version (without unnecessary #if
> __BITS_PER_LONG.)
>From an arm64 ILP32 perspective (though still work in progress), the
patches look fine. We'll continue the trend with similar changes to
generic semid64_ds.
In case the series is not committed yet:
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
@ 2014-01-22 15:10 ` Catalin Marinas
0 siblings, 0 replies; 32+ messages in thread
From: Catalin Marinas @ 2014-01-22 15:10 UTC (permalink / raw)
To: H. Peter Anvin
Cc: H.J. Lu, LKML, linux-arch, Christoph Hellwig, Ralf Baechle,
Will Deacon, Linus Torvalds
On Tue, Jan 21, 2014 at 09:06:59AM -0800, H. Peter Anvin wrote:
> On 12/27/2013 02:14 PM, H.J. Lu wrote:
> > 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
> >
>
> As Catalin indirectly pointed out, I had made a followup to the wrong
> version of the patchset (because I commented to Christoph's feedback.)
> This is threaded to the proper version (without unnecessary #if
> __BITS_PER_LONG.)
From an arm64 ILP32 perspective (though still work in progress), the
patches look fine. We'll continue the trend with similar changes to
generic semid64_ds.
In case the series is not committed yet:
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2013-12-27 22:14 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
2013-12-28 16:33 ` Christoph Hellwig
@ 2014-01-21 17:06 ` H. Peter Anvin
2014-01-22 15:10 ` Catalin Marinas
1 sibling, 1 reply; 32+ messages in thread
From: H. Peter Anvin @ 2014-01-21 17:06 UTC (permalink / raw)
To: H.J. Lu, LKML
Cc: linux-arch, Christoph Hellwig, Ralf Baechle, Will Deacon,
Catalin Marinas, Linus Torvalds
On 12/27/2013 02:14 PM, H.J. Lu wrote:
> 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
>
As Catalin indirectly pointed out, I had made a followup to the wrong
version of the patchset (because I commented to Christoph's feedback.)
This is threaded to the proper version (without unnecessary #if
__BITS_PER_LONG.)
-hpa
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-21 12:04 ` Catalin Marinas
2014-01-21 12:22 ` H.J. Lu
@ 2014-01-21 15:43 ` H. Peter Anvin
1 sibling, 0 replies; 32+ messages in thread
From: H. Peter Anvin @ 2014-01-21 15:43 UTC (permalink / raw)
To: Catalin Marinas
Cc: Christoph Hellwig, H.J. Lu, linux-arch, LKML, Linus Torvalds,
Ralf Baechle, Will Deacon
On 01/21/2014 04:04 AM, Catalin Marinas wrote:
>
> ILP32 for arm64 is still work in progress and subject to change. So far
> the preliminary ABI
> (http://git.kernel.org/cgit/linux/kernel/git/cmarinas/linux-aarch64.git/log/?h=ilp32)
> redefines kernel_(u)long_t is defined as (unsigned) long long. Most of
> the syscalls are 64-bit generic with ~23 routed to compat. I would like
> to simplify these further and even use native 64-bit signal handling but
> it requires some changes to generic structures.
>
That would be highly useful feedback.
-hpa
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-21 12:04 ` Catalin Marinas
@ 2014-01-21 12:22 ` H.J. Lu
2014-01-21 15:43 ` H. Peter Anvin
1 sibling, 0 replies; 32+ messages in thread
From: H.J. Lu @ 2014-01-21 12:22 UTC (permalink / raw)
To: Catalin Marinas
Cc: H. Peter Anvin, Christoph Hellwig, linux-arch, LKML,
Linus Torvalds, Ralf Baechle, Will Deacon
On Tue, Jan 21, 2014 at 4:04 AM, Catalin Marinas
<catalin.marinas@arm.com> wrote:
> On Mon, Jan 20, 2014 at 05:46:41PM +0000, H. Peter Anvin wrote:
>> On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
>> > On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
>> >> 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.
>
> Does this mean that you are changing the x32 ABI (or it hasn't been
> declared stable yet)?
We don't change x32 ABI. Today kernel uabi header files are
incompatible with x32 ABI in user space. My patches fix them
so that they can be used in user space.
--
H.J.
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-20 17:46 ` H. Peter Anvin
2014-01-20 17:50 ` Christoph Hellwig
@ 2014-01-21 12:04 ` Catalin Marinas
2014-01-21 12:22 ` H.J. Lu
2014-01-21 15:43 ` H. Peter Anvin
1 sibling, 2 replies; 32+ messages in thread
From: Catalin Marinas @ 2014-01-21 12:04 UTC (permalink / raw)
To: H. Peter Anvin
Cc: Christoph Hellwig, H.J. Lu, linux-arch, LKML, Linus Torvalds,
Ralf Baechle, Will Deacon
On Mon, Jan 20, 2014 at 05:46:41PM +0000, H. Peter Anvin wrote:
> On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
> > On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
> >> 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.
Does this mean that you are changing the x32 ABI (or it hasn't been
declared stable yet)?
> This comment by Christoph was literally the only feedback on this
> patchset. The definition of __kernel_[u]long_t is "the size of 'long'
> for the native kernel for the ABI". H.J.'s patchset only affects x86
> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
> simply defined as long/unsigned long.
>
> That being said, x32 is not the only ABI of this type. In particular,
> if the MIPS N32 and ARM64 ILP32 maintainers have suggestions which would
> make this work more applicable to them, it would be highly useful to
> receive any such feedback.
ILP32 for arm64 is still work in progress and subject to change. So far
the preliminary ABI
(http://git.kernel.org/cgit/linux/kernel/git/cmarinas/linux-aarch64.git/log/?h=ilp32)
redefines kernel_(u)long_t is defined as (unsigned) long long. Most of
the syscalls are 64-bit generic with ~23 routed to compat. I would like
to simplify these further and even use native 64-bit signal handling but
it requires some changes to generic structures.
I'll have a look at H.J.'s patches and give comments, they may come in
handy.
--
Catalin
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-20 17:51 ` H.J. Lu
2014-01-20 17:52 ` H.J. Lu
@ 2014-01-20 17:52 ` H. Peter Anvin
1 sibling, 0 replies; 32+ messages in thread
From: H. Peter Anvin @ 2014-01-20 17:52 UTC (permalink / raw)
To: H.J. Lu, Christoph Hellwig
Cc: linux-arch, LKML, Linus Torvalds, Ralf Baechle, Catalin Marinas,
Will Deacon
On 01/20/2014 09:51 AM, H.J. Lu wrote:
> On Mon, Jan 20, 2014 at 9:50 AM, Christoph Hellwig <hch@infradead.org> wrote:
>> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>>> This comment by Christoph was literally the only feedback on this
>>> patchset. The definition of __kernel_[u]long_t is "the size of 'long'
>>> for the native kernel for the ABI". H.J.'s patchset only affects x86
>>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>>> simply defined as long/unsigned long.
>>
>> Btw, sorry for the delay in getting back yo your question. How about
>> __abi_long_t or __kabi_long_t instead?
>>
>
> FWIW, in glibc, we use __syscall_ulong_t/__syscall_ulong_t instead of
> __kernel_[u]long_t.
>
Yes, but glibc defines its own headers and doesn't rely on the types
exported from the kernel.
We could rename them all, but that would *definitely* seem like breaking
the universe for no good reason.
-hpa
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-20 17:51 ` H.J. Lu
@ 2014-01-20 17:52 ` H.J. Lu
2014-01-20 17:52 ` H. Peter Anvin
1 sibling, 0 replies; 32+ messages in thread
From: H.J. Lu @ 2014-01-20 17:52 UTC (permalink / raw)
To: Christoph Hellwig
Cc: H. Peter Anvin, linux-arch, LKML, Linus Torvalds, Ralf Baechle,
Catalin Marinas, Will Deacon
On Mon, Jan 20, 2014 at 9:51 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Mon, Jan 20, 2014 at 9:50 AM, Christoph Hellwig <hch@infradead.org> wrote:
>> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>>> This comment by Christoph was literally the only feedback on this
>>> patchset. The definition of __kernel_[u]long_t is "the size of 'long'
>>> for the native kernel for the ABI". H.J.'s patchset only affects x86
>>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>>> simply defined as long/unsigned long.
>>
>> Btw, sorry for the delay in getting back yo your question. How about
>> __abi_long_t or __kabi_long_t instead?
>>
>
> FWIW, in glibc, we use __syscall_ulong_t/__syscall_ulong_t instead of
It should be __syscall_ulong_t/__syscall_slong_t.
> __kernel_[u]long_t.
--
H.J.
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-20 17:50 ` Christoph Hellwig
2014-01-20 17:51 ` H.J. Lu
@ 2014-01-20 17:52 ` H. Peter Anvin
1 sibling, 0 replies; 32+ messages in thread
From: H. Peter Anvin @ 2014-01-20 17:52 UTC (permalink / raw)
To: Christoph Hellwig
Cc: H.J. Lu, linux-arch, LKML, Linus Torvalds, Ralf Baechle,
Catalin Marinas, Will Deacon
On 01/20/2014 09:50 AM, Christoph Hellwig wrote:
> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>> This comment by Christoph was literally the only feedback on this
>> patchset. The definition of __kernel_[u]long_t is "the size of 'long'
>> for the native kernel for the ABI". H.J.'s patchset only affects x86
>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>> simply defined as long/unsigned long.
>
> Btw, sorry for the delay in getting back yo your question. How about
> __abi_long_t or __kabi_long_t instead?
>
__kernel_* is the namespace that we reserve for uabi symbols/types in
user space. Changing the prefix would break that contract.
-hpa
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-20 17:50 ` Christoph Hellwig
@ 2014-01-20 17:51 ` H.J. Lu
2014-01-20 17:52 ` H.J. Lu
2014-01-20 17:52 ` H. Peter Anvin
2014-01-20 17:52 ` H. Peter Anvin
1 sibling, 2 replies; 32+ messages in thread
From: H.J. Lu @ 2014-01-20 17:51 UTC (permalink / raw)
To: Christoph Hellwig
Cc: H. Peter Anvin, linux-arch, LKML, Linus Torvalds, Ralf Baechle,
Catalin Marinas, Will Deacon
On Mon, Jan 20, 2014 at 9:50 AM, Christoph Hellwig <hch@infradead.org> wrote:
> On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
>> This comment by Christoph was literally the only feedback on this
>> patchset. The definition of __kernel_[u]long_t is "the size of 'long'
>> for the native kernel for the ABI". H.J.'s patchset only affects x86
>> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
>> simply defined as long/unsigned long.
>
> Btw, sorry for the delay in getting back yo your question. How about
> __abi_long_t or __kabi_long_t instead?
>
FWIW, in glibc, we use __syscall_ulong_t/__syscall_ulong_t instead of
__kernel_[u]long_t.
--
H.J.
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2014-01-20 17:46 ` H. Peter Anvin
@ 2014-01-20 17:50 ` Christoph Hellwig
2014-01-20 17:51 ` H.J. Lu
2014-01-20 17:52 ` H. Peter Anvin
2014-01-21 12:04 ` Catalin Marinas
1 sibling, 2 replies; 32+ messages in thread
From: Christoph Hellwig @ 2014-01-20 17:50 UTC (permalink / raw)
To: H. Peter Anvin
Cc: Christoph Hellwig, H.J. Lu, linux-arch, LKML, Linus Torvalds,
Ralf Baechle, Catalin Marinas, Will Deacon
On Mon, Jan 20, 2014 at 09:46:41AM -0800, H. Peter Anvin wrote:
> This comment by Christoph was literally the only feedback on this
> patchset. The definition of __kernel_[u]long_t is "the size of 'long'
> for the native kernel for the ABI". H.J.'s patchset only affects x86
> (specifically x86-64) since on all other platforms __kernel_[u]long_t is
> simply defined as long/unsigned long.
Btw, sorry for the delay in getting back yo your question. How about
__abi_long_t or __kabi_long_t instead?
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2013-12-28 16:33 ` Christoph Hellwig
2013-12-28 17:01 ` H. Peter Anvin
@ 2014-01-20 17:46 ` H. Peter Anvin
2014-01-20 17:50 ` Christoph Hellwig
2014-01-21 12:04 ` Catalin Marinas
1 sibling, 2 replies; 32+ messages in thread
From: H. Peter Anvin @ 2014-01-20 17:46 UTC (permalink / raw)
To: Christoph Hellwig, H.J. Lu, linux-arch
Cc: LKML, Linus Torvalds, Ralf Baechle, Catalin Marinas, Will Deacon
On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
> On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
>> 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.
>
> Independent on how this fixes things, how does the kernel_long_t name
> here make any sense?
>
> On x86-64 "kernel" long always is 64 bits wide. The userspace ABI long
> might be 32 or 64bits wide.
>
> Currently kernel_long_t has almost no uses, so it might be a good time
> to fix the name, define the rules for it, and last but not least
> properly document the intent for thse types.
>
This comment by Christoph was literally the only feedback on this
patchset. The definition of __kernel_[u]long_t is "the size of 'long'
for the native kernel for the ABI". H.J.'s patchset only affects x86
(specifically x86-64) since on all other platforms __kernel_[u]long_t is
simply defined as long/unsigned long.
That being said, x32 is not the only ABI of this type. In particular,
if the MIPS N32 and ARM64 ILP32 maintainers have suggestions which would
make this work more applicable to them, it would be highly useful to
receive any such feedback.
-hpa
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2013-12-28 16:33 ` Christoph Hellwig
@ 2013-12-28 17:01 ` H. Peter Anvin
2014-01-20 17:46 ` H. Peter Anvin
1 sibling, 0 replies; 32+ messages in thread
From: H. Peter Anvin @ 2013-12-28 17:01 UTC (permalink / raw)
To: Christoph Hellwig, H.J. Lu; +Cc: LKML
On 12/28/2013 08:33 AM, Christoph Hellwig wrote:
>
> Independent on how this fixes things, how does the kernel_long_t name
> here make any sense?
>
> On x86-64 "kernel" long always is 64 bits wide. The userspace ABI long
> might be 32 or 64bits wide.
>
> Currently kernel_long_t has almost no uses, so it might be a good time
> to fix the name, define the rules for it, and last but not least
> properly document the intent for thse types.
>
The definition is "an integer type the same width as 'long' for the
native kernel type for the ABI". If you have any suggestions for a
better name, or for that matter, a better alternative, that would be
genuinely appreciated...
-hpa
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH 0/8] Update kernel uabi header files for x32
2013-12-27 22:14 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
@ 2013-12-28 16:33 ` Christoph Hellwig
2013-12-28 17:01 ` H. Peter Anvin
2014-01-20 17:46 ` H. Peter Anvin
2014-01-21 17:06 ` H. Peter Anvin
1 sibling, 2 replies; 32+ messages in thread
From: Christoph Hellwig @ 2013-12-28 16:33 UTC (permalink / raw)
To: H.J. Lu; +Cc: H. Peter Anvin, LKML
On Fri, Dec 27, 2013 at 02:14:16PM -0800, H.J. Lu wrote:
> 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.
Independent on how this fixes things, how does the kernel_long_t name
here make any sense?
On x86-64 "kernel" long always is 64 bits wide. The userspace ABI long
might be 32 or 64bits wide.
Currently kernel_long_t has almost no uses, so it might be a good time
to fix the name, define the rules for it, and last but not least
properly document the intent for thse types.
^ permalink raw reply [flat|nested] 32+ messages in thread
* [PATCH 0/8] Update kernel uabi header files for x32
@ 2013-12-27 22:14 H.J. Lu
2013-12-28 16:33 ` Christoph Hellwig
2014-01-21 17:06 ` H. Peter Anvin
0 siblings, 2 replies; 32+ messages in thread
From: H.J. Lu @ 2013-12-27 22:14 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] 32+ messages in thread
end of thread, other threads:[~2014-01-22 15:21 UTC | newest]
Thread overview: 32+ 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
2013-12-27 22:14 [PATCH 0/8] Update kernel uabi header files for x32 H.J. Lu
2013-12-28 16:33 ` Christoph Hellwig
2013-12-28 17:01 ` H. Peter Anvin
2014-01-20 17:46 ` H. Peter Anvin
2014-01-20 17:50 ` Christoph Hellwig
2014-01-20 17:51 ` H.J. Lu
2014-01-20 17:52 ` H.J. Lu
2014-01-20 17:52 ` H. Peter Anvin
2014-01-20 17:52 ` H. Peter Anvin
2014-01-21 12:04 ` Catalin Marinas
2014-01-21 12:22 ` H.J. Lu
2014-01-21 15:43 ` H. Peter Anvin
2014-01-21 17:06 ` H. Peter Anvin
2014-01-22 15:10 ` Catalin Marinas
2014-01-22 15:10 ` Catalin Marinas
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.