Author: bonefish Date: 2010-06-21 18:46:19 +0200 (Mon, 21 Jun 2010) New Revision: 37200 Changeset: http://dev.haiku-os.org/changeset/37200/haiku Modified: haiku/trunk/headers/os/kernel/OS.h haiku/trunk/src/system/kernel/vm/vm.cpp Log: * Added area creation "lock" constant B_32_BIT_MEMORY for physically contiguous memory < 4 GB. * vm_create_anonymous_area(): Implemented support for B_LOMEM and B_32_BIT_MEMORY. Modified: haiku/trunk/headers/os/kernel/OS.h =================================================================== --- haiku/trunk/headers/os/kernel/OS.h 2010-06-21 16:19:49 UTC (rev 37199) +++ haiku/trunk/headers/os/kernel/OS.h 2010-06-21 16:46:19 UTC (rev 37200) @@ -68,7 +68,8 @@ #define B_LAZY_LOCK 1 #define B_FULL_LOCK 2 #define B_CONTIGUOUS 3 -#define B_LOMEM 4 +#define B_LOMEM 4 /* B_CONTIGUOUS, < 16 MB physical address */ +#define B_32_BIT_MEMORY 5 /* B_CONTIGUOUS, < 4 GB physical address */ /* address spec for create_area(), and clone_area() */ #define B_ANY_ADDRESS 0 Modified: haiku/trunk/src/system/kernel/vm/vm.cpp =================================================================== --- haiku/trunk/src/system/kernel/vm/vm.cpp 2010-06-21 16:19:49 UTC (rev 37199) +++ haiku/trunk/src/system/kernel/vm/vm.cpp 2010-06-21 16:46:19 UTC (rev 37200) @@ -1101,6 +1101,7 @@ wiring = B_CONTIGUOUS; } + physical_address_restrictions stackPhysicalRestrictions; bool doReserveMemory = false; switch (wiring) { case B_NO_LOCK: @@ -1113,11 +1114,25 @@ case B_ALREADY_WIRED: break; case B_LOMEM: - //case B_SLOWMEM: - dprintf("B_LOMEM/SLOWMEM is not yet supported!\n"); - wiring = B_FULL_LOCK; + { + stackPhysicalRestrictions = *physicalAddressRestrictions; + stackPhysicalRestrictions.high_address = 16 * 1024 * 1024; + physicalAddressRestrictions = &stackPhysicalRestrictions; + wiring = B_CONTIGUOUS; doReserveMemory = true; break; + } + case B_32_BIT_MEMORY: + { + #if B_HAIKU_PHYSICAL_BITS > 32 + stackPhysicalRestrictions = *physicalAddressRestrictions; + stackPhysicalRestrictions.high_address = 0x100000000LL; + physicalAddressRestrictions = &stackPhysicalRestrictions; + #endif + wiring = B_CONTIGUOUS; + doReserveMemory = true; + break; + } default: return B_BAD_VALUE; }