|
@@ -51,12 +51,6 @@ static void unmap_region(struct mm_struct *mm,
|
|
struct vm_area_struct *vma, struct vm_area_struct *prev,
|
|
struct vm_area_struct *vma, struct vm_area_struct *prev,
|
|
unsigned long start, unsigned long end);
|
|
unsigned long start, unsigned long end);
|
|
|
|
|
|
-/*
|
|
|
|
- * WARNING: the debugging will use recursive algorithms so never enable this
|
|
|
|
- * unless you know what you are doing.
|
|
|
|
- */
|
|
|
|
-#undef DEBUG_MM_RB
|
|
|
|
-
|
|
|
|
/* description of effects of mapping type and prot in current implementation.
|
|
/* description of effects of mapping type and prot in current implementation.
|
|
* this is due to the limited x86 page protection hardware. The expected
|
|
* this is due to the limited x86 page protection hardware. The expected
|
|
* behavior is in parens:
|
|
* behavior is in parens:
|
|
@@ -303,7 +297,7 @@ out:
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
|
|
|
|
-#ifdef DEBUG_MM_RB
|
|
|
|
|
|
+#ifdef CONFIG_DEBUG_VM_RB
|
|
static int browse_rb(struct rb_root *root)
|
|
static int browse_rb(struct rb_root *root)
|
|
{
|
|
{
|
|
int i = 0, j;
|
|
int i = 0, j;
|
|
@@ -337,9 +331,12 @@ void validate_mm(struct mm_struct *mm)
|
|
{
|
|
{
|
|
int bug = 0;
|
|
int bug = 0;
|
|
int i = 0;
|
|
int i = 0;
|
|
- struct vm_area_struct *tmp = mm->mmap;
|
|
|
|
- while (tmp) {
|
|
|
|
- tmp = tmp->vm_next;
|
|
|
|
|
|
+ struct vm_area_struct *vma = mm->mmap;
|
|
|
|
+ while (vma) {
|
|
|
|
+ struct anon_vma_chain *avc;
|
|
|
|
+ list_for_each_entry(avc, &vma->anon_vma_chain, same_vma)
|
|
|
|
+ anon_vma_interval_tree_verify(avc);
|
|
|
|
+ vma = vma->vm_next;
|
|
i++;
|
|
i++;
|
|
}
|
|
}
|
|
if (i != mm->map_count)
|
|
if (i != mm->map_count)
|
|
@@ -1790,6 +1787,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
|
|
}
|
|
}
|
|
vma_unlock_anon_vma(vma);
|
|
vma_unlock_anon_vma(vma);
|
|
khugepaged_enter_vma_merge(vma);
|
|
khugepaged_enter_vma_merge(vma);
|
|
|
|
+ validate_mm(vma->vm_mm);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
#endif /* CONFIG_STACK_GROWSUP || CONFIG_IA64 */
|
|
#endif /* CONFIG_STACK_GROWSUP || CONFIG_IA64 */
|
|
@@ -1843,6 +1841,7 @@ int expand_downwards(struct vm_area_struct *vma,
|
|
}
|
|
}
|
|
vma_unlock_anon_vma(vma);
|
|
vma_unlock_anon_vma(vma);
|
|
khugepaged_enter_vma_merge(vma);
|
|
khugepaged_enter_vma_merge(vma);
|
|
|
|
+ validate_mm(vma->vm_mm);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|