VirtualBox

Changeset 20026 in vbox


Ignore:
Timestamp:
May 26, 2009 11:41:27 AM (16 years ago)
Author:
vboxsync
Message:

Testing AMD IO-APIC patching

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/HWACCM.cpp

    r19908 r20026  
    619619    Assert(!pVM->fHWACCMEnabled || VMMIsHwVirtExtForced(pVM));
    620620
     621    pVM->hwaccm.s.fHasIoApic = PDMHasIoApic(pVM);
     622
    621623    if (pVM->hwaccm.s.vmx.fSupported)
    622624    {
  • trunk/src/VBox/VMM/HWACCMInternal.h

    r19992 r20026  
    205205    bool                        fAllow64BitGuests;
    206206
     207    /** Set if an IO-APIC is configured for this VM. */
     208    bool                        fHasIoApic;
     209
    207210    /** Explicit alignment padding to make 32-bit gcc align u64RegisterMask
    208211     *  naturally. */
    209     bool                        padding[2];
     212    bool                        padding[1];
    210213
    211214    /** And mask for copying register contents. */
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp

    r20001 r20026  
    14531453            Assert(!pVM->hwaccm.s.fNestedPaging);
    14541454
     1455#if 0
     1456            /* Shortcut for APIC TPR reads and writes; 32 bits guests only */
     1457            if (    (uFaultAddress & 0xfff) == 0x080
     1458                &&  pVM->hwaccm.s.fHasIoApic
     1459                &&  !(errCode & X86_TRAP_PF_P)  /* not present */
     1460                &&  !CPUMIsGuestInLongModeEx(pCtx))
     1461            {
     1462                RTGCPHYS GCPhysApicBase, GCPhys;
     1463                PDMApicGetBase(pVM, &GCPhysApicBase);   /* @todo cache this */
     1464                GCPhysApicBase &= PAGE_BASE_GC_MASK;
     1465
     1466                rc = PGMGstGetPage(pVCpu, (RTGCPTR)uFaultAddress, NULL, &GCPhys);
     1467                if (    rc == VINF_SUCCESS
     1468                    &&  GCPhys == GCPhysApicBase)
     1469                {
     1470                    Log(("Replace TPR access at %RGv\n", pCtx->rip));
     1471
     1472                    DISCPUSTATE Cpu;
     1473                    unsigned cbOp;
     1474                    rc = EMInterpretDisasOne(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu, &cbOp);
     1475                    AssertRC(rc);
     1476                    if (    rc == VINF_SUCCESS
     1477                        &&  Cpu.pCurInstr->opcode == OP_MOV
     1478                        &&  cbOp == 6)
     1479                    {
     1480                        if (    (errCode & X86_TRAP_PF_RW)
     1481                            &&  Cpu.param1.parval == uFaultAddress)
     1482                        {
     1483                            Log(("Acceptable write candidate!\n"));
     1484                        }
     1485                        else
     1486                        if (Cpu.param2.parval == uFaultAddress)
     1487                        {
     1488                            Log(("Acceptable read candidate!\n"));
     1489                        }
     1490                    }
     1491
     1492                }
     1493            }
     1494#endif
     1495
    14551496            Log2(("Page fault at %RGv cr2=%RGv error code %x\n", (RTGCPTR)pCtx->rip, uFaultAddress, errCode));
    14561497            /* Exit qualification contains the linear address of the page fault. */
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r20007 r20026  
    431431#endif /* HWACCM_VTX_WITH_VPID */
    432432
    433             if (PDMHasIoApic(pVM))
     433            if (pVM->hwaccm.s.fHasIoApic)
    434434                val |= VMX_VMCS_CTRL_PROC_EXEC2_VIRT_APIC;
    435435           
     
    20172017    if (    CPUMIsGuestInLongModeEx(pCtx)
    20182018        || (   (pVM->hwaccm.s.vmx.msr.vmx_proc_ctls2.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_VIRT_APIC)
    2019             && PDMHasIoApic(pVM))
     2019            &&  pVM->hwaccm.s.fHasIoApic)
    20202020       )
    20212021    {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette