VirtualBox

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


Ignore:
Timestamp:
Oct 17, 2022 10:27:05 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154158
Message:

VMM/CPUM,HMVMX,IEM: Use the individual CPUMCTX_INHIBIT_SHADOW_SS and CPUMCTX_INHIBIT_SHADOW_STI flags with IEM (only setting), VT-x and NEM/kvm. bugref:9941

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

Legend:

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

    r97178 r97183  
    30893089 *
    30903090 * @param   pszEFlags   Where to write the mnemonics. (Assumes sufficient buffer space.)
    3091  * @param   efl         The EFLAGS value.
     3091 * @param   efl         The EFLAGS value with fInhibit in bits 31:24.
    30923092 */
    30933093static void cpumR3InfoFormatFlags(char *pszEFlags, uint32_t efl)
     
    31163116        { "po", "pe", X86_EFL_PF },
    31173117        { "cy", "nc", X86_EFL_CF },
     3118        { "inh-ss",  NULL, (uint32_t)CPUMCTX_INHIBIT_SHADOW_SS  << 24 },
     3119        { "inh-sti", NULL, (uint32_t)CPUMCTX_INHIBIT_SHADOW_STI << 24 },
     3120        { "inh-nmi", NULL, (uint32_t)CPUMCTX_INHIBIT_NMI        << 24 },
    31183121    };
    31193122    char *psz = pszEFlags;
     
    31523155    uint32_t efl = pCtxCore->eflags.u32;
    31533156    char szEFlags[80];
    3154     cpumR3InfoFormatFlags(&szEFlags[0], efl);
     3157    cpumR3InfoFormatFlags(&szEFlags[0], efl | ((uint32_t)pCtx->fInhibit << 24));
    31553158
    31563159    /*
  • trunk/src/VBox/VMM/VMMR3/NEMR3Native-linux.cpp

    r97178 r97183  
    14761476            pVCpu->cpum.GstCtx.rip = pRun->s.regs.regs.rip;
    14771477
    1478         CPUMUpdateInterruptShadowEx(&pVCpu->cpum.GstCtx, KvmEvents.interrupt.shadow != 0, pVCpu->cpum.GstCtx.rip);
     1478        CPUMUpdateInterruptShadowSsStiEx(&pVCpu->cpum.GstCtx,
     1479                                         RT_BOOL(KvmEvents.interrupt.shadow & KVM_X86_SHADOW_INT_MOV_SS),
     1480                                         RT_BOOL(KvmEvents.interrupt.shadow & KVM_X86_SHADOW_INT_STI),
     1481                                         pVCpu->cpum.GstCtx.rip);
    14791482        CPUMUpdateInterruptInhibitingByNmi(&pVCpu->cpum.GstCtx, KvmEvents.nmi.masked != 0);
    14801483
     
    18651868        { /* probably likely */ }
    18661869        else
    1867             KvmEvents.interrupt.shadow = KVM_X86_SHADOW_INT_MOV_SS | KVM_X86_SHADOW_INT_STI;
     1870            KvmEvents.interrupt.shadow = (CPUMIsInInterruptShadowAfterSs()  ? KVM_X86_SHADOW_INT_MOV_SS : 0)
     1871                                       | (CPUMIsInInterruptShadowAfterSti() ? KVM_X86_SHADOW_INT_STI    : 0);
    18681872
    18691873        /* No flag - this is updated unconditionally. */
     
    20492053    if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_INHIBIT_INT))
    20502054        KvmEvents.interrupt.shadow = !CPUMIsInInterruptShadowWithUpdate(&pVCpu->cpum.GstCtx) ? 0
    2051                                    : KVM_X86_SHADOW_INT_MOV_SS | KVM_X86_SHADOW_INT_STI;
     2055                                   :   (CPUMIsInInterruptShadowAfterSs()  ? KVM_X86_SHADOW_INT_MOV_SS : 0)
     2056                                     | (CPUMIsInInterruptShadowAfterSti() ? KVM_X86_SHADOW_INT_STI    : 0);
    20522057    else
    2053         CPUMUpdateInterruptShadowEx(&pVCpu->cpum.GstCtx, KvmEvents.interrupt.shadow != 0, pRun->s.regs.regs.rip);
     2058        CPUMUpdateInterruptShadowSsStiEx(&pVCpu->cpum.GstCtx,
     2059                                         RT_BOOL(KvmEvents.interrupt.shadow & KVM_X86_SHADOW_INT_MOV_SS),
     2060                                         RT_BOOL(KvmEvents.interrupt.shadow & KVM_X86_SHADOW_INT_MOV_STI),
     2061                                         pRun->s.regs.regs.rip);
    20542062
    20552063    if (!(pVCpu->cpum.GstCtx.fExtrn & CPUMCTX_EXTRN_INHIBIT_NMI))
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