Revert "make munmap free physical pages, and one correction for aligned mmap in syscall.c (extend_process_region is called with memory-region start-address which is aligned (map_end_aligned), instead of tail-address of current-region (region->map_end)) for aligned mmap (in syscall.c)"

This reverts commit e7317cca98.
This commit is contained in:
Masamichi Takagi m-takagi@ab.jp.nec.com
2012-11-26 13:38:07 +09:00
parent 3d71edd55c
commit a1490da112
5 changed files with 13 additions and 31 deletions

View File

@@ -2,7 +2,6 @@
#define __HEADER_PAGE_H
void *allocate_pages(int npages, enum aal_mc_ap_flag flag);
void free_pages_pa(unsigned long pa, int npages);
void free_pages(void *va, int npages);
#endif

View File

@@ -92,8 +92,8 @@ int add_process_memory_range(struct process *process,
int add_process_large_range(struct process *process,
unsigned long start, unsigned long end,
unsigned long flag, unsigned long *phys);
int remove_process_region(struct process *proc, unsigned long va_start, unsigned long va_end, unsigned long pa);
int remove_process_region(struct process *proc,
unsigned long start, unsigned long end);
struct program_load_desc;
void init_process_stack(struct process *process, struct program_load_desc *pn,
int argc, char **argv,

View File

@@ -40,12 +40,6 @@ void *allocate_pages(int npages, enum aal_mc_ap_flag flag)
return pa ? phys_to_virt(pa) : 0;
}
void free_pages_pa(unsigned long pa, int npages)
{
kprintf("mem.c,free_pages_pa,pa=%lx\n", pa);
aal_pagealloc_free(pa_allocator, pa, npages);
}
void free_pages(void *va, int npages)
{
aal_pagealloc_free(pa_allocator, virt_to_phys(va), npages);

View File

@@ -286,29 +286,22 @@ unsigned long extend_process_region(struct process *proc,
return address;
}
int remove_process_region(struct process *proc, unsigned long va_start, unsigned long va_end, unsigned long pa)
int remove_process_region(struct process *proc,
unsigned long start, unsigned long end)
{
unsigned long flags;
if ((va_start & (PAGE_SIZE - 1)) || (va_end & (PAGE_SIZE - 1))) {
if ((start & (PAGE_SIZE - 1)) || (end & (PAGE_SIZE - 1))) {
return -EINVAL;
}
flags = aal_mc_spinlock_lock(&proc->vm->page_table_lock);
/* We defer freeing to the time of exit */
unsigned long va = va_start;
while (va < va_end) {
aal_mc_pt_clear_page(proc->vm->page_table, (void *)va);
va += PAGE_SIZE;
while (start < end) {
aal_mc_pt_clear_page(proc->vm->page_table, (void *)start);
start += PAGE_SIZE;
}
aal_mc_spinlock_unlock(&proc->vm->page_table_lock, flags);
// we skip freeing "range"
#if 1
kprintf("process.c,free_pages,pa=%lx,start=%lx,end=%lx\n", pa, va_start, va_end);
free_pages_pa(pa, (va_end - va_start) / PAGE_SIZE);
#endif
return 0;
}

View File

@@ -411,7 +411,7 @@ SYSCALL_DECLARE(mmap)
region->map_end =
extend_process_region(cpu_local_var(current),
region->map_start,
map_end_aligned,
region->map_end,
s + len);
aal_mc_spinlock_unlock(&cpu_local_var(current)->vm->memory_range_lock, flags);
// kprintf("syscall.c,mmap,map_end=%lx,s+len=%lx\n", region->map_end, s+len);
@@ -457,17 +457,13 @@ SYSCALL_DECLARE(mmap)
SYSCALL_DECLARE(munmap)
{
unsigned long va, pa, len;
int r;
unsigned long address, len;
va = aal_mc_syscall_arg0(ctx);
address = aal_mc_syscall_arg0(ctx);
len = aal_mc_syscall_arg1(ctx);
if(aal_mc_pt_virt_to_phys(cpu_local_var(current)->vm->page_table, (void *)va, &pa)) {
return -EFAULT;
}
r = remove_process_region(cpu_local_var(current), va, va + len, pa);
return r;
return remove_process_region(cpu_local_var(current), address,
address + len);
}
SYSCALL_DECLARE(mprotect)