Lines Matching refs:sem

59 		} sem;  member
236 return !!obj->u.sem.count; in is_signaled()
284 obj->u.sem.count--; in try_wake_all()
319 static void try_wake_any_sem(struct ntsync_obj *sem) in try_wake_any_sem() argument
323 ntsync_assert_held(sem); in try_wake_any_sem()
324 lockdep_assert(sem->type == NTSYNC_TYPE_SEM); in try_wake_any_sem()
326 list_for_each_entry(entry, &sem->any_waiters, node) { in try_wake_any_sem()
330 if (!sem->u.sem.count) in try_wake_any_sem()
334 sem->u.sem.count--; in try_wake_any_sem()
393 static int release_sem_state(struct ntsync_obj *sem, __u32 count) in release_sem_state() argument
397 ntsync_assert_held(sem); in release_sem_state()
399 if (check_add_overflow(sem->u.sem.count, count, &sum) || in release_sem_state()
400 sum > sem->u.sem.max) in release_sem_state()
403 sem->u.sem.count = sum; in release_sem_state()
407 static int ntsync_sem_release(struct ntsync_obj *sem, void __user *argp) in ntsync_sem_release() argument
409 struct ntsync_device *dev = sem->dev; in ntsync_sem_release()
419 if (sem->type != NTSYNC_TYPE_SEM) in ntsync_sem_release()
422 all = ntsync_lock_obj(dev, sem); in ntsync_sem_release()
424 prev_count = sem->u.sem.count; in ntsync_sem_release()
425 ret = release_sem_state(sem, args); in ntsync_sem_release()
428 try_wake_all_obj(dev, sem); in ntsync_sem_release()
429 try_wake_any_sem(sem); in ntsync_sem_release()
432 ntsync_unlock_obj(dev, sem, all); in ntsync_sem_release()
586 static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp) in ntsync_sem_read() argument
589 struct ntsync_device *dev = sem->dev; in ntsync_sem_read()
593 if (sem->type != NTSYNC_TYPE_SEM) in ntsync_sem_read()
596 all = ntsync_lock_obj(dev, sem); in ntsync_sem_read()
598 args.count = sem->u.sem.count; in ntsync_sem_read()
599 args.max = sem->u.sem.max; in ntsync_sem_read()
601 ntsync_unlock_obj(dev, sem, all); in ntsync_sem_read()
744 struct ntsync_obj *sem; in ntsync_create_sem() local
753 sem = ntsync_alloc_obj(dev, NTSYNC_TYPE_SEM); in ntsync_create_sem()
754 if (!sem) in ntsync_create_sem()
756 sem->u.sem.count = args.count; in ntsync_create_sem()
757 sem->u.sem.max = args.max; in ntsync_create_sem()
758 fd = ntsync_obj_get_fd(sem); in ntsync_create_sem()
760 ntsync_free_obj(sem); in ntsync_create_sem()