Page MenuHomeFreeBSD

D22622.diff
No OneTemporary

D22622.diff

Index: head/sys/arm64/arm64/pmap.c
===================================================================
--- head/sys/arm64/arm64/pmap.c
+++ head/sys/arm64/arm64/pmap.c
@@ -5850,8 +5850,18 @@
KASSERT(PCPU_GET(curpmap) != NULL, ("no active pmap"));
KASSERT(pmap != kernel_pmap, ("kernel pmap activation"));
- if (pmap == PCPU_GET(curpmap))
+ if (pmap == PCPU_GET(curpmap)) {
+ /*
+ * Handle the possibility that the old thread was preempted
+ * after an "ic" or "tlbi" instruction but before it performed
+ * a "dsb" instruction. If the old thread migrates to a new
+ * processor, its completion of a "dsb" instruction on that
+ * new processor does not guarantee that the "ic" or "tlbi"
+ * instructions performed on the old processor have completed.
+ */
+ dsb(ish);
return (false);
+ }
/*
* Ensure that the store to curpmap is globally visible before the

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 21, 9:13 AM (21 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14758540
Default Alt Text
D22622.diff (888 B)

Event Timeline