Lines Matching defs:sem
60 } sem;
237 return !!obj->u.sem.count;
285 obj->u.sem.count--;
320 static void try_wake_any_sem(struct ntsync_obj *sem)
324 ntsync_assert_held(sem);
325 lockdep_assert(sem->type == NTSYNC_TYPE_SEM);
327 list_for_each_entry(entry, &sem->any_waiters, node) {
331 if (!sem->u.sem.count)
335 sem->u.sem.count--;
394 static int release_sem_state(struct ntsync_obj *sem, __u32 count)
398 ntsync_assert_held(sem);
400 if (check_add_overflow(sem->u.sem.count, count, &sum) ||
401 sum > sem->u.sem.max)
404 sem->u.sem.count = sum;
408 static int ntsync_sem_release(struct ntsync_obj *sem, void __user *argp)
410 struct ntsync_device *dev = sem->dev;
420 if (sem->type != NTSYNC_TYPE_SEM)
423 all = ntsync_lock_obj(dev, sem);
425 prev_count = sem->u.sem.count;
426 ret = release_sem_state(sem, args);
429 try_wake_all_obj(dev, sem);
430 try_wake_any_sem(sem);
433 ntsync_unlock_obj(dev, sem, all);
587 static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp)
590 struct ntsync_device *dev = sem->dev;
594 if (sem->type != NTSYNC_TYPE_SEM)
597 all = ntsync_lock_obj(dev, sem);
599 args.count = sem->u.sem.count;
600 args.max = sem->u.sem.max;
602 ntsync_unlock_obj(dev, sem, all);
736 struct ntsync_obj *sem;
745 sem = ntsync_alloc_obj(dev, NTSYNC_TYPE_SEM);
746 if (!sem)
748 sem->u.sem.count = args.count;
749 sem->u.sem.max = args.max;
750 fd = ntsync_obj_get_fd(sem);
752 ntsync_free_obj(sem);