svn commit: r333707 - head/sys/x86/x86
Andriy Gapon
avg at FreeBSD.org
Thu May 17 10:16:21 UTC 2018
Author: avg
Date: Thu May 17 10:16:20 2018
New Revision: 333707
URL: https://svnweb.freebsd.org/changeset/base/333707
Log:
fix a problem with bad performance after wakeup caused by r333321
This change reverts a "while here" part of r333321 that moved clearing
of suspended_cpus to an earlier place.
Apparently, there can be a problem when modifying (shared) memory before
restoring proper cache attributes. So, to be safe, move the clearing to
the old place.
Many thanks to Johannes Lundberg for bisecting the changes to that
particular commit and then bisecting the commit to the particular
change.
Reported by: many
Debugged by: Johannes Lundberg <johalun0 at gmail.com>
MFC after: 1 week
X-MFC with: r333321
Modified:
head/sys/x86/x86/mp_x86.c
Modified: head/sys/x86/x86/mp_x86.c
==============================================================================
--- head/sys/x86/x86/mp_x86.c Thu May 17 10:13:18 2018 (r333706)
+++ head/sys/x86/x86/mp_x86.c Thu May 17 10:16:20 2018 (r333707)
@@ -1457,8 +1457,6 @@ cpususpend_handler(void)
*/
wbinvd();
} else {
- /* Indicate that we have restarted and restored the context. */
- CPU_CLR_ATOMIC(cpu, &suspended_cpus);
#ifdef __amd64__
fpuresume(susppcbs[cpu]->sp_fpususpend);
#else
@@ -1468,6 +1466,9 @@ cpususpend_handler(void)
initializecpu();
PCPU_SET(switchtime, 0);
PCPU_SET(switchticks, ticks);
+
+ /* Indicate that we have restarted and restored the context. */
+ CPU_CLR_ATOMIC(cpu, &suspended_cpus);
}
/* Wait for resume directive */
More information about the svn-src-all
mailing list