From 21df56b23391ea162e2c8cbb3f8c079962845faa Mon Sep 17 00:00:00 2001 From: Balazs Gerofi Date: Sat, 31 Dec 2016 10:44:13 +0900 Subject: [PATCH] sched_wakeup_thread(): memory barrier after status update --- kernel/futex.c | 1 + kernel/process.c | 1 + 2 files changed, 2 insertions(+) diff --git a/kernel/futex.c b/kernel/futex.c index 929407a1..934174a3 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -677,6 +677,7 @@ static uint64_t futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q * access to the hash list and forcing another memory barrier. */ xchg4(&(cpu_local_var(current)->status), PS_INTERRUPTIBLE); + barrier(); queue_me(q, hb); if (!plist_node_empty(&q->list)) { diff --git a/kernel/process.c b/kernel/process.c index 59ee4aff..187a1b72 100644 --- a/kernel/process.c +++ b/kernel/process.c @@ -2861,6 +2861,7 @@ sched_wakeup_thread(struct thread *thread, int valid_states) proc->status = PS_RUNNING; mcs_rwlock_writer_unlock_noirq(&proc->update_lock, &updatelock); xchg4((int *)(&thread->status), PS_RUNNING); + barrier(); status = 0; } else {