Index: /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c
===================================================================
--- /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 417)
+++ /trunk/src/VBox/HostDrivers/Support/SUPDRVShared.c	(revision 418)
@@ -2822,12 +2822,20 @@
     *u.pb++ = 2;
 
-    /* jump to forward code. */
+    /* jump to forwarder code. */
     *u.pb++ = 0xeb;
     uFixJmp = u;
     *u.pb++ = 0xfe;
 
-    /* Call _VMMR0Entry */              //  @VBoxCall:
-    /* (This pushing of the arguments is NOT necessary, but it may ease debugging.) */
-# ifdef __WIN64__
+                                        //  @VBoxCall:
+    *u.pb++ = 0x0f;                     //  swapgs
+    *u.pb++ = 0x01;
+    *u.pb++ = 0xf8;
+
+    /* 
+     * Call VMMR0Entry
+     *      We don't have to push the arguments here, but we have to 
+     *      reserve some stack space for the interrupt forwarding.
+     */
+# ifdef __WIN__
     *u.pb++ = 0x50;                     //  push    rax                             ; alignment filler.
     *u.pb++ = 0x41;                     //  push    r8                              ; uArg
@@ -2851,4 +2859,8 @@
     *u.pb++ = 0xc4;
     *u.pu32++ = 0x20;
+
+    *u.pb++ = 0x0f;                     // swapgs
+    *u.pb++ = 0x01;
+    *u.pb++ = 0xf8;
 
     /* Return to R3. */
