Revision: 3016 Author: eliot Date: 2014-06-24 11:38:36 -0700 (Tue, 24 Jun 2014) Log Message: ----------- Further simplification in platforms/unix/vm/sqUnixSpurMemory.c. Fix snafu in platforms/unix/vm/sqUnixMemory.c.
Modified Paths: -------------- branches/Cog/platforms/unix/vm/sqUnixMemory.c branches/Cog/platforms/unix/vm/sqUnixSpurMemory.c
Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h ___________________________________________________________________ Modified: checkindate - Tue Jun 24 10:27:03 PDT 2014 + Tue Jun 24 11:38:03 PDT 2014
Modified: branches/Cog/platforms/unix/vm/sqUnixMemory.c =================================================================== --- branches/Cog/platforms/unix/vm/sqUnixMemory.c 2014-06-24 17:30:28 UTC (rev 3015) +++ branches/Cog/platforms/unix/vm/sqUnixMemory.c 2014-06-24 18:38:36 UTC (rev 3016) @@ -39,7 +39,7 @@ #include "config.h" #include "debug.h"
-#!if SPURVM /* Spur uses sqUnixSpurMemory.c */ +#if !SPURVM /* Spur uses sqUnixSpurMemory.c */ void *uxAllocateMemory(usqInt minHeapSize, usqInt desiredHeapSize);
/* Note:
Modified: branches/Cog/platforms/unix/vm/sqUnixSpurMemory.c =================================================================== --- branches/Cog/platforms/unix/vm/sqUnixSpurMemory.c 2014-06-24 17:30:28 UTC (rev 3015) +++ branches/Cog/platforms/unix/vm/sqUnixSpurMemory.c 2014-06-24 18:38:36 UTC (rev 3016) @@ -84,13 +84,13 @@ static int min(int x, int y) { return (x < y) ? x : y; } static int max(int x, int y) { return (x > y) ? x : y; }
-/* answer the address of minHeapSize rounded up to page size bytes of memory. */ +/* Answer the address of minHeapSize rounded up to page size bytes of memory. */
usqInt sqAllocateMemory(usqInt minHeapSize, usqInt desiredHeapSize) { char *hint, *address, *alloc; - long bytes, allocBytes; + unsigned long alignment, allocBytes;
if (pageSize) { fprintf(stderr, "sqAllocateMemory: already called\n"); @@ -101,31 +101,18 @@
hint = sbrk(0);
- bytes = max(pageSize,1024*1024); - address = (char *)(((usqInt)hint + bytes - 1) & ~(bytes - 1)); - allocBytes = roundUpToPage(desiredHeapSize); + alignment = max(pageSize,1024*1024); + address = (char *)(((usqInt)hint + alignment - 1) & ~(alignment - 1));
-# if TEST_MEMORY - printf("hint at %p\n", hint); - alloc = mmap(0, allocBytes, PROT_READ | PROT_WRITE, - MAP_ANON | MAP_PRIVATE, -1, 0); - printf("mmap at %p\n", alloc); - if (alloc != MAP_FAILED) - (void)munmap(alloc, allocBytes); -# endif - - alloc = mmap(address, allocBytes, PROT_READ | PROT_WRITE, - MAP_ANON | MAP_FIXED | MAP_PRIVATE, -1, 0); - if (alloc != MAP_FAILED) - return (usqInt)alloc; - mmapErrno = errno; - perror("sqAllocateMemory initial allocation mmap"); - exit(errno); - return 0; + alloc = sqAllocateMemorySegmentOfSizeAboveAllocatedSizeInto + (roundUpToPage(desiredHeapSize), address, &allocBytes); + if (!alloc) { + fprintf(stderr, "sqAllocateMemory: initial alloc failed!\n"); + exit(errno); + } + return (usqInt)alloc; }
-static long map_flags = MAP_ANON | MAP_PRIVATE; - /* Allocate a region of memory of at least size bytes, at or above minAddress. * If the attempt fails, answer null. If the attempt succeeds, answer the * start of the region and assign its size through allocatedSizePointer. @@ -204,11 +191,14 @@
# define MBytes *1024UL*1024UL
-int main() +int +main() { char *mem; usqInt i, t = 16 MBytes;
+ printf("hint at %p\n", sbrk(0)); + mem= (char *)sqAllocateMemory(t, t); printf("memory allocated at %p\n", mem); /* create some roadbumps */
vm-dev@lists.squeakfoundation.org