VirtualBox

Changeset 12692 in vbox for trunk/src/VBox/VMM/VMMR0


Ignore:
Timestamp:
Sep 24, 2008 2:54:14 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
36998
Message:

Backed out paging changes (36990/86/83).

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp

    r12681 r12692  
    655655            switch(pVM->hwaccm.s.enmShadowMode)
    656656            {
     657            case PGMMODE_REAL:
     658            case PGMMODE_PROTECTED:     /* Protected mode, no paging. */
     659                AssertFailed();
     660                return VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE;
     661
    657662            case PGMMODE_32_BIT:        /* 32-bit paging. */
    658663                break;
     
    673678#endif
    674679
    675             case PGMMODE_REAL:          /* Real mode                 -> emulated using v86 mode */
    676             case PGMMODE_PROTECTED:     /* Protected mode, no paging -> emulated using identity mapping. */
    677680            default:                    /* shut up gcc */
    678681                AssertFailed();
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r12687 r12692  
    788788            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_LIMIT,         sizeof(VBOXTSS));
    789789            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,          GCPhys /* phys = virt in this mode */);
    790 
    791             val = X86_DESC_P | X86_SEL_TYPE_SYS_386_TSS_BUSY;
    792790        }
    793791        else
     
    795793            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_LIMIT,         pCtx->trHid.u32Limit);
    796794            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,          pCtx->trHid.u64Base);
    797 
    798             val = pCtx->trHid.Attr.u;
    799 
    800             /* The TSS selector must be busy. */
    801             if ((val & 0xF) == X86_SEL_TYPE_SYS_286_TSS_AVAIL)
    802                 val = (val & ~0xF) | X86_SEL_TYPE_SYS_286_TSS_BUSY;
    803             else
    804                 /* Default even if no TR selector has been set (otherwise vmlaunch will fail!) */
    805                 val = (val & ~0xF) | X86_SEL_TYPE_SYS_386_TSS_BUSY;
    806         }
     795        }
     796        val = pCtx->trHid.Attr.u;
     797
     798        /* The TSS selector must be busy. */
     799        if ((val & 0xF) == X86_SEL_TYPE_SYS_286_TSS_AVAIL)
     800            val = (val & ~0xF) | X86_SEL_TYPE_SYS_286_TSS_BUSY;
     801        else
     802            /* Default even if no TR selector has been set (otherwise vmlaunch will fail!) */
     803            val = (val & ~0xF) | X86_SEL_TYPE_SYS_386_TSS_BUSY;
    807804
    808805        rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_ACCESS_RIGHTS, val);
     
    899896        switch(pVM->hwaccm.s.enmShadowMode)
    900897        {
     898        case PGMMODE_REAL:          /* Real mode                 -> emulated using v86 mode */
     899        case PGMMODE_PROTECTED:     /* Protected mode, no paging -> emulated using identity mapping. */
    901900        case PGMMODE_32_BIT:        /* 32-bit paging. */
    902901            break;
     
    916915            return VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE;
    917916#endif
    918         case PGMMODE_REAL:          /* Real mode                 -> emulated using v86 mode */
    919         case PGMMODE_PROTECTED:     /* Protected mode, no paging -> emulated using identity mapping. */
    920         default:                    /* shut up gcc */
     917        default:                   /* shut up gcc */
    921918            AssertFailed();
    922919            return VERR_PGM_UNSUPPORTED_SHADOW_PAGING_MODE;
    923920        }
    924         /* Real mode emulation using v86 mode with CR4.VME (interrupt redirection using the int bitmap in the TSS and VIF support) */
     921        /* Real mode emulation using v86 mode with CR4.VME (interrupt redirection using the int bitmap in the TSS) */
    925922        if (!(pCtx->cr0 & X86_CR0_PROTECTION_ENABLE))
    926923            val |= X86_CR4_VME;
     
    928925        rc |= VMXWriteVMCS(VMX_VMCS_GUEST_CR4,              val);
    929926        Log2(("Guest CR4 %08x\n", val));
    930         /* All CR4 flags owned by the host; if the guests attempts to change them, then
     927        /* CR4 flags owned by the host; if the guests attempts to change them, then
    931928         * the VM will exit.
    932929         */
    933         pVM->hwaccm.s.vmx.cr4_mask = ~0;
    934 
    935         rc |= VMXWriteVMCS(VMX_VMCS_CTRL_CR4_MASK, pVM->hwaccm.s.vmx.cr4_mask);
     930        val =   X86_CR4_PAE
     931              | X86_CR4_PGE
     932              | X86_CR4_PSE
     933              | X86_CR4_VMXE;
     934        pVM->hwaccm.s.vmx.cr4_mask = val;
     935
     936        rc |= VMXWriteVMCS(VMX_VMCS_CTRL_CR4_MASK, val);
    936937        Log2(("Guest CR4-mask %08x\n", val));
    937938        AssertRC(rc);
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