Kernel - Temporarily move sigtramp lower
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 29 Mar 2017 16:57:18 +0000 (09:57 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 29 Mar 2017 16:57:18 +0000 (09:57 -0700)
* There is a bug in Ryzen related to the kernel iretq'ing into a high user
  %rip address near the end of the user address space (top of user stack).
  This is a temporary workaround for the issue.

* The original %rip for sigtramp was 0x00007fffffffffe0.  Moving it down
  to fa0 wasn't sufficient.  Moving it down to f00 moved the bug from nearly
  instant to taking a few hours to reproduce.  Moving it down to be0 it took
  a day to reproduce.  Moving it down to 0x00007ffffffffba0 (this commit)
  survived the overnight test.

sys/platform/pc64/x86_64/sigtramp.s

index ae3a8af..15880fb 100644 (file)
@@ -49,9 +49,11 @@ NON_GPROF_ENTRY(sigcode)
        jmp     0b
 
        /*
-        * Work around a Ryzen bug (say whut?)
+        * Work around a Ryzen bug (say whut?).  There appears to be an
+        * issue with the kernel iretq'ing to a %rip near the end of the
+        * user address space (top of stack).
         */
-       .space  224
+       .space  1088
 
        ALIGN_TEXT
 esigcode: