VirtualBox

Changeset 30180 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Jun 14, 2010 2:13:50 PM (15 years ago)
Author:
vboxsync
Message:

Make 32->64 switcher SMP aware.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/CPUMInternal.mac

    r30164 r30180  
    436436
    437437;;
    438 ; Converts the CPUMCPU pointer to CPUM (for the first VMCPU)
     438; Converts the CPUM pointer to CPUMCPU
     439; @param   %1   register name (PVM)
     440; @param   %2   register name (CPUMCPU offset)
     441%macro CPUMCPU_FROM_CPUM_WITH_OFFSET 2
     442    add     %1, %2
     443%endmacro
     444
     445;;
     446; Converts the CPUMCPU pointer to CPUM
    439447; @param   %1   register name
    440448%macro CPUM_FROM_CPUMCPU 1
  • trunk/src/VBox/VMM/HWACCMInternal.h

    r30105 r30180  
    231231 * Switcher function, HC to RC.
    232232 *
    233  * @param   pVM         The VM handle.
     233 * @param   pVM             The VM handle.
     234 * @param   uOffsetVMCPU    VMCPU offset from pVM
    234235 * @returns Return code indicating the action to take.
    235236 */
    236 typedef DECLASMTYPE(int) FNHWACCMSWITCHERHC(PVM pVM);
     237typedef VMMDECL(int) FNHWACCMSWITCHERHC(PVM pVM, uint32_t uOffsetVMCPU);
    237238/** Pointer to switcher function. */
    238239typedef FNHWACCMSWITCHERHC *PFNHWACCMSWITCHERHC;
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp

    r30165 r30180  
    28742874    STAM_PROFILE_ADV_START(&pVCpu->hwaccm.s.StatWorldSwitch3264, z);
    28752875    /* Call switcher. */
    2876     rc = pVM->hwaccm.s.pfnHost32ToGuest64R0(pVM);
     2876    rc = pVM->hwaccm.s.pfnHost32ToGuest64R0(pVM, RT_OFFSETOF(VM, aCpus[pVCpu->idCpu].cpum) - RT_OFFSETOF(VM, cpum));
    28772877    STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatWorldSwitch3264, z);
    28782878
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r30160 r30180  
    46194619    STAM_PROFILE_ADV_START(&pVCpu->hwaccm.s.StatWorldSwitch3264, z);
    46204620    /* Call switcher. */
    4621     rc = pVM->hwaccm.s.pfnHost32ToGuest64R0(pVM);
     4621    rc = pVM->hwaccm.s.pfnHost32ToGuest64R0(pVM, RT_OFFSETOF(VM, aCpus[pVCpu->idCpu].cpum) - RT_OFFSETOF(VM, cpum));
    46224622    STAM_PROFILE_ADV_STOP(&pVCpu->hwaccm.s.StatWorldSwitch3264, z);
    46234623
  • trunk/src/VBox/VMM/VMMSwitcher/LegacyandAMD64.mac

    r30146 r30180  
    5252;;
    5353; The C interface.
     54; @param    [esp + 04h]  Param 1 - VM handle
     55; @param    [esp + 08h]  Param 2 - VMCPU offset
    5456;
    5557BEGINPROC vmmR0HostToGuest
     
    6870 %endif
    6971
     72    push    ebp
     73    mov     ebp, [esp + 12]             ; VMCPU offset
     74
    7075    ; turn off interrupts
    7176    pushf
     
    8287    ; restore original flags
    8388    popf
     89    pop     ebp
    8490
    8591%ifdef VBOX_WITH_STATISTICS
     
    103109; INPUT:
    104110;       - edx       virtual address of CPUM structure (valid in host context)
     111;       - ebp       offset of the CPUMCPU structure
    105112;
    106113; USES/DESTROYS:
     
    117124    ;;      Skip eax, edx and ecx as these are not preserved over calls.
    118125    ;;
    119     CPUMCPU_FROM_CPUM(edx)
     126    CPUMCPU_FROM_CPUM_WITH_OFFSET edx, ebp
    120127%ifdef VBOX_WITH_CRASHDUMP_MAGIC
    121128    ; phys address of scratch page
     
    224231
    225232    ; 4. Enable long mode.
    226     mov     ebp, edx
     233    mov     esi, edx
    227234    mov     ecx, MSR_K6_EFER
    228235    rdmsr
     
    231238    and     eax, ~(MSR_K6_EFER_FFXSR) ; turn off fast fxsave/fxrstor (skipping xmm regs)
    232239    wrmsr
    233     mov     edx, ebp
     240    mov     edx, esi
    234241    DEBUG_CHAR('4')
    235242
     
    280287    ; Load CPUM pointer into rdx
    281288    mov     rdx, [NAME(pCpumIC) wrt rip]
    282     CPUMCPU_FROM_CPUM(edx)
     289    CPUMCPU_FROM_CPUM_WITH_OFFSET    edx, ebp
    283290
    284291    mov     rax, cs
     
    362369    ; Load CPUM pointer into rdx
    363370    mov     rdx, [NAME(pCpumIC) wrt rip]
    364     CPUMCPU_FROM_CPUM(edx)
     371    CPUMCPU_FROM_CPUM_WITH_OFFSET    edx, ebp
    365372
    366373%ifdef VBOX_WITH_CRASHDUMP_MAGIC
     
    507514    mov     es, eax
    508515
    509     FIXUP FIX_GC_CPUMCPU_OFF, 1, 0
     516    FIXUP FIX_GC_CPUM_OFF, 1, 0
    510517    mov     edx, 0ffffffffh
     518    CPUMCPU_FROM_CPUM_WITH_OFFSET    edx, ebp
    511519    mov     esi, [edx + CPUMCPU.Host.cr3]
    512520    mov     cr3, esi
     
    515523    FIXUP FIX_HC_CPUM_OFF, 1, 0
    516524    mov     edx, 0ffffffffh
    517     CPUMCPU_FROM_CPUM(edx)
     525    CPUMCPU_FROM_CPUM_WITH_OFFSET    edx, ebp
    518526
    519527    ; restore the host EFER
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