Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 250864
b: refs/heads/master
c: 6038def
h: refs/heads/master
v: v3
  • Loading branch information
Namhyung Kim authored and Linus Torvalds committed May 25, 2011
1 parent 42ff1ce commit e38b479
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 46 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ac3bbec5ec69b973317677e038de2d1a0c90c18c
refs/heads/master: 6038def0d11b322019d0dbb43f2a611247dfbdb6
4 changes: 4 additions & 0 deletions trunk/mm/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ static inline unsigned long page_order(struct page *page)
return page_private(page);
}

/* mm/util.c */
void __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
struct vm_area_struct *prev, struct rb_node *rb_parent);

#ifdef CONFIG_MMU
extern long mlock_vma_pages_range(struct vm_area_struct *vma,
unsigned long start, unsigned long end);
Expand Down
23 changes: 0 additions & 23 deletions trunk/mm/mmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -398,29 +398,6 @@ find_vma_prepare(struct mm_struct *mm, unsigned long addr,
return vma;
}

static inline void
__vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
struct vm_area_struct *prev, struct rb_node *rb_parent)
{
struct vm_area_struct *next;

vma->vm_prev = prev;
if (prev) {
next = prev->vm_next;
prev->vm_next = vma;
} else {
mm->mmap = vma;
if (rb_parent)
next = rb_entry(rb_parent,
struct vm_area_struct, vm_rb);
else
next = NULL;
}
vma->vm_next = next;
if (next)
next->vm_prev = vma;
}

void __vma_link_rb(struct mm_struct *mm, struct vm_area_struct *vma,
struct rb_node **rb_link, struct rb_node *rb_parent)
{
Expand Down
38 changes: 16 additions & 22 deletions trunk/mm/nommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -680,9 +680,9 @@ static void protect_vma(struct vm_area_struct *vma, unsigned long flags)
*/
static void add_vma_to_mm(struct mm_struct *mm, struct vm_area_struct *vma)
{
struct vm_area_struct *pvma, **pp, *next;
struct vm_area_struct *pvma, *prev;
struct address_space *mapping;
struct rb_node **p, *parent;
struct rb_node **p, *parent, *rb_prev;

kenter(",%p", vma);

Expand All @@ -703,7 +703,7 @@ static void add_vma_to_mm(struct mm_struct *mm, struct vm_area_struct *vma)
}

/* add the VMA to the tree */
parent = NULL;
parent = rb_prev = NULL;
p = &mm->mm_rb.rb_node;
while (*p) {
parent = *p;
Expand All @@ -713,38 +713,32 @@ static void add_vma_to_mm(struct mm_struct *mm, struct vm_area_struct *vma)
* (the latter is necessary as we may get identical VMAs) */
if (vma->vm_start < pvma->vm_start)
p = &(*p)->rb_left;
else if (vma->vm_start > pvma->vm_start)
else if (vma->vm_start > pvma->vm_start) {
rb_prev = parent;
p = &(*p)->rb_right;
else if (vma->vm_end < pvma->vm_end)
} else if (vma->vm_end < pvma->vm_end)
p = &(*p)->rb_left;
else if (vma->vm_end > pvma->vm_end)
else if (vma->vm_end > pvma->vm_end) {
rb_prev = parent;
p = &(*p)->rb_right;
else if (vma < pvma)
} else if (vma < pvma)
p = &(*p)->rb_left;
else if (vma > pvma)
else if (vma > pvma) {
rb_prev = parent;
p = &(*p)->rb_right;
else
} else
BUG();
}

rb_link_node(&vma->vm_rb, parent, p);
rb_insert_color(&vma->vm_rb, &mm->mm_rb);

/* add VMA to the VMA list also */
for (pp = &mm->mmap; (pvma = *pp); pp = &(*pp)->vm_next) {
if (pvma->vm_start > vma->vm_start)
break;
if (pvma->vm_start < vma->vm_start)
continue;
if (pvma->vm_end < vma->vm_end)
break;
}
prev = NULL;
if (rb_prev)
prev = rb_entry(rb_prev, struct vm_area_struct, vm_rb);

next = *pp;
*pp = vma;
vma->vm_next = next;
if (next)
next->vm_prev = vma;
__vma_link_list(mm, vma, prev, parent);
}

/*
Expand Down
24 changes: 24 additions & 0 deletions trunk/mm/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#include <linux/sched.h>
#include <asm/uaccess.h>

#include "internal.h"

#define CREATE_TRACE_POINTS
#include <trace/events/kmem.h>

Expand Down Expand Up @@ -215,6 +217,28 @@ char *strndup_user(const char __user *s, long n)
}
EXPORT_SYMBOL(strndup_user);

void __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
struct vm_area_struct *prev, struct rb_node *rb_parent)
{
struct vm_area_struct *next;

vma->vm_prev = prev;
if (prev) {
next = prev->vm_next;
prev->vm_next = vma;
} else {
mm->mmap = vma;
if (rb_parent)
next = rb_entry(rb_parent,
struct vm_area_struct, vm_rb);
else
next = NULL;
}
vma->vm_next = next;
if (next)
next->vm_prev = vma;
}

#if defined(CONFIG_MMU) && !defined(HAVE_ARCH_PICK_MMAP_LAYOUT)
void arch_pick_mmap_layout(struct mm_struct *mm)
{
Expand Down

0 comments on commit e38b479

Please sign in to comment.