From f6d8138e0559561a6a24b5abf474a59895d586d9 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Tue, 24 Jul 2018 18:32:19 +0900 Subject: [PATCH] mcexec_wait_syscall: requeue potential request on interrupted wait Change-Id: Id7a324f18ebb8c81f05bd8362e19d9314a445308 --- executer/kernel/mcctrl/control.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) 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;