make mmap try to reserve memory areas with (size/2)-aligned virtual addresses
This commit is contained in:
parent
d4770bc9af
commit
50431b7584
@@ -395,16 +395,27 @@ SYSCALL_DECLARE(mmap)
|
||||
// #define MAP_ANONYMOUS 0x20
|
||||
kprintf("syscall.c,!MAP_FIXED,MAP_ANONYMOUS\n");
|
||||
unsigned long flags = aal_mc_spinlock_lock(&cpu_local_var(current)->vm->memory_range_lock);
|
||||
|
||||
#if 1
|
||||
unsigned long sz = aal_mc_syscall_arg1(ctx);
|
||||
unsigned long amt_align = (sz & (PAGE_SIZE*2-1)) ? PAGE_SIZE : sz/2;
|
||||
unsigned long s = ((region->map_end + amt_align - 1) & ~(amt_align - 1));
|
||||
kprintf("(%d),syscall.c,!MAP_FIXED,MAP_ANONYMOUS,sz=%lx,amt_align=%lx,s=%lx\n", aal_mc_get_processor_id(), sz, amt_align, s);
|
||||
unsigned long map_end_aligned = ((region->map_end + amt_align - 1) & ~(amt_align - 1));
|
||||
#else
|
||||
unsigned long s = (region->map_end + PAGE_SIZE - 1) & PAGE_MASK;
|
||||
unsigned long map_end_aligned = region->map_end;
|
||||
#endif
|
||||
|
||||
unsigned long len = (aal_mc_syscall_arg1(ctx) + PAGE_SIZE - 1) & PAGE_MASK;
|
||||
// lockr = aal_mc_spinlock_lock(&cpu_status_lock);
|
||||
region->map_end =
|
||||
extend_process_region(cpu_local_var(current),
|
||||
region->map_start,
|
||||
region->map_end,
|
||||
s + len);
|
||||
aal_mc_spinlock_unlock(&cpu_local_var(current)->vm->memory_range_lock, flags);
|
||||
kprintf("syscall.c,returning to caller...\n");
|
||||
// kprintf("syscall.c,mmap,map_end=%lx,s+len=%lx\n", region->map_end, s+len);
|
||||
|
||||
if (region->map_end == s + len) { return s; } else { return -EINVAL; }
|
||||
|
||||
} else if ((aal_mc_syscall_arg3(ctx) & 0x02) == 0x02) {
|
||||
|
||||
Reference in New Issue
Block a user