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