diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
commit | beb116954b9b7f3bb56412b2494b562f02b864b1 (patch) | |
tree | 120e997879884e1b9d93b265221b939d2ef1ade1 /ipc/util.c | |
parent | 908d4681a1dc3792ecafbe64265783a86c4cccb6 (diff) |
Import of Linux/MIPS 2.1.14
Diffstat (limited to 'ipc/util.c')
-rw-r--r-- | ipc/util.c | 175 |
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 */ |