ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "Deleting semaphore[%p].\n", handle));
- BUG_ON(!list_empty(&sem->wait_list));
+ BUG_ON(!wlist_empty(&sem->wait_list));
kfree(sem);
sem = NULL;
struct semaphore {
raw_spinlock_t lock;
unsigned int count;
- struct list_head wait_list;
+ struct wlist_head wait_list;
};
#define __SEMAPHORE_INITIALIZER(name, n) \
{ \
.lock = __RAW_SPIN_LOCK_UNLOCKED((name).lock), \
.count = n, \
- .wait_list = LIST_HEAD_INIT((name).wait_list), \
+ .wait_list = WLIST_HEAD_INIT, \
}
#define DEFINE_SEMAPHORE(name) \
unsigned long flags;
raw_spin_lock_irqsave(&sem->lock, flags);
- if (likely(list_empty(&sem->wait_list)))
+ if (likely(wlist_empty(&sem->wait_list)))
sem->count++;
else
__up(sem);
/* Functions for the contended case */
struct semaphore_waiter {
- struct list_head list;
+ struct wlist_node list;
struct task_struct *task;
bool up;
};
struct task_struct *task = current;
struct semaphore_waiter waiter;
- list_add_tail(&waiter.list, &sem->wait_list);
+ wlist_add(&sem->wait_list, &waiter.list);
waiter.task = task;
waiter.up = false;
}
timed_out:
- list_del(&waiter.list);
+ wlist_del(&sem->wait_list, &waiter.list);
return -ETIME;
interrupted:
- list_del(&waiter.list);
+ wlist_del(&sem->wait_list, &waiter.list);
return -EINTR;
}
static noinline void __sched __up(struct semaphore *sem)
{
- struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list,
+ struct semaphore_waiter *waiter = wlist_del_first_entry(&sem->wait_list,
struct semaphore_waiter, list);
- list_del(&waiter->list);
waiter->up = true;
wake_up_process(waiter->task);
}