Pyrogenesis  trunk
Namespaces | Functions | Variables
wvm.cpp File Reference
#include "precompiled.h"
#include "lib/sysdep/vm.h"
#include "lib/sysdep/os/win/wutil.h"
#include <excpt.h>
#include "lib/timer.h"
#include "lib/bits.h"
#include "lib/alignment.h"
#include "lib/module_init.h"
#include "lib/sysdep/cpu.h"
#include "lib/sysdep/numa.h"
#include "lib/sysdep/arch/x86_x64/x86_x64.h"
#include "lib/sysdep/arch/x86_x64/apic.h"
#include "lib/sysdep/os/win/wversion.h"
#include "lib/sysdep/os/win/winit.h"
Include dependency graph for wvm.cpp:

Namespaces

 vm
 

Functions

 WINIT_REGISTER_CRITICAL_INIT (wvm_Init)
 
static WUTIL_FUNC (pGetCurrentProcessorNumber, DWORD,(VOID))
 
static WUTIL_FUNC (pGetNumaProcessorNode, BOOL,(UCHAR, PUCHAR))
 
static WUTIL_FUNC (pVirtualAllocExNuma, LPVOID,(HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD))
 
static DWORD WINAPI EmulateGetCurrentProcessorNumber (VOID)
 
static BOOL WINAPI EmulateGetNumaProcessorNode (UCHAR processor, PUCHAR node)
 
static LPVOID WINAPI EmulateVirtualAllocExNuma (HANDLE hProcess, LPVOID p, SIZE_T size, DWORD allocationType, DWORD protect, DWORD node)
 
static Status wvm_Init ()
 
 vm::CACHE_ALIGNED (struct Statistics)
 
void vm::DumpStatistics ()
 
static bool vm::ShouldUseLargePages (size_t allocationSize, DWORD allocationType, PageType pageType)
 
static void * vm::AllocateLargeOrSmallPages (uintptr_t address, size_t size, DWORD allocationType, PageType pageType=kDefault, int prot=PROT_READ|PROT_WRITE)
 
 vm::CACHE_ALIGNED (struct AddressRangeDescriptor)
 
static AddressRangeDescriptor * vm::FindDescriptor (uintptr_t address)
 
void * vm::ReserveAddressSpace (size_t size, size_t commitSize=g_LargePageSize, PageType pageType=kDefault, int prot=PROT_READ|PROT_WRITE)
 reserve address space and set the parameters for any later on-demand commits. More...
 
void vm::ReleaseAddressSpace (void *p, size_t size=0)
 release address space and decommit any memory. More...
 
 vm::TIMER_ADD_CLIENT (tc_commit)
 
bool vm::Commit (uintptr_t address, size_t size, PageType pageType=kDefault, int prot=PROT_READ|PROT_WRITE)
 map physical memory to previously reserved address space. More...
 
bool vm::Decommit (uintptr_t address, size_t size)
 unmap physical memory. More...
 
bool vm::Protect (uintptr_t address, size_t size, int prot)
 set the memory protection flags for all pages that intersect the given interval. More...
 
void * vm::Allocate (size_t size, PageType pageType=kDefault, int prot=PROT_READ|PROT_WRITE)
 reserve address space and commit memory. More...
 
void vm::Free (void *p, size_t size=0)
 decommit memory and release address space. More...
 
static LONG CALLBACK vm::VectoredHandler (const PEXCEPTION_POINTERS ep)
 
static Status vm::InitHandler ()
 
static void vm::ShutdownHandler ()
 
void vm::BeginOnDemandCommits ()
 install a handler that attempts to commit memory whenever a read/write page fault is encountered. More...
 
void vm::EndOnDemandCommits ()
 decrements the reference count begun by BeginOnDemandCommit and removes the page fault handler when it reaches 0. More...
 

Variables

static bool vm::largePageAllocationTookTooLong = false
 
static AddressRangeDescriptor vm::ranges [2 *os_cpu_MaxProcessors]
 
static PVOID vm::handler
 
static ModuleInitState vm::initState
 
static volatile intptr_t vm::references = 0
 

Function Documentation

◆ EmulateGetCurrentProcessorNumber()

static DWORD WINAPI EmulateGetCurrentProcessorNumber ( VOID  )
static

◆ EmulateGetNumaProcessorNode()

static BOOL WINAPI EmulateGetNumaProcessorNode ( UCHAR  processor,
PUCHAR  node 
)
static

◆ EmulateVirtualAllocExNuma()

static LPVOID WINAPI EmulateVirtualAllocExNuma ( HANDLE  hProcess,
LPVOID  p,
SIZE_T  size,
DWORD  allocationType,
DWORD  protect,
DWORD  node 
)
static

◆ WINIT_REGISTER_CRITICAL_INIT()

WINIT_REGISTER_CRITICAL_INIT ( wvm_Init  )

◆ WUTIL_FUNC() [1/3]

static WUTIL_FUNC ( pGetCurrentProcessorNumber  ,
DWORD  ,
(VOID)   
)
static

◆ WUTIL_FUNC() [2/3]

static WUTIL_FUNC ( pGetNumaProcessorNode  ,
BOOL  ,
(UCHAR, PUCHAR)   
)
static

◆ WUTIL_FUNC() [3/3]

static WUTIL_FUNC ( pVirtualAllocExNuma  ,
LPVOID  ,
(HANDLE, LPVOID, SIZE_T, DWORD, DWORD, DWORD)   
)
static

◆ wvm_Init()

static Status wvm_Init ( )
static