diff --git a/executer/kernel/mcctrl/control.c b/executer/kernel/mcctrl/control.c index f3022733..6578bb20 100644 --- a/executer/kernel/mcctrl/control.c +++ b/executer/kernel/mcctrl/control.c @@ -1317,20 +1317,18 @@ retry_alloc: ihk_ikc_spinlock_unlock(&ppd->wq_list_lock, irqflags); if (ret == -ERESTARTSYS) { - /* Is the request valid? */ + /* Requeue valid requests */ if (wqhln->req) { - packet = wqhln->packet; - kfree(wqhln); - wqhln = NULL; - ret = -EINTR; - goto put_ppd_out; + irqflags = ihk_ikc_spinlock_lock(&ppd->wq_list_lock); + list_add_tail(&wqhln->list, &ppd->wq_req_list); + ihk_ikc_spinlock_unlock(&ppd->wq_list_lock, irqflags); } else { kfree(wqhln); - wqhln = NULL; - ret = -EINTR; - goto put_ppd_out; } + wqhln = NULL; + ret = -EINTR; + goto put_ppd_out; } packet = wqhln->packet;