Index: /trunk/src/VBox/VMM/VMMAll/GIMAllKvm.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMAll/GIMAllKvm.cpp	(revision 55038)
+++ /trunk/src/VBox/VMM/VMMAll/GIMAllKvm.cpp	(revision 55039)
@@ -352,18 +352,13 @@
         if (Dis.pCurInstr->uOpcode == OP_VMCALL)
         {
-            Assert(cbInstr == 3);        /* paranoia. */
-
             /*
              * Patch the instruction to so we don't have to spend time disassembling it each time.
              */
-            static uint8_t s_abHypercall[3];
-            size_t cbWritten;
-            rc = HMPatchHypercall(pVM, &s_abHypercall, sizeof(s_abHypercall), &cbWritten);
-            AssertRC(rc);
-
-            if (RT_LIKELY(cbWritten == cbInstr))
-                rc = PGMPhysSimpleWriteGCPtr(pVCpu, pCtx->rip, &s_abHypercall, sizeof(s_abHypercall));
-            if (RT_SUCCESS(rc))
-                return gimKvmHypercall(pVCpu, pCtx);
+            static uint8_t s_abHypercall[3] = { 0x0F, 0x01, 0x00 };
+            Assert(sizeof(s_abHypercall) == cbInstr);
+            if (!s_abHypercall[2])
+                s_abHypercall[2] = ASMIsAmdCpu() ? 0xD9 /* VMMCALL */ : 0xC1 /* VMCALL */;
+            rc = PGMPhysSimpleWriteGCPtr(pVCpu, pCtx->rip, &s_abHypercall, sizeof(s_abHypercall));
+            return VINF_SUCCESS;
         }
     }
Index: /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp
===================================================================
--- /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp	(revision 55038)
+++ /trunk/src/VBox/VMM/VMMR0/HMSVMR0.cpp	(revision 55039)
@@ -5227,16 +5227,8 @@
     if (   pVM->hm.s.fTrapXcptUD
         && GIMAreHypercallsEnabled(pVCpu))
-    {
-        int rc = GIMXcptUD(pVCpu, pCtx);
-        if (RT_SUCCESS(rc))
-        {
-            /* If the exception handler changes anything other than guest general-purpose registers,
-               we would need to reload the guest changed bits on VM-reentry. */
-            hmR0SvmUpdateRip(pVCpu, pCtx, 3);
-            return VINF_SUCCESS;
-        }
-    }
-
-    hmR0SvmSetPendingXcptUD(pVCpu);
+        GIMXcptUD(pVCpu, pCtx);
+    else
+        hmR0SvmSetPendingXcptUD(pVCpu);
+
     return VINF_SUCCESS;
 }
