VirtualBox

Changeset 42705 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Aug 9, 2012 8:04:22 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
79911
Message:

CPUM: Set FF when needed (VBOX_WITH_IEM only). Made CPUMRawSetEFlags generally accessible.

File:
1 edited

Legend:

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

    r42647 r42705  
    543543VMMDECL(int) CPUMSetGuestGDTR(PVMCPU pVCpu, uint64_t GCPtrBase, uint16_t cbLimit)
    544544{
     545#ifdef VBOX_WITH_IEM
     546# ifdef VBOX_WITH_RAW_MODE_NOT_R0
     547    if (!HWACCMIsEnabled(pVCpu->CTX_SUFF(pVM)))
     548        VMCPU_FF_SET(pVCpu, VMCPU_FF_SELM_SYNC_GDT);
     549# endif
     550#endif
    545551    pVCpu->cpum.s.Guest.gdtr.cbGdt = cbLimit;
    546552    pVCpu->cpum.s.Guest.gdtr.pGdt  = GCPtrBase;
     
    551557VMMDECL(int) CPUMSetGuestIDTR(PVMCPU pVCpu, uint64_t GCPtrBase, uint16_t cbLimit)
    552558{
     559#ifdef VBOX_WITH_IEM
     560# ifdef VBOX_WITH_RAW_MODE_NOT_R0
     561    if (!HWACCMIsEnabled(pVCpu->CTX_SUFF(pVM)))
     562        VMCPU_FF_SET(pVCpu, VMCPU_FF_TRPM_SYNC_IDT);
     563# endif
     564#endif
    553565    pVCpu->cpum.s.Guest.idtr.cbIdt = cbLimit;
    554566    pVCpu->cpum.s.Guest.idtr.pIdt  = GCPtrBase;
     
    559571VMMDECL(int) CPUMSetGuestTR(PVMCPU pVCpu, uint16_t tr)
    560572{
     573#ifdef VBOX_WITH_IEM
     574# ifdef VBOX_WITH_RAW_MODE_NOT_R0
     575    if (!HWACCMIsEnabled(pVCpu->CTX_SUFF(pVM)))
     576        VMCPU_FF_SET(pVCpu, VMCPU_FF_SELM_SYNC_TSS);
     577# endif
     578#endif
    561579    pVCpu->cpum.s.Guest.tr.Sel  = tr;
    562580    pVCpu->cpum.s.fChanged |= CPUM_CHANGED_TR;
     
    566584VMMDECL(int) CPUMSetGuestLDTR(PVMCPU pVCpu, uint16_t ldtr)
    567585{
     586#ifdef VBOX_WITH_IEM
     587# ifdef VBOX_WITH_RAW_MODE_NOT_R0
     588    if (   (   ldtr != 0
     589            || pVCpu->cpum.s.Guest.ldtr.Sel != 0)
     590        && !HWACCMIsEnabled(pVCpu->CTX_SUFF(pVM)))
     591        VMCPU_FF_SET(pVCpu, VMCPU_FF_SELM_SYNC_LDT);
     592# endif
     593#endif
    568594    pVCpu->cpum.s.Guest.ldtr.Sel      = ldtr;
    569595    /* The caller will set more hidden bits if it has them. */
     
    24192445#endif
    24202446
    2421 #ifdef VBOX_WITH_RAW_MODE_NOT_R0
     2447
    24222448/**
    24232449 * Updates the EFLAGS while we're in raw-mode.
     
    24282454VMMDECL(void) CPUMRawSetEFlags(PVMCPU pVCpu, uint32_t fEfl)
    24292455{
    2430     if (!pVCpu->cpum.s.fRawEntered)
     2456#ifdef VBOX_WITH_RAW_MODE_NOT_R0
     2457    if (pVCpu->cpum.s.fRawEntered)
     2458        PATMRawSetEFlags(pVCpu->CTX_SUFF(pVM), CPUMCTX2CORE(&pVCpu->cpum.s.Guest), fEfl);
     2459    else
     2460#endif
    24312461        pVCpu->cpum.s.Guest.eflags.u32 = fEfl;
    2432     else
    2433         PATMRawSetEFlags(pVCpu->CTX_SUFF(pVM), CPUMCTX2CORE(&pVCpu->cpum.s.Guest), fEfl);
    2434 }
    2435 #endif /* VBOX_WITH_RAW_MODE_NOT_R0 */
     2462}
    24362463
    24372464
     
    24442471VMMDECL(uint32_t) CPUMRawGetEFlags(PVMCPU pVCpu)
    24452472{
    2446 #ifdef IN_RING0
     2473#ifdef VBOX_WITH_RAW_MODE_NOT_R0
     2474    if (pVCpu->cpum.s.fRawEntered)
     2475        return PATMRawGetEFlags(pVCpu->CTX_SUFF(pVM), CPUMCTX2CORE(&pVCpu->cpum.s.Guest));
     2476#endif
    24472477    return pVCpu->cpum.s.Guest.eflags.u32;
    2448 #else
    2449 
    2450     if (!pVCpu->cpum.s.fRawEntered)
    2451         return pVCpu->cpum.s.Guest.eflags.u32;
    2452     return PATMRawGetEFlags(pVCpu->CTX_SUFF(pVM), CPUMCTX2CORE(&pVCpu->cpum.s.Guest));
    2453 #endif
    24542478}
    24552479
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