sem 58 kern/test/malloctest.c struct semaphore *sem = sm;
sem 67 kern/test/malloctest.c if (sem) {
sem 70 kern/test/malloctest.c V(sem);
sem 88 kern/test/malloctest.c if (sem) {
sem 89 kern/test/malloctest.c V(sem);
sem 109 kern/test/malloctest.c struct semaphore *sem;
sem 115 kern/test/malloctest.c sem = sem_create("mallocstress", 0);
sem 116 kern/test/malloctest.c if (sem == NULL) {
sem 124 kern/test/malloctest.c mallocthread, sem, i);
sem 132 kern/test/malloctest.c P(sem);
sem 135 kern/test/malloctest.c sem_destroy(sem);
sem 50 kern/thread/synch.c struct semaphore *sem;
sem 54 kern/thread/synch.c sem = kmalloc(sizeof(struct semaphore));
sem 55 kern/thread/synch.c if (sem == NULL) {
sem 59 kern/thread/synch.c sem->sem_name = kstrdup(name);
sem 60 kern/thread/synch.c if (sem->sem_name == NULL) {
sem 61 kern/thread/synch.c kfree(sem);
sem 65 kern/thread/synch.c sem->sem_wchan = wchan_create(sem->sem_name);
sem 66 kern/thread/synch.c if (sem->sem_wchan == NULL) {
sem 67 kern/thread/synch.c kfree(sem->sem_name);
sem 68 kern/thread/synch.c kfree(sem);
sem 72 kern/thread/synch.c spinlock_init(&sem->sem_lock);
sem 73 kern/thread/synch.c sem->sem_count = initial_count;
sem 75 kern/thread/synch.c return sem;
sem 79 kern/thread/synch.c sem_destroy(struct semaphore *sem)
sem 81 kern/thread/synch.c KASSERT(sem != NULL);
sem 84 kern/thread/synch.c spinlock_cleanup(&sem->sem_lock);
sem 85 kern/thread/synch.c wchan_destroy(sem->sem_wchan);
sem 86 kern/thread/synch.c kfree(sem->sem_name);
sem 87 kern/thread/synch.c kfree(sem);
sem 91 kern/thread/synch.c P(struct semaphore *sem)
sem 93 kern/thread/synch.c KASSERT(sem != NULL);
sem 103 kern/thread/synch.c spinlock_acquire(&sem->sem_lock);
sem 104 kern/thread/synch.c while (sem->sem_count == 0) {
sem 121 kern/thread/synch.c wchan_lock(sem->sem_wchan);
sem 122 kern/thread/synch.c spinlock_release(&sem->sem_lock);
sem 123 kern/thread/synch.c wchan_sleep(sem->sem_wchan);
sem 125 kern/thread/synch.c spinlock_acquire(&sem->sem_lock);
sem 127 kern/thread/synch.c KASSERT(sem->sem_count > 0);
sem 128 kern/thread/synch.c sem->sem_count--;
sem 129 kern/thread/synch.c spinlock_release(&sem->sem_lock);
sem 133 kern/thread/synch.c V(struct semaphore *sem)
sem 135 kern/thread/synch.c KASSERT(sem != NULL);
sem 137 kern/thread/synch.c spinlock_acquire(&sem->sem_lock);
sem 139 kern/thread/synch.c sem->sem_count++;
sem 140 kern/thread/synch.c KASSERT(sem->sem_count > 0);
sem 141 kern/thread/synch.c wchan_wakeone(sem->sem_wchan);
sem 143 kern/thread/synch.c spinlock_release(&sem->sem_lock);