提交 4acfc287 编写于 作者: S Szabolcs Nagy 提交者: Rich Felker

ipc: prefer SYS_ipc when it is defined

Linux v5.1 introduced ipc syscalls on targets where previously only
SYS_ipc was available, change the logic such that the ipc code keeps
using SYS_ipc which works backward compatibly on older kernels.

This changes behaviour on microblaze which had both mechanisms, now
SYS_ipc will be used instead of separate syscalls.
上级 b574de5b
...@@ -17,7 +17,7 @@ int msgctl(int q, int cmd, struct msqid_ds *buf) ...@@ -17,7 +17,7 @@ int msgctl(int q, int cmd, struct msqid_ds *buf)
buf = &tmp; buf = &tmp;
} }
#endif #endif
#ifdef SYS_msgctl #ifndef SYS_ipc
int r = __syscall(SYS_msgctl, q, cmd | IPC_64, buf); int r = __syscall(SYS_msgctl, q, cmd | IPC_64, buf);
#else #else
int r = __syscall(SYS_ipc, IPCOP_msgctl, q, cmd | IPC_64, 0, buf, 0); int r = __syscall(SYS_ipc, IPCOP_msgctl, q, cmd | IPC_64, 0, buf, 0);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
int msgget(key_t k, int flag) int msgget(key_t k, int flag)
{ {
#ifdef SYS_msgget #ifndef SYS_ipc
return syscall(SYS_msgget, k, flag); return syscall(SYS_msgget, k, flag);
#else #else
return syscall(SYS_ipc, IPCOP_msgget, k, flag); return syscall(SYS_ipc, IPCOP_msgget, k, flag);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
ssize_t msgrcv(int q, void *m, size_t len, long type, int flag) ssize_t msgrcv(int q, void *m, size_t len, long type, int flag)
{ {
#ifdef SYS_msgrcv #ifndef SYS_ipc
return syscall_cp(SYS_msgrcv, q, m, len, type, flag); return syscall_cp(SYS_msgrcv, q, m, len, type, flag);
#else #else
return syscall_cp(SYS_ipc, IPCOP_msgrcv, q, len, flag, ((long[]){ (long)m, type })); return syscall_cp(SYS_ipc, IPCOP_msgrcv, q, len, flag, ((long[]){ (long)m, type }));
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
int msgsnd(int q, const void *m, size_t len, int flag) int msgsnd(int q, const void *m, size_t len, int flag)
{ {
#ifdef SYS_msgsnd #ifndef SYS_ipc
return syscall_cp(SYS_msgsnd, q, m, len, flag); return syscall_cp(SYS_msgsnd, q, m, len, flag);
#else #else
return syscall_cp(SYS_ipc, IPCOP_msgsnd, q, len, flag, m); return syscall_cp(SYS_ipc, IPCOP_msgsnd, q, len, flag, m);
......
...@@ -33,7 +33,7 @@ int semctl(int id, int num, int cmd, ...) ...@@ -33,7 +33,7 @@ int semctl(int id, int num, int cmd, ...)
arg.buf = &tmp; arg.buf = &tmp;
} }
#endif #endif
#ifdef SYS_semctl #ifndef SYS_ipc
int r = __syscall(SYS_semctl, id, num, cmd | IPC_64, arg.buf); int r = __syscall(SYS_semctl, id, num, cmd | IPC_64, arg.buf);
#else #else
int r = __syscall(SYS_ipc, IPCOP_semctl, id, num, cmd | IPC_64, &arg.buf); int r = __syscall(SYS_ipc, IPCOP_semctl, id, num, cmd | IPC_64, &arg.buf);
......
...@@ -11,7 +11,7 @@ int semget(key_t key, int n, int fl) ...@@ -11,7 +11,7 @@ int semget(key_t key, int n, int fl)
* n fits in the correct (per POSIX) userspace type, so * n fits in the correct (per POSIX) userspace type, so
* we have to check here. */ * we have to check here. */
if (n > USHRT_MAX) return __syscall_ret(-EINVAL); if (n > USHRT_MAX) return __syscall_ret(-EINVAL);
#ifdef SYS_semget #ifndef SYS_ipc
return syscall(SYS_semget, key, n, fl); return syscall(SYS_semget, key, n, fl);
#else #else
return syscall(SYS_ipc, IPCOP_semget, key, n, fl); return syscall(SYS_ipc, IPCOP_semget, key, n, fl);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
int semop(int id, struct sembuf *buf, size_t n) int semop(int id, struct sembuf *buf, size_t n)
{ {
#ifdef SYS_semop #ifndef SYS_ipc
return syscall(SYS_semop, id, buf, n); return syscall(SYS_semop, id, buf, n);
#else #else
return syscall(SYS_ipc, IPCOP_semop, id, n, 0, buf); return syscall(SYS_ipc, IPCOP_semop, id, n, 0, buf);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
int semtimedop(int id, struct sembuf *buf, size_t n, const struct timespec *ts) int semtimedop(int id, struct sembuf *buf, size_t n, const struct timespec *ts)
{ {
#ifdef SYS_semtimedop #ifndef SYS_ipc
return syscall(SYS_semtimedop, id, buf, n, ts); return syscall(SYS_semtimedop, id, buf, n, ts);
#else #else
return syscall(SYS_ipc, IPCOP_semtimedop, id, n, 0, buf, ts); return syscall(SYS_ipc, IPCOP_semtimedop, id, n, 0, buf, ts);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include "syscall.h" #include "syscall.h"
#include "ipc.h" #include "ipc.h"
#ifdef SYS_shmat #ifndef SYS_ipc
void *shmat(int id, const void *addr, int flag) void *shmat(int id, const void *addr, int flag)
{ {
return (void *)syscall(SYS_shmat, id, addr, flag); return (void *)syscall(SYS_shmat, id, addr, flag);
......
...@@ -17,7 +17,7 @@ int shmctl(int id, int cmd, struct shmid_ds *buf) ...@@ -17,7 +17,7 @@ int shmctl(int id, int cmd, struct shmid_ds *buf)
buf = &tmp; buf = &tmp;
} }
#endif #endif
#ifdef SYS_shmctl #ifndef SYS_ipc
int r = __syscall(SYS_shmctl, id, cmd | IPC_64, buf); int r = __syscall(SYS_shmctl, id, cmd | IPC_64, buf);
#else #else
int r = __syscall(SYS_ipc, IPCOP_shmctl, id, cmd | IPC_64, 0, buf, 0); int r = __syscall(SYS_ipc, IPCOP_shmctl, id, cmd | IPC_64, 0, buf, 0);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
int shmdt(const void *addr) int shmdt(const void *addr)
{ {
#ifdef SYS_shmdt #ifndef SYS_ipc
return syscall(SYS_shmdt, addr); return syscall(SYS_shmdt, addr);
#else #else
return syscall(SYS_ipc, IPCOP_shmdt, 0, 0, 0, addr); return syscall(SYS_ipc, IPCOP_shmdt, 0, 0, 0, addr);
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
int shmget(key_t key, size_t size, int flag) int shmget(key_t key, size_t size, int flag)
{ {
if (size > PTRDIFF_MAX) size = SIZE_MAX; if (size > PTRDIFF_MAX) size = SIZE_MAX;
#ifdef SYS_shmget #ifndef SYS_ipc
return syscall(SYS_shmget, key, size, flag); return syscall(SYS_shmget, key, size, flag);
#else #else
return syscall(SYS_ipc, IPCOP_shmget, key, size, flag); return syscall(SYS_ipc, IPCOP_shmget, key, size, flag);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册