VirtualBox

Changeset 90467 in vbox for trunk/src/VBox/Devices/VMMDev


Ignore:
Timestamp:
Aug 2, 2021 10:57:30 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
146071
Message:

VMMDev/Testing: Added VMMDEV_TESTING_LOCKED_BUSY_SUCCESS flag so we can test both regular return-to-ring-3 on contention and must-get-the-lock-no-matter-wath code paths. bugref:6695

Location:
trunk/src/VBox/Devices/VMMDev
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/VMMDev/VMMDevState.h

    r90461 r90467  
    318318            uint32_t    cUsBetween : 14;
    319319            /** Reserved MBZ. */
    320             uint32_t    uReserved : 3;
     320            uint32_t    uReserved : 2;
     321            /** Pass VINF_SUCCESS as rcBusy if set. */
     322            uint32_t    fMustSucceed : 1;
    321323            /** Whether to poke EMTs before releasing it. */
    322324            uint32_t    fPokeBeforeRelease : 1;
  • trunk/src/VBox/Devices/VMMDev/VMMDevTesting.cpp

    r90462 r90467  
    599599                case 1:
    600600                {
    601                     int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_SUCCESS);
    602                     AssertRCReturn(rc, rc);
     601#ifndef IN_RING3
     602                    if (!pThis->TestingLockControl.s.fMustSucceed)
     603                    {
     604                        int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_IOM_R3_IOPORT_WRITE);
     605                        if (rc != VINF_SUCCESS)
     606                            return rc;
     607                    }
     608                    else
     609#endif
     610                    {
     611                        int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_SUCCESS);
     612                        AssertRCReturn(rc, rc);
     613                    }
    603614
    604615                    u32 &= ~VMMDEV_TESTING_LOCKED_MBZ_MASK;
     
    707718                case 1:
    708719                {
    709                     int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_SUCCESS);
    710                     AssertRCReturn(rc, rc);
     720#ifndef IN_RING3
     721                    if (!pThis->TestingLockControl.s.fMustSucceed)
     722                    {
     723                        int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_IOM_R3_IOPORT_READ);
     724                        if (rc != VINF_SUCCESS)
     725                            return rc;
     726                    }
     727                    else
     728#endif
     729                    {
     730                        int rc = PDMDevHlpCritSectEnter(pDevIns, &pThis->CritSect, VINF_SUCCESS);
     731                        AssertRCReturn(rc, rc);
     732                    }
    711733
    712734                    *pu32 = pThis->TestingLockControl.u32;
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