VirtualBox

Changeset 86115 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Sep 14, 2020 6:52:26 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
140348
Message:

VMM/NEM: Implement Mesa vmwgfx #GP(0) workaround existing for SVM and VT-x already, fixes ticketref:19884

Location:
trunk/src/VBox/VMM/VMMR3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/NEMR3.cpp

    r86056 r86115  
    8383                                  "Enabled"
    8484                                  "|Allow64BitGuests"
     85                                  "|LovelyMesaDrvWorkaround"
    8586#ifdef RT_OS_WINDOWS
    8687                                  "|UseRing0Runloop"
     
    107108    pVM->nem.s.fAllow64BitGuests = false;
    108109#endif
     110
     111    /** @cfgm{/HM/LovelyMesaDrvWorkaround,bool}
     112     * Workaround for mesa vmsvga 3d driver making incorrect assumptions about
     113     * the hypervisor it is running under. */
     114    bool f;
     115    rc = CFGMR3QueryBoolDef(pCfgNem, "LovelyMesaDrvWorkaround", &f, false);
     116    AssertLogRelRCReturn(rc, rc);
     117    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
     118    {
     119        PVMCPU pVCpu = pVM->apCpusR3[idCpu];
     120        pVCpu->nem.s.fTrapXcptGpForLovelyMesaDrv = f;
     121    }
    109122
    110123#ifdef RT_OS_WINDOWS
  • trunk/src/VBox/VMM/VMMR3/NEMR3Native-win.cpp

    r85121 r86115  
    13571357                                 | RT_BIT_64(WHvX64ExceptionTypeBreakpointTrap)
    13581358                                 | RT_BIT_64(WHvX64ExceptionTypeInvalidOpcodeFault);
     1359
     1360    /* Intercept #GP to workaround the buggy mesa vmwgfx driver. */
     1361    PVMCPU pVCpu = pVM->apCpusR3[0]; /** @todo In theory per vCPU, in practice same for all. */
     1362    if (pVCpu->nem.s.fTrapXcptGpForLovelyMesaDrv)
     1363        Property.ExceptionExitBitmap |= RT_BIT_64(WHvX64ExceptionTypeGeneralProtectionFault);
     1364
    13591365    hrc = WHvSetPartitionProperty(hPartition, WHvPartitionPropertyCodeExceptionExitBitmap, &Property, sizeof(Property));
    13601366    if (FAILED(hrc))
     
    14191425    for (VMCPUID idCpu = 0; idCpu < pVM->cCpus; idCpu++)
    14201426    {
    1421         PVMCPU pVCpu = pVM->apCpusR3[idCpu];
     1427        pVCpu = pVM->apCpusR3[idCpu];
    14221428
    14231429        pVCpu->nem.s.hNativeThreadHandle = (RTR3PTR)RTThreadGetNativeHandle(VMR3GetThreadHandle(pVCpu->pUVCpu));
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette