This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] [powerpc] Use DIRECT_SYSVIPC_SYSCALLS
- From: Paul Clarke <pc at us dot ibm dot com>
- To: Florian Weimer <fweimer at redhat dot com>
- Cc: libc-alpha at sourceware dot org, tuliom at ascii dot art dot br, Arnd Bergmann <arnd at arndb dot de>, Michael Ellerman <mpe at ellerman dot id dot au>
- Date: Thu, 10 Oct 2019 11:18:01 -0500
- Subject: Re: [PATCH] [powerpc] Use DIRECT_SYSVIPC_SYSCALLS
- References: <1570663013-10269-1-git-send-email-pc@us.ibm.com> <875zkxt9pk.fsf@oldenburg2.str.redhat.com>
On 10/10/19 1:07 AM, Florian Weimer wrote:
>> diff --git a/sysdeps/unix/sysv/linux/semop.c b/sysdeps/unix/sysv/linux/semop.c
>> index 687fdcb..e15bd5e 100644
>> --- a/sysdeps/unix/sysv/linux/semop.c
>> +++ b/sysdeps/unix/sysv/linux/semop.c
>> @@ -26,7 +26,7 @@
>> int
>> semop (int semid, struct sembuf *sops, size_t nsops)
>> {
>> -#ifdef __ASSUME_DIRECT_SYSVIPC_SYSCALLS
>> +#if defined (__ASSUME_DIRECT_SYSVIPC_SYSCALLS) && defined (__NR_semop)
>> return INLINE_SYSCALL_CALL (semop, semid, sops, nsops);
>> #else
>> return INLINE_SYSCALL_CALL (ipc, IPCOP_semop, semid, nsops, 0, sops);
>
> Sorry, but I think this is wrong: If a future kernel version defines
> __NR_semop, we suddenly build glibc in such a way that it is
> incompatible with kernel 5.0 on POWER (assuming that the user requests
> the 5.0 baseline).
This would present a problem for POWER only when __ASSUME_DIRECT_SYSVIPC_SYSCALLS is set. This is only set (or, not unset) in another part of this same patch and only when __LINUX_KERNEL_VERSION >= 0x050000 (that I believe will come only when "--enable-kernel=5.0.0" is passed to configure). Is that not sufficient? (I understood this to be sufficient based on Joseph's comments in [1].)
> I think the best way forward here is to fix the kernel to provide the
> semop system call on POWER, and change __ASSUME_DIRECT_SYSVIPC_SYSCALLS
> so that it requires that kernel version as the minimum on POWER.
The same historical thread referenced above started with a patch [2] from 2015 to realize the same effect. In that thread, Michael Ellerman and Arnd Bergman discuss reverting the original support patches from Linux 4.4, which don't appear again, it seems, until Linux 5.0. But, it seems that "semop" was not included in that patchset (Linux kernel commit 0d6040d468173). Is that expected, Arnd?
> If you do not want to do that, maybe the right solution is a sysdeps
> override for POWER, unconditionally using IPCOP_semop for now, with a
> comment why this is necessary.
So, something like this, in sysdeps/unix/sysv/linux/semop.c?
--
+/* [powerpc64 only] While most SysV IPC syscalls are implemented as direct
+ syscalls on powerpc64, semop is not. */
+#if defined (__ASSUME_DIRECT_SYSVIPC_SYSCALLS) && !defined (__powerpc64__)
return INLINE_SYSCALL_CALL (semop, semid, sops, nsops);
#else
return INLINE_SYSCALL_CALL (ipc, IPCOP_semop, semid, nsops, 0, sops);
+#endif
--
[1] https://sourceware.org/ml/libc-alpha/2015-12/msg00065.html
[2] https://sourceware.org/ml/libc-alpha/2015-12/msg00051.html
PC