VirtualBox

Changeset 108466 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Mar 6, 2025 9:46:36 AM (2 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
167840
Message:

VMM/GIC: bugref:10404 Fixed issues that popped up after exposing the full range of extended SPIs and PPIs to the guest.
Fixed an issue with ignoring the priority mask.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/GICAll.cpp

    r108465 r108466  
    11661166    Assert(pGicDev->fAffRoutingEnabled); RT_NOREF(pGicDev);
    11671167    uint16_t const idxPriority = idxReg * sizeof(uint32_t);
    1168     AssertReturn(idxPriority < RT_ELEMENTS(pGicCpu->abIntrPriority) - sizeof(uint32_t), VERR_BUFFER_OVERFLOW);
     1168    AssertReturn(idxPriority <= RT_ELEMENTS(pGicCpu->abIntrPriority) - sizeof(uint32_t), VERR_BUFFER_OVERFLOW);
    11691169    AssertCompile(sizeof(*puValue) == sizeof(uint32_t));
    11701170    *puValue = *(uint32_t *)&pGicCpu->abIntrPriority[idxPriority];
     
    11891189    PGICCPU pGicCpu = VMCPU_TO_GICCPU(pVCpu);
    11901190    uint16_t const idxPriority = idxReg * sizeof(uint32_t);
    1191     AssertReturn(idxPriority < RT_ELEMENTS(pGicCpu->abIntrPriority) - sizeof(uint32_t), VERR_BUFFER_OVERFLOW);
     1191    AssertReturn(idxPriority <= RT_ELEMENTS(pGicCpu->abIntrPriority) - sizeof(uint32_t), VERR_BUFFER_OVERFLOW);
    11921192    AssertCompile(sizeof(uValue) == sizeof(uint32_t));
    11931193    *(uint32_t *)&pGicCpu->abIntrPriority[idxPriority] = uValue;
     
    19901990    PGICCPU   pGicCpu = VMCPU_TO_GICCPU(pVCpu);
    19911991    uint16_t const uIntId = gicGetHighestPrioPendingIntrEx(pGicDev, pGicCpu, fGroup0, fGroup1, &idxIntr, &bPriority);
     1992
     1993    /* If the priority must be higher than the priority mask for the interrupt to be signalled/acknowledged. */
     1994    if (pGicCpu->bIntrPriorityMask <= bPriority)
     1995        return GIC_INTID_RANGE_SPECIAL_NO_INTERRUPT;
    19921996
    19931997    /* Acknowledge the interrupt. */
     
    30533057    }
    30543058
    3055     AssertReleaseFailed();
     3059    AssertReleaseMsgFailed(("offReg=%#RX16\n", offReg));
    30563060    return VERR_INTERNAL_ERROR_2;
    30573061#else
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