|
@@ -57,6 +57,11 @@ DECLARE_RWSEM(nommu_vma_sem);
|
|
|
struct vm_operations_struct generic_file_vm_ops = {
|
|
|
};
|
|
|
|
|
|
+EXPORT_SYMBOL(vmalloc);
|
|
|
+EXPORT_SYMBOL(vfree);
|
|
|
+EXPORT_SYMBOL(vmalloc_to_page);
|
|
|
+EXPORT_SYMBOL(vmalloc_32);
|
|
|
+
|
|
|
/*
|
|
|
* Handle all mappings that got truncated by a "truncate()"
|
|
|
* system call.
|
|
@@ -142,6 +147,8 @@ int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
|
|
|
return(i);
|
|
|
}
|
|
|
|
|
|
+EXPORT_SYMBOL(get_user_pages);
|
|
|
+
|
|
|
DEFINE_RWLOCK(vmlist_lock);
|
|
|
struct vm_struct *vmlist;
|
|
|
|
|
@@ -852,7 +859,7 @@ unsigned long do_mmap_pgoff(struct file *file,
|
|
|
error_getting_vma:
|
|
|
up_write(&nommu_vma_sem);
|
|
|
kfree(vml);
|
|
|
- printk("Allocation of vml for %lu byte allocation from process %d failed\n",
|
|
|
+ printk("Allocation of vma for %lu byte allocation from process %d failed\n",
|
|
|
len, current->pid);
|
|
|
show_free_areas();
|
|
|
return -ENOMEM;
|
|
@@ -909,7 +916,7 @@ int do_munmap(struct mm_struct *mm, unsigned long addr, size_t len)
|
|
|
|
|
|
for (parent = &mm->context.vmlist; *parent; parent = &(*parent)->next)
|
|
|
if ((*parent)->vma->vm_start == addr &&
|
|
|
- (*parent)->vma->vm_end == end)
|
|
|
+ ((len == 0) || ((*parent)->vma->vm_end == end)))
|
|
|
goto found;
|
|
|
|
|
|
printk("munmap of non-mmaped memory by process %d (%s): %p\n",
|
|
@@ -1054,7 +1061,8 @@ struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr)
|
|
|
int remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
|
|
|
unsigned long to, unsigned long size, pgprot_t prot)
|
|
|
{
|
|
|
- return -EPERM;
|
|
|
+ vma->vm_start = vma->vm_pgoff << PAGE_SHIFT;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
void swap_unplug_io_fn(struct backing_dev_info *bdi, struct page *page)
|
|
@@ -1073,9 +1081,10 @@ void arch_unmap_area(struct mm_struct *mm, unsigned long addr)
|
|
|
|
|
|
void update_mem_hiwater(struct task_struct *tsk)
|
|
|
{
|
|
|
- unsigned long rss = get_mm_counter(tsk->mm, rss);
|
|
|
+ unsigned long rss;
|
|
|
|
|
|
if (likely(tsk->mm)) {
|
|
|
+ rss = get_mm_counter(tsk->mm, rss);
|
|
|
if (tsk->mm->hiwater_rss < rss)
|
|
|
tsk->mm->hiwater_rss = rss;
|
|
|
if (tsk->mm->hiwater_vm < tsk->mm->total_vm)
|