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)

VBox-winxp-guru-meditation.log (137.1 KB ) - added by Valery V. Sedletski 9 years ago.
The WinXP boot log ("Guru meditation")
VBox-winxp-fixed.log (43.1 KB ) - added by Valery V. Sedletski 9 years ago.
The WinXP boot log with fixed "Guru meditation" error

Download all attachments as: .zip

Change History (5)

by Valery V. Sedletski, 9 years ago

The WinXP boot log ("Guru meditation")

comment:1 by Valery V. Sedletski, 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 Valery V. Sedletski, 9 years ago

Attachment: VBox-winxp-fixed.log added

The WinXP boot log with fixed "Guru meditation" error

comment:2 by Valery V. Sedletski, 9 years ago

Owner: set to Valery V. Sedletski
Status: newassigned

comment:3 by dmik, 9 years ago

Resolution: fixed
Status: assignedclosed

Closed by r20.

Note: See TracTickets for help on using tickets.