diff -u virtualbox-ose-2.1.4-dfsg/debian/changelog virtualbox-ose-2.1.4-dfsg/debian/changelog --- virtualbox-ose-2.1.4-dfsg/debian/changelog +++ virtualbox-ose-2.1.4-dfsg/debian/changelog @@ -1,3 +1,11 @@ +virtualbox-ose (2.1.4-dfsg-1ubuntu3.1) jaunty; urgency=low + + * Patch to fix acpi issue on newer kernels (LP: #510571), based on + changesets r26129 and r26130 from svn + - debian/patches/u03-unbreak-acpi-with-newer-kernels.dpatch + + -- Arand Nash Fri, 26 Mar 2010 14:20:21 +0000 + virtualbox-ose (2.1.4-dfsg-1ubuntu3) jaunty; urgency=low * Use source_virtualbox-ose.py to provide an apport hook for all diff -u virtualbox-ose-2.1.4-dfsg/debian/patches/00list virtualbox-ose-2.1.4-dfsg/debian/patches/00list --- virtualbox-ose-2.1.4-dfsg/debian/patches/00list +++ virtualbox-ose-2.1.4-dfsg/debian/patches/00list @@ -15,0 +16 @@ +u03-unbreak-acpi-with-newer-kernels.dpatch only in patch2: unchanged: --- virtualbox-ose-2.1.4-dfsg.orig/debian/patches/u03-unbreak-acpi-with-newer-kernels.dpatch +++ virtualbox-ose-2.1.4-dfsg/debian/patches/u03-unbreak-acpi-with-newer-kernels.dpatch @@ -0,0 +1,60 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## u03-unbreak-acpi-with-newer-kernels.dpatch by Arand Nash +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad virtualbox-ose-3.0.8-dfsg~/src/VBox/VMM/PATM/PATM.cpp virtualbox-ose-3.0.8-dfsg/src/VBox/VMM/PATM/PATM.cpp +--- virtualbox-ose-3.0.8-dfsg~/src/VBox/VMM/PATM/PATM.cpp 2009-10-13 12:49:16.000000000 +0100 ++++ virtualbox-ose-3.0.8-dfsg/src/VBox/VMM/PATM/PATM.cpp 2010-02-23 04:02:36.604218138 +0000 +@@ -5955,6 +5955,49 @@ + pCurPatchInstrHC += CpuNew.opsize; + pCurPatchInstrGC += CpuNew.opsize; + cbLeft -= CpuNew.opsize; ++ ++ /* Check if we expanded a complex guest instruction into a patch stream (e.g. call) */ ++ if (!cbLeft) ++ { ++ /* If the next patch instruction doesn't correspond to the next guest instruction, then we have some extra room to fill. */ ++ if (RTAvlU32Get(&pPatch->patch.Patch2GuestAddrTree, pCurPatchInstrGC - pVM->patm.s.pPatchMemGC) == NULL) ++ { ++ pRec = (PRECPATCHTOGUEST)RTAvlU32GetBestFit(&pPatch->patch.Patch2GuestAddrTree, pCurPatchInstrGC - pVM->patm.s.pPatchMemGC, true); ++ if (pRec) ++ { ++ unsigned cbFiller = pRec->Core.Key + pVM->patm.s.pPatchMemGC - pCurPatchInstrGC; ++ uint8_t *pPatchFillHC = patmPatchGCPtr2PatchHCPtr(pVM, pCurPatchInstrGC); ++ ++ Assert(!pRec->fDirty); ++ ++ Log(("Room left in patched instruction stream (%d bytes)\n", cbFiller)); ++ if (cbFiller >= SIZEOF_NEARJUMP32) ++ { ++ pPatchFillHC[0] = 0xE9; ++ *(uint32_t *)&pPatchFillHC[1] = cbFiller - SIZEOF_NEARJUMP32; ++#ifdef DEBUG ++ char szBuf[256]; ++ szBuf[0] = '\0'; ++ DBGFR3DisasInstrEx(pVM, pVCpu->idCpu, pCtx->cs, pCurPatchInstrGC, 0, szBuf, sizeof(szBuf), NULL); ++ Log(("FILL: %s\n", szBuf)); ++#endif ++ } ++ else ++ { ++ for (unsigned i = 0; i < cbFiller; i++) ++ { ++ pPatchFillHC[i] = 0x90; /* NOP */ ++#ifdef DEBUG ++ char szBuf[256]; ++ szBuf[0] = '\0'; ++ DBGFR3DisasInstrEx(pVM, pVCpu->idCpu, pCtx->cs, pCurPatchInstrGC, 0, szBuf, sizeof(szBuf), NULL); ++ Log(("FILL: %s\n", szBuf)); ++#endif ++ } ++ } ++ } ++ } ++ } + } + } + else