diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index e2ca86c05577..829902945a90 100644 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -13100,140 +13100,140 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -15148,9 +15148,9 @@ - + - + @@ -15173,116 +15173,116 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -17943,7 +17943,7 @@ - + @@ -17954,13 +17954,19 @@ - + - + - + + + + + + + @@ -18064,56 +18070,56 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -20847,66 +20853,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -22592,9 +22598,9 @@ - + - + @@ -26342,12 +26348,12 @@ - + - + - + @@ -28332,24 +28338,24 @@ - + - + - + - + - + - + - + @@ -30146,7 +30152,7 @@ - + @@ -32082,7 +32088,7 @@ - + @@ -32545,7 +32551,7 @@ - + @@ -33511,7 +33517,7 @@ - + @@ -33522,13 +33528,19 @@ - + - + - + + + + + + + @@ -33758,21 +33770,21 @@ - + - + - + - + - + - + @@ -47722,11 +47734,7 @@ - - - - - + @@ -48315,14 +48323,14 @@ - - - - + + + + - - + + @@ -49994,48 +50002,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -50051,22 +50059,22 @@ - + - + - + - + @@ -54028,7 +54036,7 @@ - + @@ -55292,14 +55300,14 @@ - + - + @@ -55308,7 +55316,7 @@ - + @@ -55395,7 +55403,7 @@ - + @@ -55406,7 +55414,7 @@ - + @@ -55743,14 +55751,14 @@ - - - - + + + + - - + + @@ -56079,21 +56087,21 @@ - + - + - + - + - + - + @@ -56129,8 +56137,8 @@ - - + + @@ -58588,50 +58596,50 @@ - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + @@ -61136,18 +61144,18 @@ - + - + - + @@ -64534,7 +64542,7 @@ - + @@ -64543,7 +64551,7 @@ - + @@ -64690,15 +64698,15 @@ - - - - + + + + - - - + + + @@ -64706,23 +64714,23 @@ - + - - - + + + - - - - + + + + - + @@ -67603,23 +67611,23 @@ - - + + - - + + - - + + - - - - - + + + + + @@ -67627,17 +67635,17 @@ - - + + - - + + - - - + + + @@ -74254,27 +74262,27 @@ - - + + - - + + - - - + + + - - + + - - - - + + + + @@ -74311,17 +74319,17 @@ - - + + - - + + - - - + + + @@ -82462,14 +82470,14 @@ - - + + - - - - + + + + @@ -89858,14 +89866,14 @@ - + - + @@ -91794,13 +91802,13 @@ - + - - - - + + + + @@ -91811,172 +91819,172 @@ - - - - - + + + + + - - + + - - - - - - - + - - - - - - - - - - - - - + + - - - - + + + - - - + + + + + + + - - - - - - + + - + + + + + + + + + + + + + + + - + + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - - - + + + + - - - + + + - - + + - - - - + + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - + + + + - - + + - - - - + + + + @@ -104152,18 +104160,18 @@ - - - - - + + + + + - - - - - + + + + + @@ -107887,39 +107895,39 @@ - - - + + + - - - + + + - - + + - - + + - - + + - - - - + + + + - - - - - + + + + + @@ -109051,25 +109059,25 @@ - - - + + + - - + + - - + + - - + + - - + + @@ -109385,7 +109393,7 @@ - + @@ -110276,21 +110284,21 @@ - + - + - + - + - + - + @@ -110340,128 +110348,128 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -110834,18 +110842,18 @@ - + - + - + @@ -110861,85 +110869,85 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111050,69 +111058,69 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111389,20 +111397,20 @@ - + - + - + - + - + - + @@ -111986,140 +111994,140 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -112190,11 +112198,11 @@ - + - + @@ -112262,7 +112270,7 @@ - + @@ -112276,7 +112284,7 @@ - + @@ -112297,11 +112305,11 @@ - + - + @@ -112313,7 +112321,7 @@ - + @@ -112330,7 +112338,7 @@ - + @@ -112384,15 +112392,15 @@ - + - + - + @@ -112445,7 +112453,7 @@ - + @@ -112519,16 +112527,16 @@ - + - + - + @@ -114699,37 +114707,37 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -117214,31 +117222,31 @@ - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + @@ -117253,14 +117261,14 @@ - - - + + + - - - + + + @@ -118726,7 +118734,7 @@ - + @@ -119113,7 +119121,7 @@ - + @@ -119135,7 +119143,7 @@ - + @@ -119155,7 +119163,7 @@ - + @@ -119295,10 +119303,10 @@ - - - - + + + + @@ -121558,47 +121566,47 @@ - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - + + @@ -121913,9 +121921,9 @@ - - - + + + @@ -121926,54 +121934,54 @@ - - - + + + - - - + + + - - + + - - + + - - - + + + - - + + - - + + - - - + + + - - + + - - - - + + + + - - + + @@ -121988,56 +121996,56 @@ - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + @@ -122052,16 +122060,16 @@ - - + + - - + + - - + + @@ -126192,16 +126200,16 @@ - - - - - - + + + + + + - - + + @@ -130178,7 +130186,7 @@ - + @@ -130192,7 +130200,7 @@ - + @@ -133947,7 +133955,7 @@ - + @@ -134563,7 +134571,7 @@ - + @@ -134654,7 +134662,7 @@ - + @@ -135150,18 +135158,18 @@ - + - + - + - + - + @@ -136178,35 +136186,35 @@ - - - - + + + + - - + + - - - + + + - - + + - - - + + + - + @@ -136217,33 +136225,33 @@ - + - + - + - + - + - + - + - + - + - + @@ -137854,6 +137862,17 @@ + + + + + + + + + + + @@ -138297,17 +138316,6 @@ - - - - - - - - - - - @@ -138898,7 +138906,7 @@ - + @@ -139071,7 +139079,7 @@ - + @@ -140379,7 +140387,7 @@ - + @@ -140922,7 +140930,7 @@ - + @@ -141168,21 +141176,21 @@ - - - + + + - - + + - - + + @@ -141251,7 +141259,7 @@ - + @@ -141268,7 +141276,7 @@ - + @@ -141283,7 +141291,7 @@ - + @@ -141322,7 +141330,7 @@ - + @@ -141334,7 +141342,7 @@ - + @@ -141343,12 +141351,12 @@ - + - + @@ -141357,7 +141365,7 @@ - + @@ -141369,7 +141377,7 @@ - + @@ -144729,9 +144737,9 @@ - - - + + + @@ -144987,7 +144995,7 @@ - + @@ -145056,7 +145064,7 @@ - + @@ -145575,12 +145583,12 @@ - - + + - - + + @@ -145867,7 +145875,7 @@ - + @@ -145951,7 +145959,7 @@ - + @@ -146131,27 +146139,27 @@ - - - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + @@ -146163,11 +146171,11 @@ - - - - - + + + + + @@ -146731,14 +146739,14 @@ - + - + @@ -146869,8 +146877,8 @@ - - + + @@ -147235,14 +147243,14 @@ - + - + @@ -147577,12 +147585,6 @@ - - - - - - @@ -147864,7 +147866,7 @@ - + @@ -147895,7 +147897,7 @@ - + @@ -148051,7 +148053,7 @@ - + @@ -148073,6 +148075,11 @@ + + + + + @@ -148653,7 +148660,7 @@ - + @@ -149540,10 +149547,10 @@ - - - - + + + + @@ -149568,14 +149575,14 @@ - - + + - - - - + + + + @@ -149794,9 +149801,8 @@ - - - + + @@ -149805,9 +149811,9 @@ - - - + + + @@ -150129,13 +150135,13 @@ - - - - - - - + + + + + + + @@ -150587,12 +150593,12 @@ - - - - - - + + + + + + @@ -150683,26 +150689,32 @@ - + - + - + - + - + - + - - - + + + + + + + + + @@ -150720,12 +150732,12 @@ - - + + - + @@ -150771,7 +150783,7 @@ - + @@ -150928,7 +150940,7 @@ - + @@ -151096,7 +151108,7 @@ - + @@ -151308,29 +151320,29 @@ - - - - - + + + + + - - - - + + + + - - - + + + - + - - + + @@ -156715,123 +156727,123 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -156845,62 +156857,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -157056,178 +157068,178 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -164171,40 +164183,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -164212,12 +164191,9 @@ - - - - + @@ -164226,12 +164202,9 @@ - - - - + @@ -164241,12 +164214,9 @@ - - - - + @@ -164257,9 +164227,51 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -164419,12 +164431,12 @@ - - + + - - + + @@ -164433,7 +164445,7 @@ - + @@ -165302,18 +165314,18 @@ - - - - - - + + + + + + - - - - + + + + @@ -165511,26 +165523,26 @@ - - - - - - - - + + + + + + + + - - - - + + + + - - - - + + + + @@ -166342,12 +166354,12 @@ - - - - - - + + + + + + @@ -167070,12 +167082,12 @@ - - - - - - + + + + + + @@ -167126,209 +167138,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -167464,18 +167276,7 @@ - - - - - - - - - - - @@ -167510,7 +167311,7 @@ - + @@ -167664,13 +167465,6 @@ - - - - - - - @@ -167678,10 +167472,6 @@ - - - - @@ -167911,8 +167701,8 @@ - - + + @@ -167952,52 +167742,52 @@ - - - - - + + + + + - - + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - + + + @@ -175393,7 +175183,7 @@ - + @@ -177615,7 +177405,7 @@ - + @@ -177950,27 +177740,27 @@ - - - - - + + + + + - - - - - - - + + + + + + + - - - - - + + + + + @@ -178435,13 +178225,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -178536,6 +178537,17 @@ + + + + + + + + + + + @@ -179970,7 +179982,7 @@ - + @@ -179999,7 +180011,7 @@ - + @@ -180591,7 +180603,7 @@ - + @@ -181551,7 +181563,7 @@ - + @@ -184801,9 +184813,9 @@ - - - + + + @@ -185257,7 +185269,7 @@ - + @@ -191472,59 +191484,59 @@ - - - + + + - - - + + + - - - + + + - - - - + + + + - - - + + + - - - - - + + + + + - - - + + + - - - + + + - - - + + + - - - + + + diff --git a/include/linux/rmap.h b/include/linux/rmap.h index 7121bdd286e9..68389d044fbd 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 ffbbd92379cb..f67418b2fc29 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -83,7 +83,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 @@ -191,6 +192,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; } @@ -200,8 +202,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; } @@ -280,19 +281,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; @@ -342,6 +343,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; @@ -362,7 +364,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; @@ -394,7 +396,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; } @@ -402,7 +404,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); /* @@ -413,7 +416,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);