From 4d0e0728f4ef1c6da8b0405eebfac861d0e24129 Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Thu, 8 Jun 2017 17:40:35 +0900 Subject: [PATCH] destroy_thread(): disable IRQ while holding update lock --- kernel/process.c | 6 +++--- kernel/syscall.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/process.c b/kernel/process.c index 0da7b70d..65810428 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -2391,19 +2391,19 @@ void destroy_thread(struct thread *thread) void release_thread(struct thread *thread) { struct process_vm *vm; - struct mcs_rwlock_node lock; + struct mcs_rwlock_node_irqsave lock; struct timespec ats; if (!ihk_atomic_dec_and_test(&thread->refcount)) { return; } - mcs_rwlock_writer_lock_noirq(&thread->proc->update_lock, &lock); + mcs_rwlock_writer_lock(&thread->proc->update_lock, &lock); tsc_to_ts(thread->system_tsc, &ats); ts_add(&thread->proc->stime, &ats); tsc_to_ts(thread->user_tsc, &ats); ts_add(&thread->proc->utime, &ats); - mcs_rwlock_writer_unlock_noirq(&thread->proc->update_lock, &lock); + mcs_rwlock_writer_unlock(&thread->proc->update_lock, &lock); vm = thread->vm; diff --git a/kernel/syscall.c b/kernel/syscall.c index 5a87d54c..2a0e0d8e 100644 --- a/kernel/syscall.c +++ b/kernel/syscall.c @@ -307,7 +307,7 @@ long do_syscall(struct syscall_request *req, int cpu, int pid) kprintf("%s: proxy PID %d is dead, terminate()\n", __FUNCTION__, thread->proc->pid); thread->proc->nohost = 1; - terminate(-1, 0); + terminate(0, SIGKILL); } #ifdef PROFILE_ENABLE