VirtualBox

Changeset 108708 in vbox for trunk/include


Ignore:
Timestamp:
Mar 24, 2025 9:16:43 AM (4 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
168125
Message:

VMM: Introduce VMM_HOST_PAGE_SIZE_DYNAMIC, HOST_PAGE_SIZE_DYNAMIC, and HOST_PAGE_SHIFT_DYNAMIC, bugref:10391

HOST_PAGE_SIZE_DYNAMIC either resolves to HOST_PAGE_SIZE or calls RTSystemGetPageSize() on hosts where
the system page size is not known during build time (linux.arm64 for now).
HOST_PAGE_SHIFT_DYNAMIC is the same for the page shift.

This allows building VMM libraries which are agnostic to the host page size (at the cost of a slightly
larger overhead).

Currently enabled only on linux.arm64

Location:
trunk/include/VBox
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/param.h

    r107171 r108708  
    4444#include <iprt/param.h>
    4545#include <iprt/cdefs.h>
     46#ifdef VMM_HOST_PAGE_SIZE_DYNAMIC
     47# include <iprt/system.h>
     48#endif
    4649
    4750
     
    6770
    6871
     72/** The host page size which can be dynamic on certain hosts, linux.arm64 for instance */
     73#ifdef VMM_HOST_PAGE_SIZE_DYNAMIC
     74# define HOST_PAGE_SIZE_DYNAMIC     RTSystemGetPageSize()
     75#else
     76# define HOST_PAGE_SIZE_DYNAMIC     HOST_PAGE_SIZE
     77#endif
     78/** The host page shift which can be dynamic on certain hosts, linux.arm64 for instance */
     79#ifdef VMM_HOST_PAGE_SIZE_DYNAMIC
     80# define HOST_PAGE_SHIFT_DYNAMIC     RTSystemGetPageShift()
     81#else
     82# define HOST_PAGE_SHIFT_DYNAMIC     HOST_PAGE_SHIFT
     83#endif
     84
     85
     86/** The maximum memory size that can be allocated and mapped
     87 * by various MM, PGM and SUP APIs. */
     88#define VBOX_MAX_ALLOC_SIZE          _512M
     89
     90
    6991/** The maximum number of pages that can be allocated and mapped
    7092 * by various MM, PGM and SUP APIs. */
    7193#if ARCH_BITS == 64
    72 # define VBOX_MAX_ALLOC_PAGE_COUNT   (_512M / PAGE_SIZE)
    73 #else
    74 # define VBOX_MAX_ALLOC_PAGE_COUNT   (_256M / PAGE_SIZE)
     94# define VBOX_MAX_ALLOC_PAGE_COUNT   (VBOX_MAX_ALLOC_SIZE / PAGE_SIZE)
     95#else
     96# define VBOX_MAX_ALLOC_PAGE_COUNT   (_256M / PAGE_SIZE) /** @todo r=aeichner Remove? */
    7597#endif
    7698
  • trunk/include/VBox/vmm/uvm.h

    r106061 r108708  
    4040#endif
    4141
     42#include <VBox/param.h>
    4243#include <VBox/types.h>
    4344#include <iprt/assert.h>
     
    177178 */
    178179#define UVM_ASSERT_VALID_EXT_RETURN(a_pUVM, a_rc) \
    179         AssertMsgReturn(    RT_VALID_ALIGNED_PTR(a_pUVM, PAGE_SIZE) \
     180        AssertMsgReturn(    RT_VALID_ALIGNED_PTR(a_pUVM, HOST_PAGE_SIZE_DYNAMIC) \
    180181                        &&  (a_pUVM)->u32Magic == UVM_MAGIC, \
    181182                        ("a_pUVM=%p u32Magic=%#x\n", (a_pUVM), \
    182                          RT_VALID_ALIGNED_PTR(a_pUVM, PAGE_SIZE) ? (a_pUVM)->u32Magic : 0), \
     183                         RT_VALID_ALIGNED_PTR(a_pUVM, HOST_PAGE_SIZE_DYNAMIC) ? (a_pUVM)->u32Magic : 0), \
    183184                        (a_rc))
    184185/** @def UVM_ASSERT_VALID_EXT_RETURN
     
    186187 */
    187188#define UVM_ASSERT_VALID_EXT_RETURN_VOID(a_pUVM) \
    188         AssertMsgReturnVoid(    RT_VALID_ALIGNED_PTR(a_pUVM, PAGE_SIZE) \
     189        AssertMsgReturnVoid(    RT_VALID_ALIGNED_PTR(a_pUVM, HOST_PAGE_SIZE_DYNAMIC) \
    189190                            &&  (a_pUVM)->u32Magic == UVM_MAGIC, \
    190191                            ("a_pUVM=%p u32Magic=%#x\n", (a_pUVM), \
    191                              RT_VALID_ALIGNED_PTR(a_pUVM, PAGE_SIZE) ? (a_pUVM)->u32Magic : 0))
     192                             RT_VALID_ALIGNED_PTR(a_pUVM, HOST_PAGE_SIZE_DYNAMIC) ? (a_pUVM)->u32Magic : 0))
    192193
    193194/** @} */
  • trunk/include/VBox/vmm/vm.h

    r107904 r108708  
    5151# include <VBox/vmm/vmapi.h>
    5252# include <VBox/vmm/vmm.h>
     53# include <VBox/param.h>
    5354# include <VBox/sup.h>
    5455#else
     
    11691170#ifdef VMTARGET_DEFAULT
    11701171# define VM_IS_VALID_EXT(pVM) \
    1171         (   RT_VALID_ALIGNED_PTR(pVM, PAGE_SIZE) \
     1172        (   RT_VALID_ALIGNED_PTR(pVM, HOST_PAGE_SIZE_DYNAMIC) \
    11721173         && (   (unsigned)(pVM)->enmVMState < (unsigned)VMSTATE_DESTROYING \
    11731174             || (   (unsigned)(pVM)->enmVMState == (unsigned)VMSTATE_DESTROYING \
     
    11761177#else
    11771178# define VM_IS_VALID_EXT(pVM) \
    1178         (   RT_VALID_ALIGNED_PTR(pVM, PAGE_SIZE) \
     1179        (   RT_VALID_ALIGNED_PTR(pVM, HOST_PAGE_SIZE_DYNAMIC) \
    11791180         && (   (unsigned)(pVM)->enmVMState < (unsigned)VMSTATE_DESTROYING \
    11801181             || (   (unsigned)(pVM)->enmVMState == (unsigned)VMSTATE_DESTROYING \
     
    11881189#define VM_ASSERT_VALID_EXT_RETURN(pVM, rc) \
    11891190        AssertMsgReturn(VM_IS_VALID_EXT(pVM), \
    1190                         ("pVM=%p state %s enmTarget=%#x\n", (pVM), RT_VALID_ALIGNED_PTR(pVM, PAGE_SIZE) \
     1191                        ("pVM=%p state %s enmTarget=%#x\n", (pVM), RT_VALID_ALIGNED_PTR(pVM, HOST_PAGE_SIZE_DYNAMIC) \
    11911192                         ? VMGetStateName(pVM->enmVMState) : "", (pVM)->enmTarget), \
    11921193                        (rc))
     
    11981199# define VMCPU_IS_VALID_EXT(a_pVCpu) \
    11991200        (   RT_VALID_ALIGNED_PTR(a_pVCpu, 64) \
    1200          && RT_VALID_ALIGNED_PTR((a_pVCpu)->CTX_SUFF(pVM), PAGE_SIZE) \
     1201         && RT_VALID_ALIGNED_PTR((a_pVCpu)->CTX_SUFF(pVM), HOST_PAGE_SIZE_DYNAMIC) \
    12011202         && (unsigned)(a_pVCpu)->CTX_SUFF(pVM)->enmVMState < (unsigned)VMSTATE_DESTROYING \
    12021203         && (pVM)->enmTarget == VMTARGET_DEFAULT)
     
    12041205# define VMCPU_IS_VALID_EXT(a_pVCpu) \
    12051206        (   RT_VALID_ALIGNED_PTR(a_pVCpu, 64) \
    1206          && RT_VALID_ALIGNED_PTR((a_pVCpu)->CTX_SUFF(pVM), PAGE_SIZE) \
     1207         && RT_VALID_ALIGNED_PTR((a_pVCpu)->CTX_SUFF(pVM), HOST_PAGE_SIZE_DYNAMIC) \
    12071208         && (unsigned)(a_pVCpu)->CTX_SUFF(pVM)->enmVMState < (unsigned)VMSTATE_DESTROYING)
    12081209#endif
     
    12161217                        ("pVCpu=%p pVM=%p state %s enmTarget=%#x\n", (pVCpu), \
    12171218                        RT_VALID_ALIGNED_PTR(pVCpu, 64) ? (pVCpu)->CTX_SUFF(pVM) : NULL, \
    1218                          RT_VALID_ALIGNED_PTR(pVCpu, 64) && RT_VALID_ALIGNED_PTR((pVCpu)->CTX_SUFF(pVM), PAGE_SIZE) \
     1219                         RT_VALID_ALIGNED_PTR(pVCpu, 64) && RT_VALID_ALIGNED_PTR((pVCpu)->CTX_SUFF(pVM), HOST_PAGE_SIZE_DYNAMIC) \
    12191220                         ? VMGetStateName((pVCpu)->pVMR3->enmVMState) : "", (pVCpu)->enmTarget), \
    12201221                        (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