svn commit: r320774 - head/sys/compat/linuxkpi/common/src
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Jul 7 13:15:01 UTC 2017
Author: hselasky
Date: Fri Jul 7 13:15:00 2017
New Revision: 320774
URL: https://svnweb.freebsd.org/changeset/base/320774
Log:
Fix a bug in synchronize RCU when the calling thread is bound to a CPU.
Set "td_pinned" to zero after "sched_unbind()" to prevent "td_pinned"
from temporarily becoming negative during "sched_bind()". This can
happen if "sched_bind()" uses "sched_pin()" and "sched_unpin()".
MFC after: 1 week
Sponsored by: Mellanox Technologies
Modified:
head/sys/compat/linuxkpi/common/src/linux_rcu.c
Modified: head/sys/compat/linuxkpi/common/src/linux_rcu.c
==============================================================================
--- head/sys/compat/linuxkpi/common/src/linux_rcu.c Fri Jul 7 12:03:58 2017 (r320773)
+++ head/sys/compat/linuxkpi/common/src/linux_rcu.c Fri Jul 7 13:15:00 2017 (r320774)
@@ -299,8 +299,9 @@ linux_synchronize_rcu(void)
old_cpu = PCPU_GET(cpuid);
old_pinned = td->td_pinned;
old_prio = td->td_priority;
- td->td_pinned = 0;
was_bound = sched_is_bound(td);
+ sched_unbind(td);
+ td->td_pinned = 0;
sched_bind(td, old_cpu);
ck_epoch_synchronize_wait(&linux_epoch,
More information about the svn-src-all
mailing list