Merge branch 'perf/uprobes' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/uprobes
This commit is contained in:
59
mm/mmap.c
59
mm/mmap.c
@@ -241,6 +241,8 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
|
||||
return next;
|
||||
}
|
||||
|
||||
static unsigned long do_brk(unsigned long addr, unsigned long len);
|
||||
|
||||
SYSCALL_DEFINE1(brk, unsigned long, brk)
|
||||
{
|
||||
unsigned long rlim, retval;
|
||||
@@ -969,7 +971,7 @@ static inline unsigned long round_hint_to_min(unsigned long hint)
|
||||
* The caller must hold down_write(¤t->mm->mmap_sem).
|
||||
*/
|
||||
|
||||
unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
|
||||
static unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long prot,
|
||||
unsigned long flags, unsigned long pgoff)
|
||||
{
|
||||
@@ -1105,7 +1107,32 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
|
||||
|
||||
return mmap_region(file, addr, len, flags, vm_flags, pgoff);
|
||||
}
|
||||
EXPORT_SYMBOL(do_mmap_pgoff);
|
||||
|
||||
unsigned long do_mmap(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long prot,
|
||||
unsigned long flag, unsigned long offset)
|
||||
{
|
||||
if (unlikely(offset + PAGE_ALIGN(len) < offset))
|
||||
return -EINVAL;
|
||||
if (unlikely(offset & ~PAGE_MASK))
|
||||
return -EINVAL;
|
||||
return do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
|
||||
}
|
||||
EXPORT_SYMBOL(do_mmap);
|
||||
|
||||
unsigned long vm_mmap(struct file *file, unsigned long addr,
|
||||
unsigned long len, unsigned long prot,
|
||||
unsigned long flag, unsigned long offset)
|
||||
{
|
||||
unsigned long ret;
|
||||
struct mm_struct *mm = current->mm;
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
ret = do_mmap(file, addr, len, prot, flag, offset);
|
||||
up_write(&mm->mmap_sem);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vm_mmap);
|
||||
|
||||
SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len,
|
||||
unsigned long, prot, unsigned long, flags,
|
||||
@@ -2128,21 +2155,25 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(do_munmap);
|
||||
|
||||
SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
|
||||
int vm_munmap(unsigned long start, size_t len)
|
||||
{
|
||||
int ret;
|
||||
struct mm_struct *mm = current->mm;
|
||||
|
||||
profile_munmap(addr);
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
ret = do_munmap(mm, addr, len);
|
||||
ret = do_munmap(mm, start, len);
|
||||
up_write(&mm->mmap_sem);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vm_munmap);
|
||||
|
||||
SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
|
||||
{
|
||||
profile_munmap(addr);
|
||||
return vm_munmap(addr, len);
|
||||
}
|
||||
|
||||
static inline void verify_mm_writelocked(struct mm_struct *mm)
|
||||
{
|
||||
@@ -2159,7 +2190,7 @@ static inline void verify_mm_writelocked(struct mm_struct *mm)
|
||||
* anonymous maps. eventually we may be able to do some
|
||||
* brk-specific accounting here.
|
||||
*/
|
||||
unsigned long do_brk(unsigned long addr, unsigned long len)
|
||||
static unsigned long do_brk(unsigned long addr, unsigned long len)
|
||||
{
|
||||
struct mm_struct * mm = current->mm;
|
||||
struct vm_area_struct * vma, * prev;
|
||||
@@ -2255,7 +2286,17 @@ out:
|
||||
return addr;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(do_brk);
|
||||
unsigned long vm_brk(unsigned long addr, unsigned long len)
|
||||
{
|
||||
struct mm_struct *mm = current->mm;
|
||||
unsigned long ret;
|
||||
|
||||
down_write(&mm->mmap_sem);
|
||||
ret = do_brk(addr, len);
|
||||
up_write(&mm->mmap_sem);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(vm_brk);
|
||||
|
||||
/* Release all mmaps. */
|
||||
void exit_mmap(struct mm_struct *mm)
|
||||
|
Reference in New Issue
Block a user