VirtualBox

Changeset 97060 in vbox


Ignore:
Timestamp:
Oct 9, 2022 10:20:19 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154009
Message:

VMM/HMVMXR0: Changed vmxHCImportGuestIntrState into a template, since the a_iSegReg argument is constant in all calls and marked other vmxHCImportGuestState helpers as DECLINLINE just to formalize what the compilers probably are doing already.

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

Legend:

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

    r97057 r97060  
    32353235 *
    32363236 * @param   pVCpu       The cross context virtual CPU structure.
    3237  * @param   iSegReg     The segment register number (X86_SREG_XXX).
     3237 * @tparam  a_iSegReg   The segment register number (X86_SREG_XXX).
    32383238 *
    32393239 * @remarks Called with interrupts and/or preemption disabled.
    32403240 */
    3241 static void vmxHCImportGuestSegReg(PVMCPUCC pVCpu, uint32_t iSegReg)
    3242 {
    3243     Assert(iSegReg < X86_SREG_COUNT);
    3244     Assert((uint32_t)VMX_VMCS16_GUEST_SEG_SEL(iSegReg)           == g_aVmcsSegSel[iSegReg]);
    3245     Assert((uint32_t)VMX_VMCS32_GUEST_SEG_LIMIT(iSegReg)         == g_aVmcsSegLimit[iSegReg]);
    3246     Assert((uint32_t)VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(iSegReg) == g_aVmcsSegAttr[iSegReg]);
    3247     Assert((uint32_t)VMX_VMCS_GUEST_SEG_BASE(iSegReg)            == g_aVmcsSegBase[iSegReg]);
    3248 
    3249     PCPUMSELREG pSelReg = &pVCpu->cpum.GstCtx.aSRegs[iSegReg];
     3241template<uint32_t const a_iSegReg>
     3242DECLINLINE(void) vmxHCImportGuestSegReg(PVMCPUCC pVCpu)
     3243{
     3244    AssertCompile(a_iSegReg < X86_SREG_COUNT);
     3245    Assert((uint32_t)VMX_VMCS16_GUEST_SEG_SEL(a_iSegReg)           == g_aVmcsSegSel[a_iSegReg]);
     3246    Assert((uint32_t)VMX_VMCS32_GUEST_SEG_LIMIT(a_iSegReg)         == g_aVmcsSegLimit[a_iSegReg]);
     3247    Assert((uint32_t)VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(a_iSegReg) == g_aVmcsSegAttr[a_iSegReg]);
     3248    Assert((uint32_t)VMX_VMCS_GUEST_SEG_BASE(a_iSegReg)            == g_aVmcsSegBase[a_iSegReg]);
     3249
     3250    PCPUMSELREG pSelReg = &pVCpu->cpum.GstCtx.aSRegs[a_iSegReg];
    32503251
    32513252    uint16_t u16Sel;
    3252     int rc = VMX_VMCS_READ_16(pVCpu, VMX_VMCS16_GUEST_SEG_SEL(iSegReg), &u16Sel);   AssertRC(rc);
     3253    int rc = VMX_VMCS_READ_16(pVCpu, VMX_VMCS16_GUEST_SEG_SEL(a_iSegReg), &u16Sel);   AssertRC(rc);
    32533254    pSelReg->Sel      = u16Sel;
    32543255    pSelReg->ValidSel = u16Sel;
    32553256
    3256     rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_SEG_LIMIT(iSegReg), &pSelReg->u32Limit); AssertRC(rc);
    3257     rc     = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_SEG_BASE(iSegReg), &pSelReg->u64Base);     AssertRC(rc);
     3257    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_SEG_LIMIT(a_iSegReg), &pSelReg->u32Limit); AssertRC(rc);
     3258    rc     = VMX_VMCS_READ_NW(pVCpu, VMX_VMCS_GUEST_SEG_BASE(a_iSegReg), &pSelReg->u64Base);     AssertRC(rc);
    32583259
    32593260    uint32_t u32Attr;
    3260     rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(iSegReg), &u32Attr);   AssertRC(rc);
     3261    rc     = VMX_VMCS_READ_32(pVCpu, VMX_VMCS32_GUEST_SEG_ACCESS_RIGHTS(a_iSegReg), &u32Attr);   AssertRC(rc);
    32613262    pSelReg->Attr.u   = u32Attr;
    32623263    if (u32Attr & X86DESCATTR_UNUSABLE)
    3263         vmxHCFixUnusableSegRegAttr(pVCpu, pSelReg, "ES\0CS\0SS\0DS\0FS\0GS" + iSegReg * 3);
     3264        vmxHCFixUnusableSegRegAttr(pVCpu, pSelReg, "ES\0CS\0SS\0DS\0FS\0GS" + a_iSegReg * 3);
    32643265
    32653266    pSelReg->fFlags   = CPUMSELREG_FLAGS_VALID;
     
    33023303 * @remarks Called with interrupts and/or preemption disabled.
    33033304 */
    3304 static void vmxHCImportGuestTr(PVMCPUCC pVCpu)
     3305DECLINLINE(void) vmxHCImportGuestTr(PVMCPUCC pVCpu)
    33053306{
    33063307    uint16_t u16Sel;
     
    33323333 *          instead!!!
    33333334 */
    3334 static void vmxHCImportGuestRip(PVMCPUCC pVCpu)
     3335DECLINLINE(void) vmxHCImportGuestRip(PVMCPUCC pVCpu)
    33353336{
    33363337    uint64_t u64Val;
     
    33583359 *          instead!!!
    33593360 */
    3360 static void vmxHCImportGuestRFlags(PVMCPUCC pVCpu, PCVMXVMCSINFO pVmcsInfo)
     3361DECLINLINE(void) vmxHCImportGuestRFlags(PVMCPUCC pVCpu, PCVMXVMCSINFO pVmcsInfo)
    33613362{
    33623363    PCPUMCTX pCtx = &pVCpu->cpum.GstCtx;
     
    33953396 *          instead!!!
    33963397 */
    3397 static void vmxHCImportGuestIntrState(PVMCPUCC pVCpu, PCVMXVMCSINFO pVmcsInfo)
     3398DECLINLINE(void) vmxHCImportGuestIntrState(PVMCPUCC pVCpu, PCVMXVMCSINFO pVmcsInfo)
    33983399{
    33993400    uint32_t u32Val;
     
    34953496                if (fWhat & CPUMCTX_EXTRN_CS)
    34963497                {
    3497                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_CS);
    3498                     vmxHCImportGuestRip(pVCpu);
     3498                    vmxHCImportGuestSegReg<X86_SREG_CS>(pVCpu);
     3499                    vmxHCImportGuestRip(pVCpu); /** @todo WTF? */
    34993500                    if (fRealOnV86Active)
    35003501                        pCtx->cs.Attr.u = pVmcsInfoShared->RealMode.AttrCS.u;
     
    35033504                if (fWhat & CPUMCTX_EXTRN_SS)
    35043505                {
    3505                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_SS);
     3506                    vmxHCImportGuestSegReg<X86_SREG_SS>(pVCpu);
    35063507                    if (fRealOnV86Active)
    35073508                        pCtx->ss.Attr.u = pVmcsInfoShared->RealMode.AttrSS.u;
     
    35093510                if (fWhat & CPUMCTX_EXTRN_DS)
    35103511                {
    3511                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_DS);
     3512                    vmxHCImportGuestSegReg<X86_SREG_DS>(pVCpu);
    35123513                    if (fRealOnV86Active)
    35133514                        pCtx->ds.Attr.u = pVmcsInfoShared->RealMode.AttrDS.u;
     
    35153516                if (fWhat & CPUMCTX_EXTRN_ES)
    35163517                {
    3517                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_ES);
     3518                    vmxHCImportGuestSegReg<X86_SREG_ES>(pVCpu);
    35183519                    if (fRealOnV86Active)
    35193520                        pCtx->es.Attr.u = pVmcsInfoShared->RealMode.AttrES.u;
     
    35213522                if (fWhat & CPUMCTX_EXTRN_FS)
    35223523                {
    3523                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_FS);
     3524                    vmxHCImportGuestSegReg<X86_SREG_FS>(pVCpu);
    35243525                    if (fRealOnV86Active)
    35253526                        pCtx->fs.Attr.u = pVmcsInfoShared->RealMode.AttrFS.u;
     
    35273528                if (fWhat & CPUMCTX_EXTRN_GS)
    35283529                {
    3529                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_GS);
     3530                    vmxHCImportGuestSegReg<X86_SREG_GS>(pVCpu);
    35303531                    if (fRealOnV86Active)
    35313532                        pCtx->gs.Attr.u = pVmcsInfoShared->RealMode.AttrGS.u;
     
    89108911                         | HMVMX_READ_GUEST_PHYSICAL_ADDR>(pVCpu, pVmxTransient);
    89118912    vmxHCImportGuestRip(pVCpu);
    8912     vmxHCImportGuestSegReg(pVCpu, X86_SREG_CS);
     8913    vmxHCImportGuestSegReg<X86_SREG_CS>(pVCpu;
    89138914
    89148915    /*
  • trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp

    r97056 r97060  
    44984498                if (fWhat & CPUMCTX_EXTRN_CS)
    44994499                {
    4500                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_CS);
     4500                    vmxHCImportGuestSegReg<X86_SREG_CS>(pVCpu);
    45014501                    vmxHCImportGuestRip(pVCpu);
    45024502                    if (fRealOnV86Active)
     
    45064506                if (fWhat & CPUMCTX_EXTRN_SS)
    45074507                {
    4508                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_SS);
     4508                    vmxHCImportGuestSegReg<X86_SREG_SS>(pVCpu);
    45094509                    if (fRealOnV86Active)
    45104510                        pCtx->ss.Attr.u = pVmcsInfoShared->RealMode.AttrSS.u;
     
    45124512                if (fWhat & CPUMCTX_EXTRN_DS)
    45134513                {
    4514                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_DS);
     4514                    vmxHCImportGuestSegReg<X86_SREG_DS>(pVCpu);
    45154515                    if (fRealOnV86Active)
    45164516                        pCtx->ds.Attr.u = pVmcsInfoShared->RealMode.AttrDS.u;
     
    45184518                if (fWhat & CPUMCTX_EXTRN_ES)
    45194519                {
    4520                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_ES);
     4520                    vmxHCImportGuestSegReg<X86_SREG_ES>(pVCpu);
    45214521                    if (fRealOnV86Active)
    45224522                        pCtx->es.Attr.u = pVmcsInfoShared->RealMode.AttrES.u;
     
    45244524                if (fWhat & CPUMCTX_EXTRN_FS)
    45254525                {
    4526                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_FS);
     4526                    vmxHCImportGuestSegReg<X86_SREG_FS>(pVCpu);
    45274527                    if (fRealOnV86Active)
    45284528                        pCtx->fs.Attr.u = pVmcsInfoShared->RealMode.AttrFS.u;
     
    45304530                if (fWhat & CPUMCTX_EXTRN_GS)
    45314531                {
    4532                     vmxHCImportGuestSegReg(pVCpu, X86_SREG_GS);
     4532                    vmxHCImportGuestSegReg<X86_SREG_GS>(pVCpu);
    45334533                    if (fRealOnV86Active)
    45344534                        pCtx->gs.Attr.u = pVmcsInfoShared->RealMode.AttrGS.u;
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