diff options
author | Jeff Garzik | 2005-06-22 19:10:49 +0200 |
---|---|---|
committer | Jeff Garzik | 2005-06-22 19:10:49 +0200 |
commit | 80bd6d7f5e0d872a0f5a151473d2a39d95d210a8 (patch) | |
tree | b3a36048d6b7de88f7e906624ecb4b98816bb736 /arch/sh/kernel/sys_sh.c | |
parent | Automatic merge of rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds... (diff) | |
parent | Merge rsync://oss.sgi.com/git/xfs-2.6 (diff) | |
download | kernel-qcow2-linux-80bd6d7f5e0d872a0f5a151473d2a39d95d210a8.tar.gz kernel-qcow2-linux-80bd6d7f5e0d872a0f5a151473d2a39d95d210a8.tar.xz kernel-qcow2-linux-80bd6d7f5e0d872a0f5a151473d2a39d95d210a8.zip |
Merge /spare/repo/linux-2.6/
Diffstat (limited to 'arch/sh/kernel/sys_sh.c')
-rw-r--r-- | arch/sh/kernel/sys_sh.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/sh/kernel/sys_sh.c b/arch/sh/kernel/sys_sh.c index df5ac294c379..917b2f32f260 100644 --- a/arch/sh/kernel/sys_sh.c +++ b/arch/sh/kernel/sys_sh.c @@ -79,6 +79,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, (!vma || addr + len <= vma->vm_start)) return addr; } + if (len <= mm->cached_hole_size) { + mm->cached_hole_size = 0; + mm->free_area_cache = TASK_UNMAPPED_BASE; + } if (flags & MAP_PRIVATE) addr = PAGE_ALIGN(mm->free_area_cache); else @@ -95,6 +99,7 @@ full_search: */ if (start_addr != TASK_UNMAPPED_BASE) { start_addr = addr = TASK_UNMAPPED_BASE; + mm->cached_hole_size = 0; goto full_search; } return -ENOMEM; @@ -106,6 +111,9 @@ full_search: mm->free_area_cache = addr + len; return addr; } + if (addr + mm->cached_hole_size < vma->vm_start) + mm->cached_hole_size = vma->vm_start - addr; + addr = vma->vm_end; if (!(flags & MAP_PRIVATE)) addr = COLOUR_ALIGN(addr); |