diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index 4c410fd1a030..4afc5a832200 100644 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -2903,7 +2903,7 @@ - + @@ -2914,13 +2914,19 @@ - + - + - + + + + + + + @@ -4479,75 +4485,75 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16680,7 +16686,7 @@ - + @@ -16688,7 +16694,7 @@ - + @@ -16777,7 +16783,7 @@ - + @@ -18101,405 +18107,405 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -22508,12 +22514,12 @@ - + - + - + @@ -22681,7 +22687,7 @@ - + @@ -22690,7 +22696,7 @@ - + @@ -22868,21 +22874,21 @@ - + - + - + - + - + - + @@ -23183,12 +23189,12 @@ - + - + - + @@ -23830,91 +23836,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -24746,12 +24752,12 @@ - + - + - + @@ -24978,7 +24984,7 @@ - + @@ -25776,27 +25782,27 @@ - + - + - + - + - + - + - + - + @@ -26113,222 +26119,222 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -26369,21 +26375,21 @@ - + - + - + - + - + - + @@ -27828,26 +27834,26 @@ - + - + - + - + - + - + - + - + @@ -29323,18 +29329,18 @@ - + - + - + - + - + @@ -29801,15 +29807,15 @@ - + - + - + - + @@ -31637,11 +31643,7 @@ - - - - - + @@ -33494,8 +33496,8 @@ - - + + @@ -33515,12 +33517,12 @@ - - + + - - + + @@ -33873,7 +33875,7 @@ - + @@ -36156,421 +36158,421 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -36645,222 +36647,222 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -37265,7 +37267,7 @@ - + @@ -37611,7 +37613,7 @@ - + @@ -37714,23 +37716,23 @@ - + - + - + - + - + - + - + @@ -37744,69 +37746,69 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38749,27 +38751,27 @@ - + - + - + - + - + - + - + - + @@ -38800,66 +38802,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38876,63 +38878,63 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -38976,29 +38978,29 @@ - + - + - + - + - + - + - + - + - + @@ -39007,7 +39009,7 @@ - + @@ -39018,48 +39020,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42425,10 +42427,10 @@ - - - - + + + + @@ -42494,34 +42496,34 @@ - - + + - - - - - + + + + + - - - - + + + + - - + + - - + + - - - + + + @@ -44790,42 +44792,42 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - - + + @@ -46945,7 +46947,7 @@ - + @@ -46995,12 +46997,12 @@ - + - + @@ -47783,69 +47785,69 @@ - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - - - - + - - + + - - - + + + + + + + - - - + + + - - - + + + - - - + + + @@ -47854,61 +47856,61 @@ - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + @@ -48836,9 +48838,9 @@ - + - + @@ -48870,7 +48872,7 @@ - + @@ -50265,17 +50267,17 @@ - - + + - - + + - - - + + + @@ -50570,45 +50572,45 @@ - + - - - - - - - - - - + + + + + + + + + + - - + + - - + + - - + + - - - - - + + + + + - - - - - + + + + + @@ -52069,7 +52071,7 @@ - + @@ -52089,222 +52091,222 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52479,86 +52481,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -52593,28 +52595,28 @@ - + - + - + - + - + - + - + - + @@ -53034,45 +53036,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -53561,18 +53563,18 @@ - + - + - + - + - + @@ -54002,33 +54004,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -54580,18 +54582,18 @@ - + - + - + - + - + @@ -56694,21 +56696,21 @@ - - + + - - + + - - - + + + - - + + @@ -56734,17 +56736,17 @@ - - + + - + - + - + @@ -57150,222 +57152,222 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59632,45 +59634,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -59840,33 +59842,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -59880,18 +59882,18 @@ - + - + - + - + - + @@ -60143,28 +60145,28 @@ - + - + - + - + - + - + - + - + @@ -60212,48 +60214,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -60279,42 +60281,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -60324,26 +60326,26 @@ - + - + - + - + - + - + - + - + @@ -60595,11 +60597,11 @@ - + - + @@ -60687,21 +60689,21 @@ - + - + - + - + - + - + @@ -64298,7 +64300,7 @@ - + @@ -64396,7 +64398,7 @@ - + @@ -66831,7 +66833,7 @@ - + @@ -80116,7 +80118,7 @@ - + @@ -80129,11 +80131,11 @@ - + - + @@ -80143,7 +80145,7 @@ - + @@ -80152,11 +80154,11 @@ - + - + @@ -80391,7 +80393,7 @@ - + @@ -80575,21 +80577,21 @@ - + - + - + - + @@ -80617,23 +80619,23 @@ - + - + - + - + @@ -80641,7 +80643,7 @@ - + @@ -80655,18 +80657,18 @@ - + - + - + @@ -80691,7 +80693,7 @@ - + @@ -84182,62 +84184,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84248,7 +84250,7 @@ - + @@ -84554,16 +84556,16 @@ - + - + - + @@ -84591,7 +84593,7 @@ - + @@ -84606,27 +84608,27 @@ - + - + - + - + - + - + @@ -85483,7 +85485,7 @@ - + @@ -86101,25 +86103,25 @@ - - - + + + - - - + + + - - - + + + - - - - + + + + @@ -86443,7 +86445,7 @@ - + @@ -88566,35 +88568,35 @@ - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + @@ -88603,50 +88605,50 @@ - - - - + + + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + @@ -88654,20 +88656,20 @@ - - + + - - + + - - + + - - + + @@ -90232,23 +90234,23 @@ - - - + + + - - - - + + + + - - + + @@ -92650,7 +92652,7 @@ - + @@ -106007,7 +106009,7 @@ - + @@ -106052,7 +106054,7 @@ - + @@ -106235,7 +106237,7 @@ - + @@ -106254,15 +106256,15 @@ - - + + - - - - - + + + + + @@ -107003,8 +107005,8 @@ - - + + @@ -107263,7 +107265,7 @@ - + @@ -107546,12 +107548,6 @@ - - - - - - @@ -107879,7 +107875,7 @@ - + @@ -107913,7 +107909,7 @@ - + @@ -108087,7 +108083,7 @@ - + @@ -109287,11 +109283,11 @@ - - - - - + + + + + @@ -109325,30 +109321,30 @@ - - - - + + + + - - - - - - - + + + + + + + - - - - + + + + - - - + + + @@ -109553,10 +109549,10 @@ - - - - + + + + @@ -109569,17 +109565,6 @@ - - - - - - - - - - - @@ -109708,15 +109693,19 @@ + + + + - - - + + + @@ -109787,6 +109776,17 @@ + + + + + + + + + + + @@ -109961,39 +109961,39 @@ - - - + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + @@ -110293,12 +110293,12 @@ - - - - - - + + + + + + @@ -110377,27 +110377,27 @@ - + - + - + - + - + - + - - - + + + @@ -110406,14 +110406,20 @@ - - + + - + + + + + + + @@ -110449,7 +110455,7 @@ - + @@ -110704,7 +110710,7 @@ - + @@ -110872,192 +110878,192 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111545,50 +111551,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111629,15 +111635,15 @@ - + - + - + - + @@ -111707,7 +111713,7 @@ - + @@ -111722,25 +111728,25 @@ - - - + + + - - - - + + + + - - - + + + - - - + + + @@ -111756,6 +111762,11 @@ + + + + + @@ -125320,13 +125331,6 @@ - - - - - - - @@ -125814,28 +125818,28 @@ - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -125973,7 +125977,7 @@ - + @@ -127121,7 +127125,7 @@ - + @@ -127129,12 +127133,12 @@ - - + + - - + + @@ -127153,17 +127157,17 @@ - - + + - - - + + + @@ -127207,7 +127211,7 @@ - + @@ -127438,15 +127442,15 @@ - + - + - + - + @@ -127463,23 +127467,23 @@ - - + + - - - + + + - - - + + + - - - + + + @@ -127519,79 +127523,79 @@ - - - - + + + + - - + + - - + + - - - - + + + + - - - + + + - - + + - + - - - - + + + + - - - - - - + + + + + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - - - + + + + @@ -128188,7 +128192,7 @@ - + @@ -128245,35 +128249,35 @@ - - + + - - - - - - + + + + + + - - - - - + + + + + - - - - - + + + + + - - - + + + @@ -128292,7 +128296,7 @@ - + @@ -128554,15 +128558,15 @@ - + - + - + - + @@ -128693,47 +128697,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -129294,6 +129257,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -129511,7 +129515,7 @@ - + @@ -129965,7 +129969,7 @@ - + @@ -130001,7 +130005,7 @@ - + @@ -130655,7 +130659,7 @@ - + @@ -130709,27 +130713,27 @@ - - - - - + + + + + - - - - - - - + + + + + + + - - - - - + + + + + @@ -136088,50 +136092,50 @@ - - - + + + - - - + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - - - + + + @@ -136238,25 +136242,25 @@ - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + @@ -136345,37 +136349,37 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - - - - + + + + @@ -136416,7 +136420,7 @@ - + @@ -142423,31 +142427,31 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 91ccae946716..6ae8fb134aea 100644 --- a/include/linux/rmap.h +++ b/include/linux/rmap.h @@ -38,13 +38,7 @@ struct anon_vma { */ atomic_t refcount; - /* - * Count of child anon_vmas and VMAs which points to this anon_vma. - * - * This counter is used for making decision about reusing anon_vma - * instead of forking new one. See comments in function anon_vma_clone. - */ - unsigned degree; + unsigned degree; /* ANDROID: KABI preservation, DO NOT USE! */ struct anon_vma *parent; /* Parent of this anon_vma */ @@ -59,6 +53,25 @@ struct anon_vma { /* Interval tree of private "related" vmas */ struct rb_root_cached rb_root; + + /* + * ANDROID: KABI preservation, it's safe to put these at the end of this structure as it's + * only passed by a pointer everywhere, the size and internal structures are local to the + * core kernel. + */ +#ifndef __GENKSYMS__ + /* + * Count of child anon_vmas. Equals to the count of all anon_vmas that + * have ->parent pointing to this one, including itself. + * + * This counter is used for making decision about reusing anon_vma + * instead of forking new one. See comments in function anon_vma_clone. + */ + unsigned long num_children; + /* Count of VMAs whose ->anon_vma pointer points to this object. */ + unsigned long num_active_vmas; +#endif + }; /* diff --git a/mm/rmap.c b/mm/rmap.c index e578eb942317..795bda5e3693 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -82,7 +82,8 @@ static inline struct anon_vma *anon_vma_alloc(void) anon_vma = kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL); if (anon_vma) { atomic_set(&anon_vma->refcount, 1); - anon_vma->degree = 1; /* Reference for first vma */ + anon_vma->num_children = 0; + anon_vma->num_active_vmas = 0; anon_vma->parent = anon_vma; /* * Initialise the anon_vma root to point to itself. If called @@ -190,6 +191,7 @@ int __anon_vma_prepare(struct vm_area_struct *vma) anon_vma = anon_vma_alloc(); if (unlikely(!anon_vma)) goto out_enomem_free_avc; + anon_vma->num_children++; /* self-parent link for new root */ allocated = anon_vma; } @@ -199,8 +201,7 @@ int __anon_vma_prepare(struct vm_area_struct *vma) if (likely(!vma->anon_vma)) { vma->anon_vma = anon_vma; anon_vma_chain_link(vma, avc, anon_vma); - /* vma reference or self-parent link for new root */ - anon_vma->degree++; + anon_vma->num_active_vmas++; allocated = NULL; avc = NULL; } @@ -279,19 +280,19 @@ int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src) anon_vma_chain_link(dst, avc, anon_vma); /* - * Reuse existing anon_vma if its degree lower than two, - * that means it has no vma and only one anon_vma child. + * Reuse existing anon_vma if it has no vma and only one + * anon_vma child. * - * Do not chose parent anon_vma, otherwise first child - * will always reuse it. Root anon_vma is never reused: + * Root anon_vma is never reused: * it has self-parent reference and at least one child. */ - if (!dst->anon_vma && anon_vma != src->anon_vma && - anon_vma->degree < 2) + if (!dst->anon_vma && src->anon_vma && + anon_vma->num_children < 2 && + anon_vma->num_active_vmas == 0) dst->anon_vma = anon_vma; } if (dst->anon_vma) - dst->anon_vma->degree++; + dst->anon_vma->num_active_vmas++; unlock_anon_vma_root(root); return 0; @@ -341,6 +342,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma) anon_vma = anon_vma_alloc(); if (!anon_vma) goto out_error; + anon_vma->num_active_vmas++; avc = anon_vma_chain_alloc(GFP_KERNEL); if (!avc) goto out_error_free_anon_vma; @@ -361,7 +363,7 @@ int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma) vma->anon_vma = anon_vma; anon_vma_lock_write(anon_vma); anon_vma_chain_link(vma, avc, anon_vma); - anon_vma->parent->degree++; + anon_vma->parent->num_children++; anon_vma_unlock_write(anon_vma); return 0; @@ -393,7 +395,7 @@ void unlink_anon_vmas(struct vm_area_struct *vma) * to free them outside the lock. */ if (RB_EMPTY_ROOT(&anon_vma->rb_root.rb_root)) { - anon_vma->parent->degree--; + anon_vma->parent->num_children--; continue; } @@ -401,7 +403,8 @@ void unlink_anon_vmas(struct vm_area_struct *vma) anon_vma_chain_free(avc); } if (vma->anon_vma) - vma->anon_vma->degree--; + vma->anon_vma->num_active_vmas--; + unlock_anon_vma_root(root); /* @@ -412,7 +415,8 @@ void unlink_anon_vmas(struct vm_area_struct *vma) list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) { struct anon_vma *anon_vma = avc->anon_vma; - VM_WARN_ON(anon_vma->degree); + VM_WARN_ON(anon_vma->num_children); + VM_WARN_ON(anon_vma->num_active_vmas); put_anon_vma(anon_vma); list_del(&avc->same_vma);