diff --git a/sys/compat/linuxkpi/common/src/linux_schedule.c b/sys/compat/linuxkpi/common/src/linux_schedule.c --- a/sys/compat/linuxkpi/common/src/linux_schedule.c +++ b/sys/compat/linuxkpi/common/src/linux_schedule.c @@ -202,9 +202,11 @@ linux_wake_up(wait_queue_head_t *wqh, unsigned int state, int nr, bool locked) { wait_queue_t *pos, *next; + unsigned long flags; if (!locked) - spin_lock(&wqh->lock); + spin_lock_irqsave(&wqh->lock, flags); + list_for_each_entry_safe(pos, next, &wqh->task_list, task_list) { if (pos->func == NULL) { if (wake_up_task(pos->private, state) != 0 && --nr == 0) @@ -215,7 +217,7 @@ } } if (!locked) - spin_unlock(&wqh->lock); + spin_unlock_irqrestore(&wqh->lock, flags); } void