Lines Matching refs:mutex

548 ntsync_mutex_can_lock(struct ntsync_obj_mutex *mutex, uint32_t nwa_owner)  in ntsync_mutex_can_lock()  argument
550 return (mutex->a.owner == 0 || in ntsync_mutex_can_lock()
551 (mutex->a.owner == nwa_owner && mutex->a.count < UINT32_MAX) || in ntsync_mutex_can_lock()
552 mutex->abandoned); in ntsync_mutex_can_lock()
559 struct ntsync_obj_mutex *mutex; in ntsync_mutex_is_signaled() local
563 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_is_signaled()
564 return (ntsync_mutex_can_lock(mutex, state->nwa->owner)); in ntsync_mutex_is_signaled()
571 struct ntsync_obj_mutex *mutex; in ntsync_mutex_consume() local
575 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_consume()
576 MPASS(ntsync_mutex_can_lock(mutex, state->nwa->owner)); in ntsync_mutex_consume()
581 if (mutex->a.owner == 0 || mutex->abandoned) in ntsync_mutex_consume()
582 mutex->a.count = 1; in ntsync_mutex_consume()
584 mutex->a.count++; in ntsync_mutex_consume()
585 mutex->a.owner = state->nwa->owner; in ntsync_mutex_consume()
586 if (mutex->abandoned && state->error == 0) in ntsync_mutex_consume()
588 mutex->abandoned = false; in ntsync_mutex_consume()
595 struct ntsync_obj_mutex *mutex; in ntsync_mutex_prepare() local
599 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_prepare()
600 if (!ntsync_mutex_can_lock(mutex, state->nwa->owner)) in ntsync_mutex_prepare()
607 mutex->a1 = mutex->a; in ntsync_mutex_prepare()
608 if (mutex->a.owner == 0 || mutex->abandoned) in ntsync_mutex_prepare()
609 mutex->a1.count = 1; in ntsync_mutex_prepare()
611 mutex->a1.count++; in ntsync_mutex_prepare()
612 mutex->a1.owner = state->nwa->owner; in ntsync_mutex_prepare()
620 struct ntsync_obj_mutex *mutex; in ntsync_mutex_commit() local
624 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_commit()
625 mutex->a = mutex->a1; in ntsync_mutex_commit()
626 if (mutex->abandoned) in ntsync_mutex_commit()
628 mutex->abandoned = false; in ntsync_mutex_commit()
640 struct ntsync_obj_mutex *mutex; in ntsync_mutex_close() local
642 mutex = fp->f_data; in ntsync_mutex_close()
643 ntsync_close_obj(&mutex->obj, td); in ntsync_mutex_close()
644 free(mutex, M_NTSYNC); in ntsync_mutex_close()
653 struct ntsync_obj_mutex *mutex; in ntsync_mutex_unlock() local
661 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_unlock()
667 } else if (a->owner != mutex->a.owner) { in ntsync_mutex_unlock()
671 prev = mutex->a.count; in ntsync_mutex_unlock()
672 MPASS(mutex->a.count > 0); in ntsync_mutex_unlock()
673 mutex->a.count--; in ntsync_mutex_unlock()
675 if (mutex->a.count == 0) { in ntsync_mutex_unlock()
676 mutex->a.owner = 0; in ntsync_mutex_unlock()
688 struct ntsync_obj_mutex *mutex; in ntsync_mutex_kill() local
695 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_kill()
701 } else if (mutex->a.owner != val) { in ntsync_mutex_kill()
705 mutex->a.owner = 0; in ntsync_mutex_kill()
706 mutex->a.count = 0; in ntsync_mutex_kill()
707 mutex->abandoned = true; in ntsync_mutex_kill()
719 struct ntsync_obj_mutex *mutex; in ntsync_mutex_read() local
727 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_read()
732 *a = mutex->a; in ntsync_mutex_read()
733 if (mutex->abandoned) in ntsync_mutex_read()
775 struct ntsync_obj_mutex *mutex; in ntsync_mutex_stat() local
780 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_stat()
785 sbp->st_size = mutex->a.owner; in ntsync_mutex_stat()
786 sbp->st_nlink = mutex->a.count; in ntsync_mutex_stat()
796 struct ntsync_obj_mutex *mutex; in ntsync_mutex_fill_kinfo() local
801 mutex = OBJ_TO_MUTEX(obj); in ntsync_mutex_fill_kinfo()
807 mutex->a.owner; in ntsync_mutex_fill_kinfo()
809 mutex->a.count; in ntsync_mutex_fill_kinfo()
833 struct ntsync_obj_mutex *mutex; in ntsync_create_mutex() local
840 mutex = malloc(sizeof(*mutex), M_NTSYNC, M_WAITOK | M_ZERO); in ntsync_create_mutex()
841 mutex->obj.type = NTSYNC_OBJ_MUTEX; in ntsync_create_mutex()
842 mutex->obj.is_signaled = ntsync_mutex_is_signaled; in ntsync_create_mutex()
843 mutex->obj.consume = ntsync_mutex_consume; in ntsync_create_mutex()
844 mutex->obj.prepare = ntsync_mutex_prepare; in ntsync_create_mutex()
845 mutex->obj.commit = ntsync_mutex_commit; in ntsync_create_mutex()
846 mutex->obj.post_commit = ntsync_mutex_post_commit; in ntsync_create_mutex()
847 mutex->a = *args; in ntsync_create_mutex()
848 mutex->abandoned = false; in ntsync_create_mutex()
850 error = ntsync_create_obj(&mutex->obj, &ntsync_mutex_fops, priv, td); in ntsync_create_mutex()
852 free(mutex, M_NTSYNC); in ntsync_create_mutex()