[Pkg-virtualbox-commits] [SCM] virtualbox Debian packaging branch, master, updated. debian/4.1.10-dfsg-1-2-g3680e94

Felix Geyer debfx-pkg at fobos.de
Sun Apr 1 22:03:23 UTC 2012


The following commit has been merged in the master branch:
commit 3680e94d215e45bf5fe8b77e2ca766da040af0be
Author: Felix Geyer <debfx-pkg at fobos.de>
Date:   Mon Apr 2 00:03:12 2012 +0200

    Fix Guru Mediation errors VERR_NOT_SUPPORTED and VERR_RAW_MODE_INVALID_SMP.

diff --git a/debian/changelog b/debian/changelog
index 62ced79..6e60f8b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,8 @@ virtualbox (4.1.10-dfsg-2) UNRELEASED; urgency=low
   * Make the vboxpci module buildable for a i386 kernel when running amd64.
     (Closes: #664730)
     - Update 12-make-module.patch
+  * Fix Guru Mediation errors VERR_NOT_SUPPORTED and VERR_RAW_MODE_INVALID_SMP.
+    - Add 37-fix-guru-mediation.patch, cherry-picked from upstream
 
  -- Felix Geyer <debfx-pkg at fobos.de>  Sun, 01 Apr 2012 23:23:16 +0200
 
diff --git a/debian/patches/37-fix-guru-mediation.patch b/debian/patches/37-fix-guru-mediation.patch
new file mode 100644
index 0000000..4e6770f
--- /dev/null
+++ b/debian/patches/37-fix-guru-mediation.patch
@@ -0,0 +1,113 @@
+Description: Don't reschedule after clearing the inhibit irq flag, it breaks sti+hlt sequences
+ by continuing execution instead of halting.
+ Restore the previous state on resume if we were halted or in a sipi wait.
+Origin: upstream, https://www.virtualbox.org/changeset/38612/vbox
+Bug: https://www.virtualbox.org/ticket/10370
+
+--- a/src/VBox/VMM/VMMR3/EM.cpp
++++ b/src/VBox/VMM/VMMR3/EM.cpp
+@@ -1360,8 +1360,9 @@
+             rc2 = VMMR3EmtRendezvousFF(pVM, pVCpu);
+             UPDATE_RC();
+-            /** @todo HACK ALERT! The following test is to make sure EM+TM things the VM is
+-             * stopped/reset before the next VM state change is made. We need a better
+-             * solution for this, or at least make it possible to do: (rc >= VINF_EM_FIRST
+-             * && rc >= VINF_EM_SUSPEND). */
++            /** @todo HACK ALERT! The following test is to make sure EM+TM
++             * thinks the VM is stopped/reset before the next VM state change
++             * is made. We need a better solution for this, or at least make it
++             * possible to do: (rc >= VINF_EM_FIRST && rc <=
++             * VINF_EM_SUSPEND). */
+             if (RT_UNLIKELY(rc == VINF_EM_SUSPEND || rc == VINF_EM_RESET || rc == VINF_EM_OFF))
+             {
+@@ -1470,8 +1471,9 @@
+             rc2 = VMMR3EmtRendezvousFF(pVM, pVCpu);
+             UPDATE_RC();
+-            /** @todo HACK ALERT! The following test is to make sure EM+TM things the VM is
+-             * stopped/reset before the next VM state change is made. We need a better
+-             * solution for this, or at least make it possible to do: (rc >= VINF_EM_FIRST
+-             * && rc >= VINF_EM_SUSPEND). */
++            /** @todo HACK ALERT! The following test is to make sure EM+TM
++             * thinks the VM is stopped/reset before the next VM state change
++             * is made. We need a better solution for this, or at least make it
++             * possible to do: (rc >= VINF_EM_FIRST && rc <=
++             * VINF_EM_SUSPEND). */
+             if (RT_UNLIKELY(rc == VINF_EM_SUSPEND || rc == VINF_EM_RESET || rc == VINF_EM_OFF))
+             {
+@@ -1495,8 +1497,9 @@
+             }
+             UPDATE_RC();
+-            /** @todo HACK ALERT! The following test is to make sure EM+TM things the VM is
+-             * stopped/reset before the next VM state change is made. We need a better
+-             * solution for this, or at least make it possible to do: (rc >= VINF_EM_FIRST
+-             * && rc >= VINF_EM_SUSPEND). */
++            /** @todo HACK ALERT! The following test is to make sure EM+TM
++             * thinks the VM is stopped/reset before the next VM state change
++             * is made. We need a better solution for this, or at least make it
++             * possible to do: (rc >= VINF_EM_FIRST && rc <=
++             * VINF_EM_SUSPEND). */
+             if (RT_UNLIKELY(rc == VINF_EM_SUSPEND || rc == VINF_EM_RESET || rc == VINF_EM_OFF))
+             {
+@@ -1546,8 +1549,9 @@
+             }
+             UPDATE_RC();
+-            /** @todo HACK ALERT! The following test is to make sure EM+TM things the VM is
+-             * stopped/reset before the next VM state change is made. We need a better
+-             * solution for this, or at least make it possible to do: (rc >= VINF_EM_FIRST
+-             * && rc >= VINF_EM_SUSPEND). */
++            /** @todo HACK ALERT! The following test is to make sure EM+TM
++             * thinks the VM is stopped/reset before the next VM state change
++             * is made. We need a better solution for this, or at least make it
++             * possible to do: (rc >= VINF_EM_FIRST && rc <=
++             * VINF_EM_SUSPEND). */
+             if (RT_UNLIKELY(rc == VINF_EM_SUSPEND || rc == VINF_EM_RESET || rc == VINF_EM_OFF))
+             {
+@@ -1578,5 +1582,5 @@
+         /*
+          * The instruction following an emulated STI should *always* be executed!
+-         * 
++         *
+          * Note! We intentionally don't clear VM_FF_INHIBIT_INTERRUPTS here if
+          *       the eip is the same as the inhibited instr address.  Before we
+@@ -1591,16 +1595,11 @@
+             &&  !VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY))
+         {
+-            Log(("VMCPU_FF_INHIBIT_INTERRUPTS at %RGv successor %RGv\n", (RTGCPTR)CPUMGetGuestRIP(pVCpu), EMGetInhibitInterruptsPC(pVCpu)));
+             if (CPUMGetGuestRIP(pVCpu) != EMGetInhibitInterruptsPC(pVCpu))
++            {
++                Log(("Clearing VMCPU_FF_INHIBIT_INTERRUPTS at %RGv - successor %RGv\n", (RTGCPTR)CPUMGetGuestRIP(pVCpu), EMGetInhibitInterruptsPC(pVCpu)));
+                 VMCPU_FF_CLEAR(pVCpu, VMCPU_FF_INHIBIT_INTERRUPTS);
+-
+-            if (EMIsSupervisorCodeRecompiled(pVM))
+-                rc2 = VINF_EM_RESCHEDULE_REM;
+-            else if (HWACCMR3IsActive(pVCpu))
+-                rc2 = VINF_EM_RESCHEDULE_HWACC;
++            }
+             else
+-                rc2 = PATMAreInterruptsEnabled(pVM) ? VINF_EM_RESCHEDULE_RAW : VINF_EM_RESCHEDULE_REM;
+-
+-            UPDATE_RC();
++                Log(("Leaving VMCPU_FF_INHIBIT_INTERRUPTS set at %RGv\n", (RTGCPTR)CPUMGetGuestRIP(pVCpu)));
+         }
+ 
+@@ -1900,5 +1899,8 @@
+                     if (    pVCpu->em.s.enmPrevState == EMSTATE_WAIT_SIPI
+                         ||  pVCpu->em.s.enmPrevState == EMSTATE_HALTED)
++                    {
++                        pVCpu->em.s.enmState = pVCpu->em.s.enmPrevState;
+                         break;
++                    }
+                     /* fall through and get scheduled. */
+ 
+@@ -1937,4 +1939,5 @@
+                 case VINF_EM_SUSPEND:
+                     Log2(("EMR3ExecuteVM: VINF_EM_SUSPEND: %d -> %d\n", pVCpu->em.s.enmState, EMSTATE_SUSPENDED));
++                    Assert(pVCpu->em.s.enmState != EMSTATE_SUSPENDED);
+                     pVCpu->em.s.enmPrevState = pVCpu->em.s.enmState;
+                     pVCpu->em.s.enmState     = EMSTATE_SUSPENDED;
+@@ -1988,4 +1991,5 @@
+                 case VINF_EM_NO_MEMORY:
+                     Log2(("EMR3ExecuteVM: VINF_EM_NO_MEMORY: %d -> %d\n", pVCpu->em.s.enmState, EMSTATE_SUSPENDED));
++                    Assert(pVCpu->em.s.enmState != EMSTATE_SUSPENDED);
+                     pVCpu->em.s.enmPrevState = pVCpu->em.s.enmState;
+                     pVCpu->em.s.enmState = EMSTATE_SUSPENDED;
diff --git a/debian/patches/series b/debian/patches/series
index 4ed7bdf..582c863 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -15,3 +15,4 @@
 33-link-static-libgsoap.patch
 35-libvdeplug-soname.patch
 36-ubuntu-pae.patch
+37-fix-guru-mediation.patch

-- 
virtualbox Debian packaging



More information about the Pkg-virtualbox-commits mailing list