Merge tag 'soc2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[cascardo/linux.git] / include / linux / mm_types.h
index 31f8a3a..7ade273 100644 (file)
@@ -224,7 +224,8 @@ struct vm_region {
  * library, the executable area etc).
  */
 struct vm_area_struct {
-       struct mm_struct * vm_mm;       /* The address space we belong to. */
+       /* The first cache line has the info for VMA tree walking. */
+
        unsigned long vm_start;         /* Our start address within vm_mm. */
        unsigned long vm_end;           /* The first byte after our end address
                                           within vm_mm. */
@@ -232,11 +233,22 @@ struct vm_area_struct {
        /* linked list of VM areas per task, sorted by address */
        struct vm_area_struct *vm_next, *vm_prev;
 
+       struct rb_node vm_rb;
+
+       /*
+        * Largest free memory gap in bytes to the left of this VMA.
+        * Either between this VMA and vma->vm_prev, or between one of the
+        * VMAs below us in the VMA rbtree and its ->vm_prev. This helps
+        * get_unmapped_area find a free area of the right size.
+        */
+       unsigned long rb_subtree_gap;
+
+       /* Second cache line starts here. */
+
+       struct mm_struct *vm_mm;        /* The address space we belong to. */
        pgprot_t vm_page_prot;          /* Access permissions of this VMA. */
        unsigned long vm_flags;         /* Flags, see mm.h. */
 
-       struct rb_node vm_rb;
-
        /*
         * For areas with an address space and backing store,
         * linkage into the address_space->i_mmap interval tree, or
@@ -322,6 +334,7 @@ struct mm_struct {
        unsigned long task_size;                /* size of task vm space */
        unsigned long cached_hole_size;         /* if non-zero, the largest hole below free_area_cache */
        unsigned long free_area_cache;          /* first hole of size cached_hole_size or larger */
+       unsigned long highest_vm_end;           /* highest vma end address */
        pgd_t * pgd;
        atomic_t mm_users;                      /* How many users with user space? */
        atomic_t mm_count;                      /* How many references to "struct mm_struct" (users count as 1) */