summaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorVlastimil Babka <vbabka@suse.cz>2021-02-24 12:01:19 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2021-02-24 13:38:27 -0800
commitd930ff03c4d12621443f2d1c56d2f80745469021 (patch)
tree0b08c7a45c71a0b3e08ca27122c42207e8836ab6 /init
parent59450bbc12bee1c4e5dd25e6aa5d6a45a7bd6e81 (diff)
mm, slub: splice cpu and page freelists in deactivate_slab()
In deactivate_slab() we currently move all but one objects on the cpu freelist to the page freelist one by one using the costly cmpxchg_double() operation. Then we unfreeze the page while moving the last object on page freelist, with a final cmpxchg_double(). This can be optimized to avoid the cmpxchg_double() per object. Just count the objects on cpu freelist (to adjust page->inuse properly) and also remember the last object in the chain. Then splice page->freelist to the last object and effectively add the whole cpu freelist to page->freelist while unfreezing the page, with a single cmpxchg_double(). Link: https://lkml.kernel.org/r/20210115183543.15097-1-vbabka@suse.cz Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Jann Horn <jannh@google.com> Cc: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'init')
0 files changed, 0 insertions, 0 deletions