summaryrefslogtreecommitdiffstats
path: root/ipc/util.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-01-07 02:33:00 +0000
committer <ralf@linux-mips.org>1997-01-07 02:33:00 +0000
commitbeb116954b9b7f3bb56412b2494b562f02b864b1 (patch)
tree120e997879884e1b9d93b265221b939d2ef1ade1 /ipc/util.c
parent908d4681a1dc3792ecafbe64265783a86c4cccb6 (diff)
Import of Linux/MIPS 2.1.14
Diffstat (limited to 'ipc/util.c')
-rw-r--r--ipc/util.c175
1 files changed, 63 insertions, 112 deletions
diff --git a/ipc/util.c b/ipc/util.c
index 87c6c28ea..e81afc36f 100644
--- a/ipc/util.c
+++ b/ipc/util.c
@@ -5,7 +5,6 @@
#include <linux/config.h>
#include <linux/errno.h>
-#include <asm/segment.h>
#include <linux/sched.h>
#include <linux/mm.h>
#include <linux/sem.h>
@@ -13,25 +12,11 @@
#include <linux/shm.h>
#include <linux/stat.h>
-void ipc_init (void);
-asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr, long fifth);
+#include <asm/uaccess.h>
-#ifdef CONFIG_SYSVIPC
+#if defined(CONFIG_SYSVIPC) || defined(CONFIG_KERNELD)
-int ipcperms (struct ipc_perm *ipcp, short flag);
extern void sem_init (void), msg_init (void), shm_init (void);
-extern int sys_semget (key_t key, int nsems, int semflg);
-extern int sys_semop (int semid, struct sembuf *sops, unsigned nsops);
-extern int sys_semctl (int semid, int semnum, int cmd, union semun arg);
-extern int sys_msgget (key_t key, int msgflg);
-extern int sys_msgsnd (int msqid, struct msgbuf *msgp, int msgsz, int msgflg);
-extern int sys_msgrcv (int msqid, struct msgbuf *msgp, int msgsz, long msgtyp,
- int msgflg);
-extern int sys_msgctl (int msqid, int cmd, struct msqid_ds *buf);
-extern int sys_shmget (key_t key, int size, int flag);
-extern int sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *addr);
-extern int sys_shmdt (char *shmaddr);
-extern int sys_shmctl (int shmid, int cmd, struct shmid_ds *buf);
void ipc_init (void)
{
@@ -63,112 +48,78 @@ int ipcperms (struct ipc_perm *ipcp, short flag)
return 0;
}
-asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr, long fifth)
-{
- int version;
-
- version = call >> 16; /* hack for backward compatibility */
- call &= 0xffff;
-
- if (call <= SEMCTL)
- switch (call) {
- case SEMOP:
- return sys_semop (first, (struct sembuf *)ptr, second);
- case SEMGET:
- return sys_semget (first, second, third);
- case SEMCTL: {
- union semun fourth;
- int err;
- if (!ptr)
- return -EINVAL;
- if ((err = verify_area (VERIFY_READ, ptr, sizeof(long))))
- return err;
- fourth.__pad = (void *) get_fs_long(ptr);
- return sys_semctl (first, second, third, fourth);
- }
- default:
- return -EINVAL;
- }
- if (call <= MSGCTL)
- switch (call) {
- case MSGSND:
- return sys_msgsnd (first, (struct msgbuf *) ptr,
- second, third);
- case MSGRCV:
- switch (version) {
- case 0: {
- struct ipc_kludge tmp;
- int err;
- if (!ptr)
- return -EINVAL;
- if ((err = verify_area (VERIFY_READ, ptr, sizeof(tmp))))
- return err;
- memcpy_fromfs (&tmp,(struct ipc_kludge *) ptr,
- sizeof (tmp));
- return sys_msgrcv (first, tmp.msgp, second, tmp.msgtyp, third);
- }
- case 1: default:
- return sys_msgrcv (first, (struct msgbuf *) ptr, second, fifth, third);
- }
- case MSGGET:
- return sys_msgget ((key_t) first, second);
- case MSGCTL:
- return sys_msgctl (first, second, (struct msqid_ds *) ptr);
- default:
- return -EINVAL;
- }
- if (call <= SHMCTL)
- switch (call) {
- case SHMAT:
- switch (version) {
- case 0: default: {
- ulong raddr;
- int err;
- if ((err = verify_area(VERIFY_WRITE, (ulong*) third, sizeof(ulong))))
- return err;
- err = sys_shmat (first, (char *) ptr, second, &raddr);
- if (err)
- return err;
- put_fs_long (raddr, (ulong *) third);
- return 0;
- }
- case 1: /* iBCS2 emulator entry point */
- if (get_fs() != get_ds())
- return -EINVAL;
- return sys_shmat (first, (char *) ptr, second, (ulong *) third);
- }
- case SHMDT:
- return sys_shmdt ((char *)ptr);
- case SHMGET:
- return sys_shmget (first, second, third);
- case SHMCTL:
- return sys_shmctl (first, second, (struct shmid_ds *) ptr);
- default:
- return -EINVAL;
- }
- return -EINVAL;
-}
-
-#else /* not CONFIG_SYSVIPC */
-
-asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr, long fifth)
-{
- return -ENOSYS;
-}
+#else
+/*
+ * Dummy functions when SYSV IPC isn't configured
+ */
void sem_exit (void)
{
return;
}
-int shm_swap (int prio)
+int shm_swap (int prio, unsigned long limit)
{
return 0;
}
-void shm_no_page (unsigned long *ptent)
+asmlinkage int sys_semget (key_t key, int nsems, int semflg)
{
- return;
+ return -ENOSYS;
+}
+
+asmlinkage int sys_semop (int semid, struct sembuf *sops, unsigned nsops)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_semctl (int semid, int semnum, int cmd, union semun arg)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_msgget (key_t key, int msgflg)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_msgsnd (int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_msgrcv (int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp,
+ int msgflg)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_msgctl (int msqid, int cmd, struct msqid_ds *buf)
+{
+ return -ENOSYS;
}
+asmlinkage int sys_shmget (key_t key, int size, int flag)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_shmat (int shmid, char *shmaddr, int shmflg, ulong *addr)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_shmdt (char *shmaddr)
+{
+ return -ENOSYS;
+}
+
+asmlinkage int sys_shmctl (int shmid, int cmd, struct shmid_ds *buf)
+{
+ return -ENOSYS;
+}
+
+void kerneld_exit(void)
+{
+}
#endif /* CONFIG_SYSVIPC */