예제 #1
0
void up(struct semaphore *sem)
{
	unsigned long flags;

	spin_lock_irqsave(&sem->lock, flags);
	if (likely(list_empty(&sem->wait_list)))
		sem->count++;
	else
		__up(sem);
	spin_unlock_irqrestore(&sem->lock, flags);
}
예제 #2
0
void
up(struct semaphore *sem)
{
#ifdef WAITQUEUE_DEBUG
	CHECK_MAGIC(sem->__magic);
#endif
#ifdef CONFIG_DEBUG_SEMAPHORE
	printk("%s(%d): up(%p) <count=%d> from %p\n",
	       current->comm, current->pid, sem,
	       atomic_read(&sem->count), __builtin_return_address(0));
#endif
	__up(sem);
}
예제 #3
0
/**
 * up :释放信号量
 * @sem: the semaphore to release
 */
void up(struct semaphore *sem)
{
	unsigned long flags;

	spin_lock_irqsave(&sem->lock, flags);
	/*没有其他进程在等待sem信号量,则直接递增cout的值
	 * 直接返回*/
	if (likely(list_empty(&sem->wait_list)))
		sem->count++;
	else
		__up(sem);
	spin_unlock_irqrestore(&sem->lock, flags);
}
예제 #4
0
/**
 * up - release the semaphore
 * @sem: the semaphore to release
 *
 * Release the semaphore.  Unlike mutexes, up() may be called from any
 * context and even by tasks which have never called down().
 */
void up(struct semaphore *sem)
{
	unsigned long flags;
	spin_lock_irqsave(&sem->lock, flags);
#ifdef CONFIG_MT_LOCK_DEBUG
    if(0 == sem->count)
        sem_clear_owner(sem);
#endif
	if (likely(list_empty(&sem->wait_list))){
		sem->count++;
	}else
		__up(sem);
	spin_unlock_irqrestore(&sem->lock, flags);
}
예제 #5
0
/**
 * up - release the semaphore
 * @sem: the semaphore to release
 *
 * Release the semaphore.  Unlike mutexes, up() may be called from any
 * context and even by tasks which have never called down().
 */
void up(struct semaphore *sem)
{
	unsigned long flags;

	raw_spin_lock_irqsave(&sem->lock, flags);
#ifdef CONFIG_ILOCKDEP
	ilockdep_release(&sem->idep_map, _RET_IP_, (void *)sem);
#endif
	if (likely(list_empty(&sem->wait_list)))
		sem->count++;
	else
		__up(sem);
	raw_spin_unlock_irqrestore(&sem->lock, flags);
}
예제 #6
0
파일: sem.c 프로젝트: spinlock/ucore
void
up(semaphore_t *sem) {
    __up(sem, WT_KSEM);
}
예제 #7
0
파일: sem.c 프로젝트: spinlock/ucore
static void
usem_up(semaphore_t *sem) {
    __up(sem, WT_USEM);
}
예제 #8
0
파일: sem.c 프로젝트: spinlock/ucore
static int
usem_up(semaphore_t *sem) {
    __up(sem, WT_USEM);
    return 0;
}