diff options
| -rw-r--r-- | mm/mmap.c | 7 |
1 files changed, 5 insertions, 2 deletions
| @@ -390,8 +390,9 @@ static long vma_compute_subtree_gap(struct vm_area_struct *vma) | |||
| 390 | } | 390 | } |
| 391 | 391 | ||
| 392 | #ifdef CONFIG_DEBUG_VM_RB | 392 | #ifdef CONFIG_DEBUG_VM_RB |
| 393 | static int browse_rb(struct rb_root *root) | 393 | static int browse_rb(struct mm_struct *mm) |
| 394 | { | 394 | { |
| 395 | struct rb_root *root = &mm->mm_rb; | ||
| 395 | int i = 0, j, bug = 0; | 396 | int i = 0, j, bug = 0; |
| 396 | struct rb_node *nd, *pn = NULL; | 397 | struct rb_node *nd, *pn = NULL; |
| 397 | unsigned long prev = 0, pend = 0; | 398 | unsigned long prev = 0, pend = 0; |
| @@ -414,12 +415,14 @@ static int browse_rb(struct rb_root *root) | |||
| 414 | vma->vm_start, vma->vm_end); | 415 | vma->vm_start, vma->vm_end); |
| 415 | bug = 1; | 416 | bug = 1; |
| 416 | } | 417 | } |
| 418 | spin_lock(&mm->page_table_lock); | ||
| 417 | if (vma->rb_subtree_gap != vma_compute_subtree_gap(vma)) { | 419 | if (vma->rb_subtree_gap != vma_compute_subtree_gap(vma)) { |
| 418 | pr_emerg("free gap %lx, correct %lx\n", | 420 | pr_emerg("free gap %lx, correct %lx\n", |
| 419 | vma->rb_subtree_gap, | 421 | vma->rb_subtree_gap, |
| 420 | vma_compute_subtree_gap(vma)); | 422 | vma_compute_subtree_gap(vma)); |
| 421 | bug = 1; | 423 | bug = 1; |
| 422 | } | 424 | } |
| 425 | spin_unlock(&mm->page_table_lock); | ||
| 423 | i++; | 426 | i++; |
| 424 | pn = nd; | 427 | pn = nd; |
| 425 | prev = vma->vm_start; | 428 | prev = vma->vm_start; |
| @@ -475,7 +478,7 @@ static void validate_mm(struct mm_struct *mm) | |||
| 475 | mm->highest_vm_end, highest_address); | 478 | mm->highest_vm_end, highest_address); |
| 476 | bug = 1; | 479 | bug = 1; |
| 477 | } | 480 | } |
| 478 | i = browse_rb(&mm->mm_rb); | 481 | i = browse_rb(mm); |
| 479 | if (i != mm->map_count) { | 482 | if (i != mm->map_count) { |
| 480 | if (i != -1) | 483 | if (i != -1) |
| 481 | pr_emerg("map_count %d rb %d\n", mm->map_count, i); | 484 | pr_emerg("map_count %d rb %d\n", mm->map_count, i); |
