Changeset 100355 in vbox
- Timestamp:
- Jul 4, 2023 6:37:35 AM (17 months ago)
- Location:
- trunk
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/memobj.h
r98103 r100355 281 281 /** 282 282 * Allocates page aligned virtual kernel memory with contiguous physical backing 283 * below 4GB(default tag).283 * (default tag). 284 284 * 285 285 * The physical memory backing the allocation is fixed. … … 288 288 * @param pMemObj Where to store the ring-0 memory object handle. 289 289 * @param cb Number of bytes to allocate. This is rounded up to nearest page. 290 * @param PhysHighest The highest permitable address (inclusive). 291 * Pass NIL_RTHCPHYS if any address is acceptable. 290 292 * @param fExecutable Flag indicating whether it should be permitted to 291 293 * executed code in the memory object. The user must … … 293 295 * allocation to actually make it executable. 294 296 */ 295 #define RTR0MemObjAllocCont(pMemObj, cb, fExecutable) \296 RTR0MemObjAllocContTag((pMemObj), (cb), ( fExecutable), RTMEM_TAG)297 298 /** 299 * Allocates page aligned virtual kernel memory with contiguous physical backing300 * b elow 4GB(custom tag).297 #define RTR0MemObjAllocCont(pMemObj, cb, PhysHigest, fExecutable) \ 298 RTR0MemObjAllocContTag((pMemObj), (cb), (PhysHigest), (fExecutable), RTMEM_TAG) 299 300 /** 301 * Allocates page aligned virtual kernel memory with contiguous physical 302 * backing (custom tag). 301 303 * 302 304 * The physical memory backing the allocation is fixed. … … 305 307 * @param pMemObj Where to store the ring-0 memory object handle. 306 308 * @param cb Number of bytes to allocate. This is rounded up to nearest page. 309 * @param PhysHighest The highest permitable address (inclusive). 310 * Pass NIL_RTHCPHYS if any address is acceptable. 307 311 * @param fExecutable Flag indicating whether it should be permitted to 308 312 * executed code in the memory object. The user must … … 311 315 * @param pszTag Allocation tag used for statistics and such. 312 316 */ 313 RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag);317 RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, bool fExecutable, const char *pszTag); 314 318 315 319 /** -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku-stubs.c
r98103 r100355 174 174 return g_VBoxGuest->_RTR0MemObjAddressR3(MemObj); 175 175 } 176 RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag)177 { 178 return g_VBoxGuest->_RTR0MemObjAllocContTag(pMemObj, cb, fExecutable, pszTag);176 RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, bool fExecutable, const char *pszTag) 177 { 178 return g_VBoxGuest->_RTR0MemObjAllocContTag(pMemObj, cb, PhysHighest, fExecutable, pszTag); 179 179 } 180 180 RTR0DECL(int) RTR0MemObjAllocLowTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag) -
trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest-haiku.h
r98103 r100355 150 150 void* (*_RTR0MemObjAddress)(RTR0MEMOBJ MemObj); 151 151 RTR3PTR(*_RTR0MemObjAddressR3)(RTR0MEMOBJ MemObj); 152 int (*_RTR0MemObjAllocContTag)(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag);152 int (*_RTR0MemObjAllocContTag)(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, bool fExecutable, const char *pszTag); 153 153 int (*_RTR0MemObjAllocLowTag)(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag); 154 154 int (*_RTR0MemObjAllocPageTag)(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag); -
trunk/src/VBox/HostDrivers/Support/SUPDrv.cpp
r99421 r100355 454 454 SUPEXP_STK_OKAY( 1, RTR0MemObjAddress), 455 455 SUPEXP_STK_OKAY( 1, RTR0MemObjAddressR3), 456 SUPEXP_STK_BACK( 4, RTR0MemObjAllocContTag),456 SUPEXP_STK_BACK( 5, RTR0MemObjAllocContTag), 457 457 SUPEXP_STK_BACK( 5, RTR0MemObjAllocLargeTag), 458 458 SUPEXP_STK_BACK( 4, RTR0MemObjAllocLowTag), -
trunk/src/VBox/Runtime/include/internal/memobj.h
r98103 r100355 361 361 * @param ppMem Where to store the ring-0 memory object handle. 362 362 * @param cb Number of bytes to allocate, page aligned. 363 * @param PhysHighest The highest permitable address (inclusive). 364 * Pass NIL_RTHCPHYS if any address is acceptable. 363 365 * @param fExecutable Flag indicating whether it should be permitted to executed code in the memory object. 364 366 * @param pszTag Allocation tag used for statistics and such. 365 367 */ 366 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag); 368 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, 369 bool fExecutable, const char *pszTag); 367 370 368 371 /** -
trunk/src/VBox/Runtime/r0drv/darwin/memobj-r0drv-darwin.cpp
r98103 r100355 885 885 886 886 887 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag) 888 { 887 /** 888 * Translates the PhysHighest address into a mask. 889 */ 890 static mach_vm_address_t rtR0MemObjDarwinCalcPhysMask(RTHCPHYS PhysHighest, size_t uAlignment) 891 { 892 if (PhysHighest == NIL_RTHCPHYS) 893 return uAlignment <= PAGE_SIZE ? 0 : ~(mach_vm_address_t)(uAlignment - 1); 894 895 mach_vm_address_t PhysMask = ~(mach_vm_address_t)0; 896 while (PhysMask > (PhysHighest | PAGE_OFFSET_MASK)) 897 PhysMask >>= 1; 898 PhysMask &= ~(mach_vm_address_t)(uAlignment - 1); 899 900 return PhysMask; 901 } 902 903 904 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, 905 bool fExecutable, const char *pszTag) 906 { 907 mach_vm_address_t const PhysMask = rtR0MemObjDarwinCalcPhysMask(PhysHighest, PAGE_SIZE); 889 908 IPRT_DARWIN_SAVE_EFL_AC(); 890 909 891 int rc = rtR0MemObjNativeAllocWorker(ppMem, cb, fExecutable, true /* fContiguous */, 892 ~(uint32_t)PAGE_OFFSET_MASK, _4G - PAGE_SIZE, 910 int rc = rtR0MemObjNativeAllocWorker(ppMem, cb, fExecutable, true /* fContiguous */, PhysMask, PhysHighest, 893 911 RTR0MEMOBJTYPE_CONT, PAGE_SIZE, pszTag, false /*fOnKernelThread*/); 894 912 … … 898 916 */ 899 917 if (RT_FAILURE(rc) && cb <= PAGE_SIZE) 900 rc = rtR0MemObjNativeAllocWorker(ppMem, cb + PAGE_SIZE, fExecutable, true /* fContiguous */, 901 ~(uint32_t)PAGE_OFFSET_MASK, _4G - PAGE_SIZE, 918 rc = rtR0MemObjNativeAllocWorker(ppMem, cb + PAGE_SIZE, fExecutable, true /* fContiguous */, PhysMask, PhysHighest, 902 919 RTR0MEMOBJTYPE_CONT, PAGE_SIZE, pszTag, false /*fOnKernelThread*/); 903 920 IPRT_DARWIN_RESTORE_EFL_AC(); … … 915 932 return VERR_NOT_SUPPORTED; 916 933 } 934 mach_vm_address_t const PhysMask = rtR0MemObjDarwinCalcPhysMask(PhysHighest, uAlignment); 917 935 918 936 IPRT_DARWIN_SAVE_EFL_AC(); … … 923 941 int rc; 924 942 if (PhysHighest == NIL_RTHCPHYS) 925 rc = rtR0MemObjNativeAllocWorker(ppMem, cb, false /* fExecutable */, true /* fContiguous */, 926 uAlignment <= PAGE_SIZE ? 0 : ~(mach_vm_address_t)(uAlignment - 1) /* PhysMask*/, 927 UINT64_MAX, RTR0MEMOBJTYPE_PHYS, uAlignment, pszTag, false /*fOnKernelThread*/); 943 rc = rtR0MemObjNativeAllocWorker(ppMem, cb, false /* fExecutable */, true /* fContiguous */, PhysMask, UINT64_MAX, 944 RTR0MEMOBJTYPE_PHYS, uAlignment, pszTag, false /*fOnKernelThread*/); 928 945 else 929 946 { 930 mach_vm_address_t PhysMask = 0;931 PhysMask = ~(mach_vm_address_t)0;932 while (PhysMask > (PhysHighest | PAGE_OFFSET_MASK))933 PhysMask >>= 1;934 947 AssertReturn(PhysMask + 1 <= cb, VERR_INVALID_PARAMETER); 935 PhysMask &= ~(mach_vm_address_t)(uAlignment - 1); 936 937 rc = rtR0MemObjNativeAllocWorker(ppMem, cb, false /* fExecutable */, true /* fContiguous */, 938 PhysMask, PhysHighest, 948 rc = rtR0MemObjNativeAllocWorker(ppMem, cb, false /* fExecutable */, true /* fContiguous */, PhysMask, PhysHighest, 939 949 RTR0MEMOBJTYPE_PHYS, uAlignment, pszTag, false /*fOnKernelThread*/); 940 950 } -
trunk/src/VBox/Runtime/r0drv/freebsd/memobj-r0drv-freebsd.c
r98103 r100355 410 410 411 411 412 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag) 412 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHigest, 413 bool fExecutable, const char *pszTag) 413 414 { 414 415 PRTR0MEMOBJFREEBSD pMemFreeBSD = (PRTR0MEMOBJFREEBSD)rtR0MemObjNew(sizeof(*pMemFreeBSD), RTR0MEMOBJTYPE_CONT, … … 416 417 if (pMemFreeBSD) 417 418 { 418 int rc = rtR0MemObjFreeBSDAllocHelper(pMemFreeBSD, fExecutable, _4G - 1, true /*fContiguous*/, VERR_NO_CONT_MEMORY);419 int rc = rtR0MemObjFreeBSDAllocHelper(pMemFreeBSD, fExecutable, PhysHigest, true /*fContiguous*/, VERR_NO_CONT_MEMORY); 419 420 if (RT_SUCCESS(rc)) 420 421 { -
trunk/src/VBox/Runtime/r0drv/haiku/memobj-r0drv-haiku.c
r98103 r100355 277 277 278 278 279 int rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag)280 { 281 return rtR0MemObjNativeAllocArea(ppMem, cb, fExecutable, RTR0MEMOBJTYPE_CONT, 0 /* PhysHighest */, 0 /* uAlignment */, pszTag);279 int rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, bool fExecutable, const char *pszTag) 280 { 281 return rtR0MemObjNativeAllocArea(ppMem, cb, fExecutable, RTR0MEMOBJTYPE_CONT, PhysHighest, 0 /* uAlignment */, pszTag); 282 282 } 283 283 -
trunk/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
r100319 r100355 149 149 /** Pointer to the linux memory object. */ 150 150 typedef RTR0MEMOBJLNX *PRTR0MEMOBJLNX; 151 152 153 /********************************************************************************************************************************* 154 * Global Variables * 155 *********************************************************************************************************************************/ 156 /* 157 * Linux allows only a coarse selection of zones for 158 * allocations matching a particular maximum physical address. 159 * 160 * Sorted from high to low physical address! 161 */ 162 static const struct 163 { 164 RTHCPHYS PhysHighest; 165 gfp_t fGfp; 166 } g_aZones[] = 167 { 168 { NIL_RTHCPHYS, GFP_KERNEL }, 169 #if (defined(RT_ARCH_AMD64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32) 170 { _4G - 1, GFP_DMA32 }, /* ZONE_DMA32: 0-4GB */ 171 #elif defined(RT_ARCH_ARM32) || defined(RT_ARCH_ARM64) 172 { _4G - 1, GFP_DMA }, /* ZONE_DMA: 0-4GB */ 173 #endif 174 #if defined(RT_ARCH_AMD64) 175 { _16M - 1, GFP_DMA }, /* ZONE_DMA: 0-16MB */ 176 #elif defined(RT_ARCH_X86) 177 { 896 * _1M - 1, GFP_USER }, /* ZONE_NORMAL (32-bit hosts): 0-896MB */ 178 #endif 179 }; 151 180 152 181 … … 972 1001 973 1002 974 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag) 1003 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, 1004 bool fExecutable, const char *pszTag) 975 1005 { 976 1006 IPRT_LINUX_SAVE_EFL_AC(); 977 1007 PRTR0MEMOBJLNX pMemLnx; 978 1008 int rc; 979 980 #if (defined(RT_ARCH_AMD64) || defined(RT_ARCH_ARM64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32) 981 /* ZONE_DMA32: 0-4GB */ 982 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA32, 983 true /* contiguous */, fExecutable, VERR_NO_CONT_MEMORY, pszTag); 984 if (RT_FAILURE(rc)) 985 #endif 986 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_ARM64) 987 /* ZONE_DMA: 0-16MB */ 988 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA, 1009 uint32_t idxZone; 1010 1011 /* 1012 * The last zone must be able to satisfy the PhysHighest requirement or there 1013 * will be no zone at all. 1014 */ 1015 if (g_aZones[RT_ELEMENTS(g_aZones) - 1].PhysHighest > PhysHighest) 1016 { 1017 IPRT_LINUX_RESTORE_EFL_AC(); 1018 AssertMsgFailedReturn(("No zone can satisfy PhysHighest=%RHp!\n", PhysHighest), 1019 VERR_NO_CONT_MEMORY); 1020 } 1021 1022 /* Find the first zone matching our PhysHighest requirement. */ 1023 idxZone = 0; 1024 for (;;) 1025 { 1026 if (g_aZones[idxZone].PhysHighest <= PhysHighest) 1027 break; /* We found a zone satisfying the requirement. */ 1028 idxZone++; 1029 } 1030 1031 /* Now try to allocate pages from all the left zones until one succeeds. */ 1032 for (;;) 1033 { 1034 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, g_aZones[idxZone].fGfp, 989 1035 true /* contiguous */, fExecutable, VERR_NO_CONT_MEMORY, pszTag); 990 #else 991 /* ZONE_NORMAL (32-bit hosts): 0-896MB */ 992 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_USER, 993 true /* contiguous */, fExecutable, VERR_NO_CONT_MEMORY, pszTag); 994 #endif 1036 idxZone++; 1037 if (RT_SUCCESS(rc) || idxZone == RT_ELEMENTS(g_aZones)) 1038 break; 1039 } 995 1040 if (RT_SUCCESS(rc)) 996 1041 { … … 998 1043 if (RT_SUCCESS(rc)) 999 1044 { 1000 #if defined(RT_STRICT) && (defined(RT_ARCH_AMD64) || defined(CONFIG_HIGHMEM64G))1045 #if defined(RT_STRICT) 1001 1046 size_t iPage = pMemLnx->cPages; 1002 1047 while (iPage-- > 0) 1003 Assert(page_to_phys(pMemLnx->apPages[iPage]) < _4G);1048 Assert(page_to_phys(pMemLnx->apPages[iPage]) < PhysHighest); 1004 1049 #endif 1005 1050 pMemLnx->Core.u.Cont.Phys = page_to_phys(pMemLnx->apPages[0]); -
trunk/src/VBox/Runtime/r0drv/memobj-r0drv.cpp
r99758 r100355 474 474 475 475 476 RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, bool fExecutable, const char *pszTag)476 RTR0DECL(int) RTR0MemObjAllocContTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, bool fExecutable, const char *pszTag) 477 477 { 478 478 /* sanity checks. */ … … 482 482 AssertReturn(cb > 0, VERR_INVALID_PARAMETER); 483 483 AssertReturn(cb <= cbAligned, VERR_INVALID_PARAMETER); 484 AssertReturn(PhysHighest >= cb, VERR_INVALID_PARAMETER); 484 485 RT_ASSERT_PREEMPTIBLE(); 485 486 486 487 /* do the allocation. */ 487 return rtR0MemObjNativeAllocCont(pMemObj, cbAligned, fExecutable, pszTag);488 return rtR0MemObjNativeAllocCont(pMemObj, cbAligned, PhysHighest, fExecutable, pszTag); 488 489 } 489 490 RT_EXPORT_SYMBOL(RTR0MemObjAllocContTag); -
trunk/src/VBox/Runtime/r0drv/netbsd/memobj-r0drv-netbsd.c
r98103 r100355 288 288 289 289 290 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag) 290 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, 291 bool fExecutable, const char *pszTag) 291 292 { 292 293 PRTR0MEMOBJNETBSD pMemNetBSD = (PRTR0MEMOBJNETBSD)rtR0MemObjNew(sizeof(*pMemNetBSD), RTR0MEMOBJTYPE_CONT, NULL, cb, pszTag); 293 294 if (pMemNetBSD) 294 295 { 295 int rc = rtR0MemObjNetBSDAllocHelper(pMemNetBSD, cb, fExecutable, _4G - 1, true /*fContiguous*/);296 int rc = rtR0MemObjNetBSDAllocHelper(pMemNetBSD, cb, fExecutable, PhysHighest, true /*fContiguous*/); 296 297 if (RT_SUCCESS(rc)) 297 298 { -
trunk/src/VBox/Runtime/r0drv/nt/memobj-r0drv-nt.cpp
r98103 r100355 565 565 * Fall back on contiguous memory... 566 566 */ 567 return rtR0MemObjNativeAllocCont(ppMem, cb, fExecutable, pszTag);567 return rtR0MemObjNativeAllocCont(ppMem, cb, _4G - 1, fExecutable, pszTag); 568 568 } 569 569 … … 636 636 637 637 638 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag) 639 { 640 return rtR0MemObjNativeAllocContEx(ppMem, cb, fExecutable, _4G-1, PAGE_SIZE /* alignment */, pszTag); 638 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, 639 bool fExecutable, const char *pszTag) 640 { 641 return rtR0MemObjNativeAllocContEx(ppMem, cb, fExecutable, PhysHighest, PAGE_SIZE /* alignment */, pszTag); 641 642 } 642 643 -
trunk/src/VBox/Runtime/r0drv/os2/memobj-r0drv-os2.cpp
r98103 r100355 218 218 219 219 220 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag) 220 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, 221 bool fExecutable, const char *pszTag) 221 222 { 222 223 NOREF(fExecutable); 224 AssertMsgReturn(PhysHighest >= _16M - 1, ("PhysHigest=%RHp\n", PhysHighest), VERR_NOT_SUPPORTED); 223 225 224 226 /* create the object. */ … … 229 231 /* do the allocation. */ 230 232 ULONG ulPhys = ~0UL; 231 int rc = KernVMAlloc(cb, VMDHA_FIXED | VMDHA_CONTIG, &pMemOs2->Core.pv, (PPVOID)&ulPhys, NULL); 233 int rc = KernVMAlloc(cb, VMDHA_FIXED | VMDHA_CONTIG | (PhysHighest < _4G - 1 ? VMDHA_16M : 0), 234 &pMemOs2->Core.pv, (PPVOID)&ulPhys, NULL); 232 235 if (!rc) 233 236 { … … 248 251 const char *pszTag) 249 252 { 250 AssertMsgReturn(PhysHighest >= 16 *_1M, ("PhysHigest=%RHp\n", PhysHighest), VERR_NOT_SUPPORTED);253 AssertMsgReturn(PhysHighest >= _16M - 1, ("PhysHigest=%RHp\n", PhysHighest), VERR_NOT_SUPPORTED); 251 254 252 255 /** @todo alignment */ … … 261 264 /* do the allocation. */ 262 265 ULONG ulPhys = ~0UL; 263 int rc = KernVMAlloc(cb, VMDHA_FIXED | VMDHA_CONTIG | (PhysHighest < _4G ? VMDHA_16M : 0),266 int rc = KernVMAlloc(cb, VMDHA_FIXED | VMDHA_CONTIG | (PhysHighest < _4G - 1 ? VMDHA_16M : 0), 264 267 &pMemOs2->Core.pv, (PPVOID)&ulPhys, NULL); 265 268 if (!rc) -
trunk/src/VBox/Runtime/r0drv/solaris/memobj-r0drv-solaris.c
r98103 r100355 727 727 728 728 729 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, bool fExecutable, const char *pszTag) 729 DECLHIDDEN(int) rtR0MemObjNativeAllocCont(PPRTR0MEMOBJINTERNAL ppMem, size_t cb, RTHCPHYS PhysHighest, 730 bool fExecutable, const char *pszTag) 730 731 { 731 732 AssertReturn(!fExecutable, VERR_NOT_SUPPORTED); 732 return rtR0MemObjNativeAllocPhys(ppMem, cb, _4G - 1, PAGE_SIZE /* alignment */, pszTag);733 return rtR0MemObjNativeAllocPhys(ppMem, cb, PhysHigest, PAGE_SIZE /* alignment */, pszTag); 733 734 } 734 735
Note:
See TracChangeset
for help on using the changeset viewer.