Signed-off-by: liguang <lig.fnst@cn.fujitsu.com>
Cc: Jiri Kosina <jkosina@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
struct semaphore_waiter {
struct list_head list;
struct task_struct *task;
struct semaphore_waiter {
struct list_head list;
struct task_struct *task;
list_add_tail(&waiter.list, &sem->wait_list);
waiter.task = task;
list_add_tail(&waiter.list, &sem->wait_list);
waiter.task = task;
for (;;) {
if (signal_pending_state(state, task))
for (;;) {
if (signal_pending_state(state, task))
struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list,
struct semaphore_waiter, list);
list_del(&waiter->list);
struct semaphore_waiter *waiter = list_first_entry(&sem->wait_list,
struct semaphore_waiter, list);
list_del(&waiter->list);
wake_up_process(waiter->task);
}
wake_up_process(waiter->task);
}