Opened 9 years ago
Closed 9 years ago
#21 closed defect (fixed)
VM panic ("Guru meditation") with almost every guest OS
Reported by: | Valery V. Sedletski | Owned by: | Valery V. Sedletski |
---|---|---|---|
Priority: | critical | Milestone: | VBox driver |
Component: | Driver | Keywords: | |
Cc: |
Description
When trying different guest OS'es (all but FreeDOS, or memtest86 -- these boot without an error), the VM enters "Guru meditation" state, for example, see the attached log with WinXP guest. Also, there is a ticket https://www.virtualbox.org/ticket/1939 on official VBox site by Paul Smedley, with the same problem.
Attachments (2)
Change History (5)
by , 9 years ago
Attachment: | VBox-winxp-guru-meditation.log added |
---|
comment:1 by , 9 years ago
The return code at the log bottom was VERR_INTERNAL_ERROR=-225. This was at \src\VBox\VMM\VMMR3\EM.cpp, EMR3ExecuteVM(), line 2482:
case EMSTATE_RAW: #ifdef VBOX_WITH_RAW_MODE rc = emR3RawExecute(pVM, pVCpu, &fFFDone); // !!! rc = VERR_INTERNAL_ERROR #else AssertLogRelMsgFailed(("%Rrc\n", rc)); rc = VERR_EM_INTERNAL_ERROR; #endif break;
Looking into emR3RawExecute, we see that it calls VMMR3RawRunGC() on line 1409, and the error code goes from here. Setting the tracepoints with error code printing, we restore the full call sequence:
EMR3ExecuteVM->VMMR3RawRunGC->SUPR3CallVMMR0Fast->suplibOsIOCtlFast->DosDevIOCtl
Looking into src\VBox\HostDrivers\Support\os2\SUPLib-os2.cpp, suplibOsIOCtlFast():
int suplibOsIOCtlFast(PSUPLIBDATA pThis, uintptr_t uFunction, uintptr_t idCpu) { NOREF(idCpu); int32_t rcRet = VERR_INTERNAL_ERROR; int rc = DosDevIOCtl((HFILE)pThis->hDevice, SUP_CTL_CATEGORY_FAST, uFunction, NULL, 0, NULL, NULL, 0, NULL); if (RT_LIKELY(rc == NO_ERROR)) rc = rcRet; else rc = RTErrConvertFromOS2(rc); return rc; }
we see that it returns VERR_INTERNAL_ERROR on successful return from DosDevIOCtl(), so
the fixed function looks like this:
int suplibOsIOCtlFast(PSUPLIBDATA pThis, uintptr_t uFunction, uintptr_t idCpu) { NOREF(idCpu); //int32_t rcRet = VERR_INTERNAL_ERROR; int rc = DosDevIOCtl((HFILE)pThis->hDevice, SUP_CTL_CATEGORY_FAST, uFunction, NULL, 0, NULL, NULL, 0, NULL); if (RT_LIKELY(rc == NO_ERROR)) rc = VINF_SUCCESS; else rc = RTErrConvertFromOS2(rc); return rc; }
Now it works as it should. Now the WinXP VM seems tro work ok. At least, now the "Guru meditation" error is gone, I see no major errors in the VM log. We may note the lines at the log bottom, about setting the video mode to 1024x768x32-bits.
by , 9 years ago
Attachment: | VBox-winxp-fixed.log added |
---|
The WinXP boot log with fixed "Guru meditation" error
comment:2 by , 9 years ago
Owner: | set to |
---|---|
Status: | new → assigned |
The WinXP boot log ("Guru meditation")