Lines Matching refs:ns
169 #define sem_ids(ns) ((ns)->ids[IPC_SEM_IDS]) argument
224 void sem_init_ns(struct ipc_namespace *ns) in sem_init_ns() argument
226 ns->sc_semmsl = SEMMSL; in sem_init_ns()
227 ns->sc_semmns = SEMMNS; in sem_init_ns()
228 ns->sc_semopm = SEMOPM; in sem_init_ns()
229 ns->sc_semmni = SEMMNI; in sem_init_ns()
230 ns->used_sems = 0; in sem_init_ns()
231 ipc_init_ids(&ns->ids[IPC_SEM_IDS]); in sem_init_ns()
235 void sem_exit_ns(struct ipc_namespace *ns) in sem_exit_ns() argument
237 free_ipcs(ns, &sem_ids(ns), freeary); in sem_exit_ns()
238 idr_destroy(&ns->ids[IPC_SEM_IDS].ipcs_idr); in sem_exit_ns()
239 rhashtable_destroy(&ns->ids[IPC_SEM_IDS].key_ht); in sem_exit_ns()
456 static inline struct sem_array *sem_obtain_object(struct ipc_namespace *ns, int id) in sem_obtain_object() argument
458 struct kern_ipc_perm *ipcp = ipc_obtain_object_idr(&sem_ids(ns), id); in sem_obtain_object()
466 static inline struct sem_array *sem_obtain_object_check(struct ipc_namespace *ns, in sem_obtain_object_check() argument
469 struct kern_ipc_perm *ipcp = ipc_obtain_object_check(&sem_ids(ns), id); in sem_obtain_object_check()
483 static inline void sem_rmid(struct ipc_namespace *ns, struct sem_array *s) in sem_rmid() argument
485 ipc_rmid(&sem_ids(ns), &s->sem_perm); in sem_rmid()
509 static int newary(struct ipc_namespace *ns, struct ipc_params *params) in newary() argument
520 if (ns->used_sems + nsems > ns->sc_semmns) in newary()
552 retval = ipc_addid(&sem_ids(ns), &sma->sem_perm, ns->sc_semmni); in newary()
557 ns->used_sems += nsems; in newary()
583 struct ipc_namespace *ns; in ksys_semget() local
591 ns = current->nsproxy->ipc_ns; in ksys_semget()
593 if (nsems < 0 || nsems > ns->sc_semmsl) in ksys_semget()
600 return ipcget(ns, &sem_ids(ns), &sem_ops, &sem_params); in ksys_semget()
1124 static void freeary(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp) in freeary() argument
1167 sem_rmid(ns, sma); in freeary()
1172 ns->used_sems -= sma->sem_nsems; in freeary()
1215 static int semctl_stat(struct ipc_namespace *ns, int semid, in semctl_stat() argument
1226 sma = sem_obtain_object(ns, semid); in semctl_stat()
1232 sma = sem_obtain_object_check(ns, semid); in semctl_stat()
1244 if (ipcperms(ns, &sma->sem_perm, S_IRUGO)) in semctl_stat()
1289 static int semctl_info(struct ipc_namespace *ns, int semid, in semctl_info() argument
1301 seminfo.semmni = ns->sc_semmni; in semctl_info()
1302 seminfo.semmns = ns->sc_semmns; in semctl_info()
1303 seminfo.semmsl = ns->sc_semmsl; in semctl_info()
1304 seminfo.semopm = ns->sc_semopm; in semctl_info()
1309 down_read(&sem_ids(ns).rwsem); in semctl_info()
1311 seminfo.semusz = sem_ids(ns).in_use; in semctl_info()
1312 seminfo.semaem = ns->used_sems; in semctl_info()
1317 max_idx = ipc_get_maxidx(&sem_ids(ns)); in semctl_info()
1318 up_read(&sem_ids(ns).rwsem); in semctl_info()
1324 static int semctl_setval(struct ipc_namespace *ns, int semid, int semnum, in semctl_setval() argument
1337 sma = sem_obtain_object_check(ns, semid); in semctl_setval()
1349 if (ipcperms(ns, &sma->sem_perm, S_IWUGO)) { in semctl_setval()
1386 static int semctl_main(struct ipc_namespace *ns, int semid, int semnum, in semctl_main() argument
1397 sma = sem_obtain_object_check(ns, semid); in semctl_main()
1406 if (ipcperms(ns, &sma->sem_perm, cmd == SETALL ? S_IWUGO : S_IRUGO)) in semctl_main()
1583 static int semctl_down(struct ipc_namespace *ns, int semid, in semctl_down() argument
1590 down_write(&sem_ids(ns).rwsem); in semctl_down()
1593 ipcp = ipcctl_obtain_check(ns, &sem_ids(ns), semid, cmd, in semctl_down()
1610 freeary(ns, ipcp); in semctl_down()
1629 up_write(&sem_ids(ns).rwsem); in semctl_down()
1635 struct ipc_namespace *ns; in ksys_semctl() local
1643 ns = current->nsproxy->ipc_ns; in ksys_semctl()
1648 return semctl_info(ns, semid, cmd, p); in ksys_semctl()
1652 err = semctl_stat(ns, semid, cmd, &semid64); in ksys_semctl()
1664 return semctl_main(ns, semid, semnum, cmd, p); in ksys_semctl()
1674 return semctl_setval(ns, semid, semnum, val); in ksys_semctl()
1681 return semctl_down(ns, semid, cmd, &semid64); in ksys_semctl()
1759 struct ipc_namespace *ns; in compat_ksys_semctl() local
1763 ns = current->nsproxy->ipc_ns; in compat_ksys_semctl()
1771 return semctl_info(ns, semid, cmd, p); in compat_ksys_semctl()
1775 err = semctl_stat(ns, semid, cmd, &semid64); in compat_ksys_semctl()
1787 return semctl_main(ns, semid, semnum, cmd, p); in compat_ksys_semctl()
1789 return semctl_setval(ns, semid, semnum, arg); in compat_ksys_semctl()
1795 return semctl_down(ns, semid, cmd, &semid64); in compat_ksys_semctl()
1888 static struct sem_undo *find_alloc_undo(struct ipc_namespace *ns, int semid) in find_alloc_undo() argument
1908 sma = sem_obtain_object_check(ns, semid); in find_alloc_undo()
1978 struct ipc_namespace *ns; in do_semtimedop() local
1980 ns = current->nsproxy->ipc_ns; in do_semtimedop()
1984 if (nsops > ns->sc_semopm) in do_semtimedop()
2031 un = find_alloc_undo(ns, semid); in do_semtimedop()
2041 sma = sem_obtain_object_check(ns, semid); in do_semtimedop()
2055 if (ipcperms(ns, &sma->sem_perm, alter ? S_IWUGO : S_IRUGO)) { in do_semtimedop()