[05/23] linux: Simplify mq_timedreceive

Message ID 20200713171025.3661832-5-adhemerval.zanella@linaro.org
State Committed
Headers
Series [01/23] linux: Simplify clock_adjtime |

Commit Message

Adhemerval Zanella Netto July 13, 2020, 5:10 p.m. UTC
  With arch-syscall.h it can now assumes the existance of either
__NR_mq_timedreceive or __NR_mq_timedreceive_time64.  The 32-bit
time_t support is now only build for !__ASSUME_TIME64_SYSCALLS.

The internal 64-bit time_t names is also adjusted to use the
other y2038 symbol names.

Checked on x86_64-linux-gnu and i686-linux-gnu (on 5.4 and on 4.15
kernel).
---
 include/mqueue.h                          | 16 ++++++------
 sysdeps/unix/sysv/linux/mq_timedreceive.c | 32 +++++++++++------------
 2 files changed, 24 insertions(+), 24 deletions(-)
  

Comments

Lukasz Majewski July 14, 2020, 8:06 a.m. UTC | #1
On Mon, 13 Jul 2020 14:10:07 -0300
Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> wrote:

> With arch-syscall.h it can now assumes the existance of either
> __NR_mq_timedreceive or __NR_mq_timedreceive_time64.  The 32-bit
> time_t support is now only build for !__ASSUME_TIME64_SYSCALLS.
> 
> The internal 64-bit time_t names is also adjusted to use the
> other y2038 symbol names.
> 
> Checked on x86_64-linux-gnu and i686-linux-gnu (on 5.4 and on 4.15
> kernel).
> ---
>  include/mqueue.h                          | 16 ++++++------
>  sysdeps/unix/sysv/linux/mq_timedreceive.c | 32
> +++++++++++------------ 2 files changed, 24 insertions(+), 24
> deletions(-)
> 
> diff --git a/include/mqueue.h b/include/mqueue.h
> index 98e4596c22..b3ee8b7462 100644
> --- a/include/mqueue.h
> +++ b/include/mqueue.h
> @@ -13,18 +13,18 @@ hidden_proto (mq_setattr)
>  #include <struct___timespec64.h>
>  #if __TIMESIZE == 64
>  # define __mq_timedsend_time64 __mq_timedsend
> -# define __mq_timedreceive_time64 __mq_timedreceive
> +# define __mq_timedreceive64 __mq_timedreceive
>  #else
>  extern int __mq_timedsend_time64 (mqd_t mqdes, const char *msg_ptr,
>                                    size_t msg_len, unsigned int
> msg_prio, const struct __timespec64 *abs_timeout);
>  librt_hidden_proto (__mq_timedsend_time64)
> -extern ssize_t __mq_timedreceive_time64 (mqd_t mqdes,
> -                                         char *__restrict msg_ptr,
> -                                         size_t msg_len,
> -                                         unsigned int *__restrict
> msg_prio,
> -                                         const struct __timespec64
> *__restrict
> -                                         abs_timeout);
> -librt_hidden_proto (__mq_timedreceive_time64)
> +extern ssize_t __mq_timedreceive64 (mqd_t mqdes,

Just informative - the Linux kernel has following naming convention:

clock_gettime -> clock_gettime64 (the 64 is appended only for syscalls
which ends with "time").

but

futex -> futex_time64 (the "time64" is appended when there is no "time"
in the last part of the syscall name).

We can have the simpler convention - by appending "64" to syscalls in
glibc.

For the rest of the patch:
Reviewed-by: Lukasz Majewski <lukma@denx.de>

> +                                    char *__restrict msg_ptr,
> +                                    size_t msg_len,
> +                                    unsigned int *__restrict
> msg_prio,
> +                                    const struct __timespec64
> *__restrict
> +                                    abs_timeout);
> +librt_hidden_proto (__mq_timedreceive64)
>  #endif
>  #endif
> diff --git a/sysdeps/unix/sysv/linux/mq_timedreceive.c
> b/sysdeps/unix/sysv/linux/mq_timedreceive.c index
> 728a63d1ec..61c27fd8f7 100644 ---
> a/sysdeps/unix/sysv/linux/mq_timedreceive.c +++
> b/sysdeps/unix/sysv/linux/mq_timedreceive.c @@ -22,19 +22,17 @@
>  /* Receive the oldest from highest priority messages in message queue
>     MQDES, stop waiting if ABS_TIMEOUT expires.  */
>  ssize_t
> -__mq_timedreceive_time64 (mqd_t mqdes, char *__restrict msg_ptr,
> size_t msg_len,
> -                          unsigned int *__restrict msg_prio,
> -                          const struct __timespec64 *__restrict
> abs_timeout) +__mq_timedreceive64 (mqd_t mqdes, char *__restrict
> msg_ptr, size_t msg_len,
> +                     unsigned int *__restrict msg_prio,
> +                     const struct __timespec64 *__restrict
> abs_timeout) {
> -#ifdef __ASSUME_TIME64_SYSCALLS
> -# ifndef __NR_mq_timedreceive_time64
> -#  define __NR_mq_timedreceive_time64 __NR_mq_timedreceive
> -# endif
> -  return SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr,
> msg_len,
> -                         msg_prio, abs_timeout);
> -#else
> +#ifndef __NR_mq_timedreceive_time64
> +# define __NR_mq_timedreceive_time64 __NR_mq_timedreceive
> +#endif
>    int ret = SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr,
> msg_len,
> -                            msg_prio, abs_timeout);
> +			    msg_prio, abs_timeout);
> +
> +#ifndef __ASSUME_TIME64_SYSCALLS
>    if (ret == 0 || errno != ENOSYS)
>      return ret;
>  
> @@ -50,13 +48,15 @@ __mq_timedreceive_time64 (mqd_t mqdes, char
> *__restrict msg_ptr, size_t msg_len, ts32 =
> valid_timespec64_to_timespec (*abs_timeout); }
>  
> -  return SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len,
> msg_prio,
> -                         abs_timeout != NULL ? &ts32 : NULL);
> +  ret = SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len,
> msg_prio,
> +			abs_timeout != NULL ? &ts32 : NULL);
>  #endif
> +
> +  return ret;
>  }
>  
>  #if __TIMESIZE != 64
> -librt_hidden_def (__mq_timedreceive_time64)
> +librt_hidden_def (__mq_timedreceive64)
>  
>  ssize_t
>  __mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t
> msg_len, @@ -67,8 +67,8 @@ __mq_timedreceive (mqd_t mqdes, char
> *__restrict msg_ptr, size_t msg_len, if (abs_timeout != NULL)
>      ts64 = valid_timespec_to_timespec64 (*abs_timeout);
>  
> -  return __mq_timedreceive_time64 (mqdes, msg_ptr, msg_len, msg_prio,
> -                                   abs_timeout != NULL ? &ts64 :
> NULL);
> +  return __mq_timedreceive64 (mqdes, msg_ptr, msg_len, msg_prio,
> +			      abs_timeout != NULL ? &ts64 : NULL);
>  }
>  #endif
>  




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
  
Adhemerval Zanella Netto July 16, 2020, 1:10 p.m. UTC | #2
On 14/07/2020 05:06, Lukasz Majewski wrote:
> On Mon, 13 Jul 2020 14:10:07 -0300
> Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org> wrote:
> 
>> With arch-syscall.h it can now assumes the existance of either
>> __NR_mq_timedreceive or __NR_mq_timedreceive_time64.  The 32-bit
>> time_t support is now only build for !__ASSUME_TIME64_SYSCALLS.
>>
>> The internal 64-bit time_t names is also adjusted to use the
>> other y2038 symbol names.
>>
>> Checked on x86_64-linux-gnu and i686-linux-gnu (on 5.4 and on 4.15
>> kernel).
>> ---
>>  include/mqueue.h                          | 16 ++++++------
>>  sysdeps/unix/sysv/linux/mq_timedreceive.c | 32
>> +++++++++++------------ 2 files changed, 24 insertions(+), 24
>> deletions(-)
>>
>> diff --git a/include/mqueue.h b/include/mqueue.h
>> index 98e4596c22..b3ee8b7462 100644
>> --- a/include/mqueue.h
>> +++ b/include/mqueue.h
>> @@ -13,18 +13,18 @@ hidden_proto (mq_setattr)
>>  #include <struct___timespec64.h>
>>  #if __TIMESIZE == 64
>>  # define __mq_timedsend_time64 __mq_timedsend
>> -# define __mq_timedreceive_time64 __mq_timedreceive
>> +# define __mq_timedreceive64 __mq_timedreceive
>>  #else
>>  extern int __mq_timedsend_time64 (mqd_t mqdes, const char *msg_ptr,
>>                                    size_t msg_len, unsigned int
>> msg_prio, const struct __timespec64 *abs_timeout);
>>  librt_hidden_proto (__mq_timedsend_time64)
>> -extern ssize_t __mq_timedreceive_time64 (mqd_t mqdes,
>> -                                         char *__restrict msg_ptr,
>> -                                         size_t msg_len,
>> -                                         unsigned int *__restrict
>> msg_prio,
>> -                                         const struct __timespec64
>> *__restrict
>> -                                         abs_timeout);
>> -librt_hidden_proto (__mq_timedreceive_time64)
>> +extern ssize_t __mq_timedreceive64 (mqd_t mqdes,
> 
> Just informative - the Linux kernel has following naming convention:
> 
> clock_gettime -> clock_gettime64 (the 64 is appended only for syscalls
> which ends with "time").
> 
> but
> 
> futex -> futex_time64 (the "time64" is appended when there is no "time"
> in the last part of the syscall name).
> 
> We can have the simpler convention - by appending "64" to syscalls in
> glibc.

Yeah, I don't have a strong preference in fact I think it will drop this
name change.  It is a bit annoying we are using different names to
define the time64 interface, but since it would handled transparently in
the public interface it should not matter much (the only case would be
for dlopen cases, but LFS support is already hitting this).

At least for stat functions we would require to use time64 suffix since
the '64' already is used to express LFS support.


> 
> For the rest of the patch:
> Reviewed-by: Lukasz Majewski <lukma@denx.de>
> 
>> +                                    char *__restrict msg_ptr,
>> +                                    size_t msg_len,
>> +                                    unsigned int *__restrict
>> msg_prio,
>> +                                    const struct __timespec64
>> *__restrict
>> +                                    abs_timeout);
>> +librt_hidden_proto (__mq_timedreceive64)
>>  #endif
>>  #endif
>> diff --git a/sysdeps/unix/sysv/linux/mq_timedreceive.c
>> b/sysdeps/unix/sysv/linux/mq_timedreceive.c index
>> 728a63d1ec..61c27fd8f7 100644 ---
>> a/sysdeps/unix/sysv/linux/mq_timedreceive.c +++
>> b/sysdeps/unix/sysv/linux/mq_timedreceive.c @@ -22,19 +22,17 @@
>>  /* Receive the oldest from highest priority messages in message queue
>>     MQDES, stop waiting if ABS_TIMEOUT expires.  */
>>  ssize_t
>> -__mq_timedreceive_time64 (mqd_t mqdes, char *__restrict msg_ptr,
>> size_t msg_len,
>> -                          unsigned int *__restrict msg_prio,
>> -                          const struct __timespec64 *__restrict
>> abs_timeout) +__mq_timedreceive64 (mqd_t mqdes, char *__restrict
>> msg_ptr, size_t msg_len,
>> +                     unsigned int *__restrict msg_prio,
>> +                     const struct __timespec64 *__restrict
>> abs_timeout) {
>> -#ifdef __ASSUME_TIME64_SYSCALLS
>> -# ifndef __NR_mq_timedreceive_time64
>> -#  define __NR_mq_timedreceive_time64 __NR_mq_timedreceive
>> -# endif
>> -  return SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr,
>> msg_len,
>> -                         msg_prio, abs_timeout);
>> -#else
>> +#ifndef __NR_mq_timedreceive_time64
>> +# define __NR_mq_timedreceive_time64 __NR_mq_timedreceive
>> +#endif
>>    int ret = SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr,
>> msg_len,
>> -                            msg_prio, abs_timeout);
>> +			    msg_prio, abs_timeout);
>> +
>> +#ifndef __ASSUME_TIME64_SYSCALLS
>>    if (ret == 0 || errno != ENOSYS)
>>      return ret;
>>  
>> @@ -50,13 +48,15 @@ __mq_timedreceive_time64 (mqd_t mqdes, char
>> *__restrict msg_ptr, size_t msg_len, ts32 =
>> valid_timespec64_to_timespec (*abs_timeout); }
>>  
>> -  return SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len,
>> msg_prio,
>> -                         abs_timeout != NULL ? &ts32 : NULL);
>> +  ret = SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len,
>> msg_prio,
>> +			abs_timeout != NULL ? &ts32 : NULL);
>>  #endif
>> +
>> +  return ret;
>>  }
>>  
>>  #if __TIMESIZE != 64
>> -librt_hidden_def (__mq_timedreceive_time64)
>> +librt_hidden_def (__mq_timedreceive64)
>>  
>>  ssize_t
>>  __mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t
>> msg_len, @@ -67,8 +67,8 @@ __mq_timedreceive (mqd_t mqdes, char
>> *__restrict msg_ptr, size_t msg_len, if (abs_timeout != NULL)
>>      ts64 = valid_timespec_to_timespec64 (*abs_timeout);
>>  
>> -  return __mq_timedreceive_time64 (mqdes, msg_ptr, msg_len, msg_prio,
>> -                                   abs_timeout != NULL ? &ts64 :
>> NULL);
>> +  return __mq_timedreceive64 (mqdes, msg_ptr, msg_len, msg_prio,
>> +			      abs_timeout != NULL ? &ts64 : NULL);
>>  }
>>  #endif
>>  
> 
> 
> 
> 
> Best regards,
> 
> Lukasz Majewski
> 
> --
> 
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
>
  

Patch

diff --git a/include/mqueue.h b/include/mqueue.h
index 98e4596c22..b3ee8b7462 100644
--- a/include/mqueue.h
+++ b/include/mqueue.h
@@ -13,18 +13,18 @@  hidden_proto (mq_setattr)
 #include <struct___timespec64.h>
 #if __TIMESIZE == 64
 # define __mq_timedsend_time64 __mq_timedsend
-# define __mq_timedreceive_time64 __mq_timedreceive
+# define __mq_timedreceive64 __mq_timedreceive
 #else
 extern int __mq_timedsend_time64 (mqd_t mqdes, const char *msg_ptr,
                                   size_t msg_len, unsigned int msg_prio,
                                   const struct __timespec64 *abs_timeout);
 librt_hidden_proto (__mq_timedsend_time64)
-extern ssize_t __mq_timedreceive_time64 (mqd_t mqdes,
-                                         char *__restrict msg_ptr,
-                                         size_t msg_len,
-                                         unsigned int *__restrict msg_prio,
-                                         const struct __timespec64 *__restrict
-                                         abs_timeout);
-librt_hidden_proto (__mq_timedreceive_time64)
+extern ssize_t __mq_timedreceive64 (mqd_t mqdes,
+                                    char *__restrict msg_ptr,
+                                    size_t msg_len,
+                                    unsigned int *__restrict msg_prio,
+                                    const struct __timespec64 *__restrict
+                                    abs_timeout);
+librt_hidden_proto (__mq_timedreceive64)
 #endif
 #endif
diff --git a/sysdeps/unix/sysv/linux/mq_timedreceive.c b/sysdeps/unix/sysv/linux/mq_timedreceive.c
index 728a63d1ec..61c27fd8f7 100644
--- a/sysdeps/unix/sysv/linux/mq_timedreceive.c
+++ b/sysdeps/unix/sysv/linux/mq_timedreceive.c
@@ -22,19 +22,17 @@ 
 /* Receive the oldest from highest priority messages in message queue
    MQDES, stop waiting if ABS_TIMEOUT expires.  */
 ssize_t
-__mq_timedreceive_time64 (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
-                          unsigned int *__restrict msg_prio,
-                          const struct __timespec64 *__restrict abs_timeout)
+__mq_timedreceive64 (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
+                     unsigned int *__restrict msg_prio,
+                     const struct __timespec64 *__restrict abs_timeout)
 {
-#ifdef __ASSUME_TIME64_SYSCALLS
-# ifndef __NR_mq_timedreceive_time64
-#  define __NR_mq_timedreceive_time64 __NR_mq_timedreceive
-# endif
-  return SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr, msg_len,
-                         msg_prio, abs_timeout);
-#else
+#ifndef __NR_mq_timedreceive_time64
+# define __NR_mq_timedreceive_time64 __NR_mq_timedreceive
+#endif
   int ret = SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr, msg_len,
-                            msg_prio, abs_timeout);
+			    msg_prio, abs_timeout);
+
+#ifndef __ASSUME_TIME64_SYSCALLS
   if (ret == 0 || errno != ENOSYS)
     return ret;
 
@@ -50,13 +48,15 @@  __mq_timedreceive_time64 (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
       ts32 = valid_timespec64_to_timespec (*abs_timeout);
     }
 
-  return SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len, msg_prio,
-                         abs_timeout != NULL ? &ts32 : NULL);
+  ret = SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len, msg_prio,
+			abs_timeout != NULL ? &ts32 : NULL);
 #endif
+
+  return ret;
 }
 
 #if __TIMESIZE != 64
-librt_hidden_def (__mq_timedreceive_time64)
+librt_hidden_def (__mq_timedreceive64)
 
 ssize_t
 __mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
@@ -67,8 +67,8 @@  __mq_timedreceive (mqd_t mqdes, char *__restrict msg_ptr, size_t msg_len,
   if (abs_timeout != NULL)
     ts64 = valid_timespec_to_timespec64 (*abs_timeout);
 
-  return __mq_timedreceive_time64 (mqdes, msg_ptr, msg_len, msg_prio,
-                                   abs_timeout != NULL ? &ts64 : NULL);
+  return __mq_timedreceive64 (mqdes, msg_ptr, msg_len, msg_prio,
+			      abs_timeout != NULL ? &ts64 : NULL);
 }
 #endif