[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