mm-commits Archive on lore.kernel.org
 help / color / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: akpm@linux-foundation.org, cl@linux.com, guro@fb.com,
	hannes@cmpxchg.org, linux-mm@kvack.org, mhocko@kernel.org,
	mm-commits@vger.kernel.org, shakeelb@google.com,
	torvalds@linux-foundation.org
Subject: [patch 055/173] mm: memcg/slab: pre-allocate obj_cgroups for slab caches with SLAB_ACCOUNT
Date: Wed, 24 Feb 2021 12:03:11 -0800
Message-ID: <20210224200311.FvZgQBV11%akpm@linux-foundation.org> (raw)
In-Reply-To: <20210224115824.1e289a6895087f10c41dd8d6@linux-foundation.org>

From: Roman Gushchin <guro@fb.com>
Subject: mm: memcg/slab: pre-allocate obj_cgroups for slab caches with SLAB_ACCOUNT

In general it's unknown in advance if a slab page will contain accounted
objects or not.  In order to avoid memory waste, an obj_cgroup vector is
allocated dynamically when a need to account of a new object arises.  Such
approach is memory efficient, but requires an expensive cmpxchg() to set
up the memcg/objcgs pointer, because an allocation can race with a
different allocation on another cpu.

But in some common cases it's known for sure that a slab page will contain
accounted objects: if the page belongs to a slab cache with a SLAB_ACCOUNT
flag set.  It includes such popular objects like vm_area_struct, anon_vma,
task_struct, etc.

In such cases we can pre-allocate the objcgs vector and simple assign it
to the page without any atomic operations, because at this early stage the
page is not visible to anyone else.

A very simplistic benchmark (allocating 10000000 64-bytes objects in a
row) shows ~15% win.  In the real life it seems that most workloads are
not very sensitive to the speed of (accounted) slab allocations.

[guro@fb.com: open-code set_page_objcgs() and add some comments, by Johannes]
  Link: https://lkml.kernel.org/r/20201113001926.GA2934489@carbon.dhcp.thefacebook.com
[akpm@linux-foundation.org: fix it for mm-slub-call-account_slab_page-after-slab-page-initialization-fix.patch]
Link: https://lkml.kernel.org/r/20201110195753.530157-2-guro@fb.com
Signed-off-by: Roman Gushchin <guro@fb.com>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Shakeel Butt <shakeelb@google.com>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Christoph Lameter <cl@linux.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 include/linux/memcontrol.h |   19 -------------------
 mm/memcontrol.c            |   23 +++++++++++++++++++----
 mm/slab.c                  |    2 +-
 mm/slab.h                  |   14 ++++++++++----
 mm/slub.c                  |    2 +-
 5 files changed, 31 insertions(+), 29 deletions(-)

--- a/include/linux/memcontrol.h~mm-memcg-slab-pre-allocate-obj_cgroups-for-slab-caches-with-slab_account
+++ a/include/linux/memcontrol.h
@@ -475,19 +475,6 @@ static inline struct obj_cgroup **page_o
 	return (struct obj_cgroup **)(memcg_data & ~MEMCG_DATA_FLAGS_MASK);
 }
 
-/*
- * set_page_objcgs - associate a page with a object cgroups vector
- * @page: a pointer to the page struct
- * @objcgs: a pointer to the object cgroups vector
- *
- * Atomically associates a page with a vector of object cgroups.
- */
-static inline bool set_page_objcgs(struct page *page,
-					struct obj_cgroup **objcgs)
-{
-	return !cmpxchg(&page->memcg_data, 0, (unsigned long)objcgs |
-			MEMCG_DATA_OBJCGS);
-}
 #else
 static inline struct obj_cgroup **page_objcgs(struct page *page)
 {
@@ -498,12 +485,6 @@ static inline struct obj_cgroup **page_o
 {
 	return NULL;
 }
-
-static inline bool set_page_objcgs(struct page *page,
-					struct obj_cgroup **objcgs)
-{
-	return true;
-}
 #endif
 
 static __always_inline bool memcg_stat_item_in_bytes(int idx)
--- a/mm/memcontrol.c~mm-memcg-slab-pre-allocate-obj_cgroups-for-slab-caches-with-slab_account
+++ a/mm/memcontrol.c
@@ -2935,9 +2935,10 @@ static void commit_charge(struct page *p
 
 #ifdef CONFIG_MEMCG_KMEM
 int memcg_alloc_page_obj_cgroups(struct page *page, struct kmem_cache *s,
-				 gfp_t gfp)
+				 gfp_t gfp, bool new_page)
 {
 	unsigned int objects = objs_per_slab_page(s, page);
+	unsigned long memcg_data;
 	void *vec;
 
 	vec = kcalloc_node(objects, sizeof(struct obj_cgroup *), gfp,
@@ -2945,11 +2946,25 @@ int memcg_alloc_page_obj_cgroups(struct
 	if (!vec)
 		return -ENOMEM;
 
-	if (!set_page_objcgs(page, vec))
+	memcg_data = (unsigned long) vec | MEMCG_DATA_OBJCGS;
+	if (new_page) {
+		/*
+		 * If the slab page is brand new and nobody can yet access
+		 * it's memcg_data, no synchronization is required and
+		 * memcg_data can be simply assigned.
+		 */
+		page->memcg_data = memcg_data;
+	} else if (cmpxchg(&page->memcg_data, 0, memcg_data)) {
+		/*
+		 * If the slab page is already in use, somebody can allocate
+		 * and assign obj_cgroups in parallel. In this case the existing
+		 * objcg vector should be reused.
+		 */
 		kfree(vec);
-	else
-		kmemleak_not_leak(vec);
+		return 0;
+	}
 
+	kmemleak_not_leak(vec);
 	return 0;
 }
 
--- a/mm/slab.c~mm-memcg-slab-pre-allocate-obj_cgroups-for-slab-caches-with-slab_account
+++ a/mm/slab.c
@@ -1379,7 +1379,7 @@ static struct page *kmem_getpages(struct
 		return NULL;
 	}
 
-	account_slab_page(page, cachep->gfporder, cachep);
+	account_slab_page(page, cachep->gfporder, cachep, flags);
 	__SetPageSlab(page);
 	/* Record if ALLOC_NO_WATERMARKS was set when allocating the slab */
 	if (sk_memalloc_socks() && page_is_pfmemalloc(page))
--- a/mm/slab.h~mm-memcg-slab-pre-allocate-obj_cgroups-for-slab-caches-with-slab_account
+++ a/mm/slab.h
@@ -238,7 +238,7 @@ static inline bool kmem_cache_debug_flag
 
 #ifdef CONFIG_MEMCG_KMEM
 int memcg_alloc_page_obj_cgroups(struct page *page, struct kmem_cache *s,
-				 gfp_t gfp);
+				 gfp_t gfp, bool new_page);
 
 static inline void memcg_free_page_obj_cgroups(struct page *page)
 {
@@ -315,7 +315,8 @@ static inline void memcg_slab_post_alloc
 			page = virt_to_head_page(p[i]);
 
 			if (!page_objcgs(page) &&
-			    memcg_alloc_page_obj_cgroups(page, s, flags)) {
+			    memcg_alloc_page_obj_cgroups(page, s, flags,
+							 false)) {
 				obj_cgroup_uncharge(objcg, obj_full_size(s));
 				continue;
 			}
@@ -379,7 +380,8 @@ static inline struct mem_cgroup *memcg_f
 }
 
 static inline int memcg_alloc_page_obj_cgroups(struct page *page,
-					       struct kmem_cache *s, gfp_t gfp)
+					       struct kmem_cache *s, gfp_t gfp,
+					       bool new_page)
 {
 	return 0;
 }
@@ -420,8 +422,12 @@ static inline struct kmem_cache *virt_to
 }
 
 static __always_inline void account_slab_page(struct page *page, int order,
-					      struct kmem_cache *s)
+					      struct kmem_cache *s,
+					      gfp_t gfp)
 {
+	if (memcg_kmem_enabled() && (s->flags & SLAB_ACCOUNT))
+		memcg_alloc_page_obj_cgroups(page, s, gfp, true);
+
 	mod_node_page_state(page_pgdat(page), cache_vmstat_idx(s),
 			    PAGE_SIZE << order);
 }
--- a/mm/slub.c~mm-memcg-slab-pre-allocate-obj_cgroups-for-slab-caches-with-slab_account
+++ a/mm/slub.c
@@ -1785,7 +1785,7 @@ static struct page *allocate_slab(struct
 
 	page->objects = oo_objects(oo);
 
-	account_slab_page(page, oo_order(oo), s);
+	account_slab_page(page, oo_order(oo), s, flags);
 
 	page->slab_cache = s;
 	__SetPageSlab(page);
_

  parent reply index

Thread overview: 197+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-24 19:58 incoming Andrew Morton
2021-02-24 20:00 ` [patch 001/173] hexagon: remove CONFIG_EXPERIMENTAL from defconfigs Andrew Morton
2021-02-24 20:00 ` [patch 002/173] scripts/spelling.txt: increase error-prone spell checking Andrew Morton
2021-02-24 20:00 ` [patch 003/173] scripts/spelling.txt: check for "exeeds" Andrew Morton
2021-02-24 20:00 ` [patch 004/173] scripts/spelling.txt: add "allocted" and "exeeds" typo Andrew Morton
2021-02-24 20:00 ` [patch 005/173] scripts/spelling.txt: add more spellings to spelling.txt Andrew Morton
2021-02-24 20:00 ` [patch 006/173] ntfs: layout.h: delete duplicated words Andrew Morton
2021-02-24 20:00 ` [patch 007/173] ntfs: check for valid standard information attribute Andrew Morton
2021-02-24 20:00 ` [patch 008/173] ocfs2: remove redundant conditional before iput Andrew Morton
2021-02-24 20:00 ` [patch 009/173] ocfs2: clean up some definitions which are not used any more Andrew Morton
2021-02-24 20:00 ` [patch 010/173] ocfs2: fix a use after free on error Andrew Morton
2021-02-24 20:00 ` [patch 011/173] ocfs2: simplify the calculation of variables Andrew Morton
2021-02-24 20:00 ` [patch 012/173] fs: delete repeated words in comments Andrew Morton
2021-02-24 20:00 ` [patch 013/173] ramfs: support O_TMPFILE Andrew Morton
2021-02-24 20:21   ` Christian Brauner
2021-02-24 20:00 ` [patch 014/173] mm, tracing: record slab name for kmem_cache_free() Andrew Morton
2021-02-25  1:37   ` Steven Rostedt
2021-02-25  1:51     ` Linus Torvalds
2021-02-25  1:52       ` Linus Torvalds
2021-02-25  2:03       ` Steven Rostedt
2021-02-25  7:06         ` Jacob Wen
2021-02-25 14:25           ` Steven Rostedt
2021-02-25  2:07     ` Steven Rostedt
2021-02-25  7:07       ` Jacob Wen
2021-02-25 14:31         ` Steven Rostedt
2021-02-25 17:49           ` Linus Torvalds
2021-02-25 17:57             ` Steven Rostedt
2021-02-25 21:48               ` Steven Rostedt
2021-02-26 15:54                 ` Steven Rostedt
2021-02-26  2:02               ` Jacob Wen
2021-02-26  2:56                 ` Steven Rostedt
2021-02-26  3:48                   ` Jacob Wen
2021-02-26 14:15                     ` Steven Rostedt
2021-02-24 20:00 ` [patch 015/173] mm/sl?b.c: remove ctor argument from kmem_cache_flags Andrew Morton
2021-02-24 20:01 ` [patch 016/173] mm/slab: minor coding style tweaks Andrew Morton
2021-02-24 20:01 ` [patch 017/173] mm/slub: disable user tracing for kmemleak caches by default Andrew Morton
2021-02-24 20:01 ` [patch 018/173] mm, slub: stop freeing kmem_cache_node structures on node offline Andrew Morton
2021-02-24 20:01 ` [patch 019/173] mm, slab, slub: stop taking memory hotplug lock Andrew Morton
2021-02-24 20:01 ` [patch 020/173] mm, slab, slub: stop taking cpu " Andrew Morton
2021-02-24 20:01 ` [patch 021/173] mm, slub: splice cpu and page freelists in deactivate_slab() Andrew Morton
2021-02-24 20:01 ` [patch 022/173] mm, slub: remove slub_memcg_sysfs boot param and CONFIG_SLUB_MEMCG_SYSFS_ON Andrew Morton
2021-02-24 20:01 ` [patch 023/173] mm/slub: minor coding style tweaks Andrew Morton
2021-02-24 20:01 ` [patch 024/173] mm/debug: improve memcg debugging Andrew Morton
2021-02-24 20:01 ` [patch 025/173] mm/debug_vm_pgtable/basic: add validation for dirtiness after write protect Andrew Morton
2021-02-24 20:01 ` [patch 026/173] mm/debug_vm_pgtable/basic: iterate over entire protection_map[] Andrew Morton
2021-02-24 20:01 ` [patch 027/173] mm/page_owner: use helper function zone_end_pfn() to get end_pfn Andrew Morton
2021-02-24 20:01 ` [patch 028/173] mm/filemap: remove unused parameter and change to void type for replace_page_cache_page() Andrew Morton
2021-02-24 20:01 ` [patch 029/173] mm/filemap: don't revert iter on -EIOCBQUEUED Andrew Morton
2021-02-24 20:01 ` [patch 030/173] mm/filemap: rename generic_file_buffered_read subfunctions Andrew Morton
2021-02-24 20:01 ` [patch 031/173] mm/filemap: remove dynamically allocated array from filemap_read Andrew Morton
2021-02-24 20:01 ` [patch 032/173] mm/filemap: convert filemap_get_pages to take a pagevec Andrew Morton
2021-02-24 20:01 ` [patch 033/173] mm/filemap: use head pages in generic_file_buffered_read Andrew Morton
2021-02-24 20:02 ` [patch 034/173] mm/filemap: pass a sleep state to put_and_wait_on_page_locked Andrew Morton
2021-02-24 20:02 ` [patch 035/173] mm/filemap: support readpage splitting a page Andrew Morton
2021-02-24 20:02 ` [patch 036/173] mm/filemap: inline __wait_on_page_locked_async into caller Andrew Morton
2021-02-24 20:02 ` [patch 037/173] mm/filemap: don't call ->readpage if IOCB_WAITQ is set Andrew Morton
2021-02-24 20:02 ` [patch 038/173] mm/filemap: change filemap_read_page calling conventions Andrew Morton
2021-02-24 20:02 ` [patch 039/173] mm/filemap: change filemap_create_page " Andrew Morton
2021-02-24 20:02 ` [patch 040/173] mm/filemap: convert filemap_update_page to return an errno Andrew Morton
2021-02-24 20:02 ` [patch 041/173] mm/filemap: move the iocb checks into filemap_update_page Andrew Morton
2021-02-24 20:02 ` [patch 042/173] mm/filemap: add filemap_range_uptodate Andrew Morton
2021-02-24 20:02 ` [patch 043/173] mm/filemap: split filemap_readahead out of filemap_get_pages Andrew Morton
2021-02-24 20:02 ` [patch 044/173] mm/filemap: restructure filemap_get_pages Andrew Morton
2021-02-24 20:02 ` [patch 045/173] mm/filemap: don't relock the page after calling readpage Andrew Morton
2021-02-24 20:02 ` [patch 046/173] mm/filemap: rename generic_file_buffered_read to filemap_read Andrew Morton
2021-02-24 20:02 ` [patch 047/173] mm/filemap: simplify generic_file_read_iter Andrew Morton
2021-02-24 20:02 ` [patch 048/173] fs/buffer.c: add checking buffer head stat before clear Andrew Morton
2021-02-24 20:02 ` [patch 049/173] mm: backing-dev: Remove duplicated macro definition Andrew Morton
2021-02-24 20:02 ` [patch 050/173] mm/swap_slots.c: remove redundant NULL check Andrew Morton
2021-02-24 20:02 ` [patch 051/173] mm/swapfile.c: fix debugging information problem Andrew Morton
2021-02-24 20:03 ` [patch 052/173] mm/page_io: use pr_alert_ratelimited for swap read/write errors Andrew Morton
2021-02-24 20:03 ` [patch 053/173] mm/swap_state: constify static struct attribute_group Andrew Morton
2021-02-24 20:03 ` [patch 054/173] mm/swap: don't SetPageWorkingset unconditionally during swapin Andrew Morton
2021-02-24 20:03 ` Andrew Morton [this message]
2021-02-24 20:03 ` [patch 056/173] mm: memcontrol: optimize per-lruvec stats counter memory usage Andrew Morton
2021-02-24 20:03 ` [patch 057/173] mm: memcontrol: fix NR_ANON_THPS accounting in charge moving Andrew Morton
2021-02-24 20:03 ` [patch 058/173] mm: memcontrol: convert NR_ANON_THPS account to pages Andrew Morton
2021-02-24 20:03 ` [patch 059/173] mm: memcontrol: convert NR_FILE_THPS " Andrew Morton
2021-02-24 20:03 ` [patch 060/173] mm: memcontrol: convert NR_SHMEM_THPS " Andrew Morton
2021-02-24 20:03 ` [patch 061/173] mm: memcontrol: convert NR_SHMEM_PMDMAPPED " Andrew Morton
2021-02-24 20:03 ` [patch 062/173] mm: memcontrol: convert NR_FILE_PMDMAPPED " Andrew Morton
2021-02-24 20:03 ` [patch 063/173] mm: memcontrol: make the slab calculation consistent Andrew Morton
2021-02-24 20:03 ` [patch 064/173] mm/memcg: revise the using condition of lock_page_lruvec function series Andrew Morton
2021-02-24 20:03 ` [patch 065/173] mm/memcg: remove rcu locking for " Andrew Morton
2021-02-24 20:03 ` [patch 066/173] mm: memcg: add swapcache stat for memcg v2 Andrew Morton
2021-02-24 20:03 ` [patch 067/173] mm: kmem: make __memcg_kmem_(un)charge static Andrew Morton
2021-02-24 20:04 ` [patch 068/173] mm: page_counter: re-layout structure to reduce false sharing Andrew Morton
2021-02-24 20:04 ` [patch 069/173] mm/memcontrol: remove redundant NULL check Andrew Morton
2021-02-24 20:04 ` [patch 070/173] mm: memcontrol: replace the loop with a list_for_each_entry() Andrew Morton
2021-02-24 20:04 ` [patch 071/173] mm/list_lru.c: remove kvfree_rcu_local() Andrew Morton
2021-02-24 20:04 ` [patch 072/173] fs: buffer: use raw page_memcg() on locked page Andrew Morton
2021-02-24 20:04 ` [patch 073/173] mm: memcontrol: fix swap undercounting in cgroup2 Andrew Morton
2021-02-24 20:04 ` [patch 074/173] mm: memcontrol: fix get_active_memcg return value Andrew Morton
2021-02-24 20:04 ` [patch 075/173] mm: memcontrol: fix slub memory accounting Andrew Morton
2021-02-24 20:04 ` [patch 076/173] mm/mmap.c: remove unnecessary local variable Andrew Morton
2021-02-24 20:04 ` [patch 077/173] mm/memory.c: fix potential pte_unmap_unlock pte error Andrew Morton
2021-02-24 20:04 ` [patch 078/173] mm/pgtable-generic.c: simplify the VM_BUG_ON condition in pmdp_huge_clear_flush() Andrew Morton
2021-02-24 20:04 ` [patch 079/173] mm/pgtable-generic.c: optimize " Andrew Morton
2021-02-24 20:04 ` [patch 080/173] mm/memory.c: fix potential pte_unmap_unlock pte error Andrew Morton
2021-02-24 20:04 ` [patch 081/173] mm/mprotect.c: optimize error detection in do_mprotect_pkey() Andrew Morton
2021-02-24 20:04 ` [patch 082/173] mm: rmap: explicitly reset vma->anon_vma in unlink_anon_vmas() Andrew Morton
2021-02-24 20:04 ` [patch 083/173] mm: mremap: unlink anon_vmas when mremap with MREMAP_DONTUNMAP success Andrew Morton
2021-02-24 20:04 ` [patch 084/173] mm/page_reporting: use list_entry_is_head() in page_reporting_cycle() Andrew Morton
2021-02-24 20:05 ` [patch 085/173] vmalloc: remove redundant NULL check Andrew Morton
2021-02-24 20:05 ` [patch 086/173] kasan: prefix global functions with kasan_ Andrew Morton
2021-02-24 20:05 ` [patch 087/173] kasan: clarify HW_TAGS impact on TBI Andrew Morton
2021-02-24 20:05 ` [patch 088/173] kasan: clean up comments in tests Andrew Morton
2021-02-24 20:05 ` [patch 089/173] kasan: add macros to simplify checking test constraints Andrew Morton
2021-02-24 20:05 ` [patch 090/173] kasan: add match-all tag tests Andrew Morton
2021-02-24 20:05 ` [patch 091/173] kasan, arm64: allow using KUnit tests with HW_TAGS mode Andrew Morton
2021-02-24 20:05 ` [patch 092/173] kasan: rename CONFIG_TEST_KASAN_MODULE Andrew Morton
2021-02-24 20:05 ` [patch 093/173] kasan: add compiler barriers to KUNIT_EXPECT_KASAN_FAIL Andrew Morton
2021-02-24 20:05 ` [patch 094/173] kasan: adapt kmalloc_uaf2 test to HW_TAGS mode Andrew Morton
2021-02-24 20:05 ` [patch 095/173] kasan: fix memory corruption in kasan_bitops_tags test Andrew Morton
2021-02-24 20:05 ` [patch 096/173] kasan: move _RET_IP_ to inline wrappers Andrew Morton
2021-02-24 20:05 ` [patch 097/173] kasan: fix bug detection via ksize for HW_TAGS mode Andrew Morton
2021-02-24 20:05 ` [patch 098/173] kasan: add proper page allocator tests Andrew Morton
2021-02-24 20:05 ` [patch 099/173] kasan: add a test for kmem_cache_alloc/free_bulk Andrew Morton
2021-02-24 20:06 ` [patch 100/173] kasan: don't run tests when KASAN is not enabled Andrew Morton
2021-02-24 20:06 ` [patch 101/173] kasan: remove redundant config option Andrew Morton
2021-02-24 20:06 ` [patch 102/173] mm: fix prototype warning from kernel test robot Andrew Morton
2021-02-24 20:06 ` [patch 103/173] mm: rename memmap_init() and memmap_init_zone() Andrew Morton
2021-02-24 20:06 ` [patch 104/173] mm: simplify parater of function memmap_init_zone() Andrew Morton
2021-02-24 20:06 ` [patch 105/173] mm: simplify parameter of setup_usemap() Andrew Morton
2021-02-24 20:06 ` [patch 106/173] mm: remove unneeded local variable in free_area_init_core Andrew Morton
2021-02-24 20:06 ` [patch 107/173] video: fbdev: acornfb: remove free_unused_pages() Andrew Morton
2021-02-24 20:06 ` [patch 108/173] mm: simplify free_highmem_page() and free_reserved_page() Andrew Morton
2021-02-24 20:06 ` [patch 109/173] mm/gfp: add kernel-doc for gfp_t Andrew Morton
2021-02-24 20:06 ` [patch 110/173] mm,hwpoison: send SIGBUS to PF_MCE_EARLY processes on action required events Andrew Morton
2021-02-24 20:06 ` [patch 111/173] mm/huge_memory.c: update tlb entry if pmd is changed Andrew Morton
2021-02-24 20:06 ` [patch 112/173] MIPS: do not call flush_tlb_all when setting pmd entry Andrew Morton
2021-02-24 20:06 ` [patch 113/173] mm/hugetlb: fix potential double free in hugetlb_register_node() error path Andrew Morton
2021-02-24 20:06 ` [patch 114/173] mm/hugetlb.c: fix unnecessary address expansion of pmd sharing Andrew Morton
2021-02-24 20:06 ` [patch 115/173] mm/hugetlb: avoid unnecessary hugetlb_acct_memory() call Andrew Morton
2021-02-24 20:07 ` [patch 116/173] mm/hugetlb: use helper huge_page_order and pages_per_huge_page Andrew Morton
2021-02-24 20:07 ` [patch 117/173] mm/hugetlb: fix use after free when subpool max_hpages accounting is not enabled Andrew Morton
2021-02-24 20:07 ` [patch 118/173] mm/hugetlb: simplify the calculation of variables Andrew Morton
2021-02-24 20:07 ` [patch 119/173] mm/hugetlb: grab head page refcount once for group of subpages Andrew Morton
2021-02-24 20:07 ` [patch 120/173] mm/hugetlb: refactor subpage recording Andrew Morton
2021-02-24 20:07 ` [patch 121/173] mm/hugetlb: fix some comment typos Andrew Morton
2021-02-24 20:07 ` [patch 122/173] mm/hugetlb: remove redundant check in preparing and destroying gigantic page Andrew Morton
2021-02-24 20:07 ` [patch 123/173] mm/hugetlb.c: fix typos in comments Andrew Morton
2021-02-24 20:07 ` [patch 124/173] mm/huge_memory.c: remove unused return value of set_huge_zero_page() Andrew Morton
2021-02-24 20:07 ` [patch 125/173] mm/pmem: avoid inserting hugepage PTE entry with fsdax if hugepage support is disabled Andrew Morton
2021-02-24 20:07 ` [patch 126/173] hugetlb_cgroup: use helper pages_per_huge_page() in hugetlb_cgroup Andrew Morton
2021-02-24 20:07 ` [patch 127/173] mm/hugetlb: use helper function range_in_vma() in page_table_shareable() Andrew Morton
2021-02-24 20:07 ` [patch 128/173] mm/hugetlb: remove unnecessary VM_BUG_ON_PAGE on putback_active_hugepage() Andrew Morton
2021-02-24 20:07 ` [patch 129/173] mm/hugetlb: use helper huge_page_size() to get hugepage size Andrew Morton
2021-02-24 20:07 ` [patch 130/173] hugetlb: fix update_and_free_page contig page struct assumption Andrew Morton
2021-02-24 20:07 ` [patch 131/173] hugetlb: fix copy_huge_page_from_user " Andrew Morton
2021-02-24 20:07 ` [patch 132/173] mm/hugetlb: suppress wrong warning info when alloc gigantic page Andrew Morton
2021-02-24 20:08 ` [patch 133/173] mm/vmscan: __isolate_lru_page_prepare() cleanup Andrew Morton
2021-02-24 20:08 ` [patch 134/173] mm/workingset.c: avoid unnecessary max_nodes estimation in count_shadow_nodes() Andrew Morton
2021-02-24 20:08 ` [patch 135/173] mm/vmscan.c: use add_page_to_lru_list() Andrew Morton
2021-02-24 20:08 ` [patch 136/173] include/linux/mm_inline.h: shuffle lru list addition and deletion functions Andrew Morton
2021-02-24 20:08 ` [patch 137/173] mm: don't pass "enum lru_list" to lru list addition functions Andrew Morton
2021-02-24 20:08 ` [patch 138/173] mm/swap.c: don't pass "enum lru_list" to trace_mm_lru_insertion() Andrew Morton
2021-02-24 20:08 ` [patch 139/173] mm/swap.c: don't pass "enum lru_list" to del_page_from_lru_list() Andrew Morton
2021-02-24 20:08 ` [patch 140/173] mm: add __clear_page_lru_flags() to replace page_off_lru() Andrew Morton
2021-02-24 20:08 ` [patch 141/173] mm: VM_BUG_ON lru page flags Andrew Morton
2021-02-24 20:08 ` [patch 142/173] include/linux/mm_inline.h: fold page_lru_base_type() into its sole caller Andrew Morton
2021-02-24 20:08 ` [patch 143/173] include/linux/mm_inline.h: fold __update_lru_size() " Andrew Morton
2021-02-24 20:08 ` [patch 144/173] mm/vmscan.c: make lruvec_lru_size() static Andrew Morton
2021-02-24 20:08 ` [patch 145/173] mm: workingset: clarify eviction order and distance calculation Andrew Morton
2021-02-24 20:08 ` [patch 146/173] hugetlb: use page.private for hugetlb specific page flags Andrew Morton
2021-02-24 20:08 ` [patch 147/173] hugetlb: convert page_huge_active() HPageMigratable flag Andrew Morton
2021-02-24 20:09 ` [patch 148/173] hugetlb: convert PageHugeTemporary() to HPageTemporary flag Andrew Morton
2021-02-24 20:09 ` [patch 149/173] hugetlb: convert PageHugeFreed to HPageFreed flag Andrew Morton
2021-02-24 20:09 ` [patch 150/173] include/linux/hugetlb.h: add synchronization information for new hugetlb specific flags Andrew Morton
2021-02-24 20:09 ` [patch 151/173] hugetlb: fix uninitialized subpool pointer Andrew Morton
2021-02-24 20:09 ` [patch 152/173] mm/vmscan: restore zone_reclaim_mode ABI Andrew Morton
2021-02-24 20:09 ` [patch 153/173] z3fold: remove unused attribute for release_z3fold_page Andrew Morton
2021-02-24 20:09 ` [patch 154/173] z3fold: simplify the zhdr initialization code in init_z3fold_page() Andrew Morton
2021-02-24 20:09 ` [patch 155/173] mm/compaction: remove rcu_read_lock during page compaction Andrew Morton
2021-02-24 20:09 ` [patch 156/173] mm/compaction: remove duplicated VM_BUG_ON_PAGE !PageLocked Andrew Morton
2021-02-24 20:09 ` [patch 157/173] mm/compaction: correct deferral logic for proactive compaction Andrew Morton
2021-02-24 20:09 ` [patch 158/173] mm/compaction: fix misbehaviors of fast_find_migrateblock() Andrew Morton
2021-02-24 20:09 ` [patch 159/173] mm, compaction: make fast_isolate_freepages() stay within zone Andrew Morton
2021-02-24 20:09 ` [patch 160/173] numa balancing: migrate on fault among multiple bound nodes Andrew Morton
2021-02-24 20:09 ` [patch 161/173] mm/mempolicy: use helper range_in_vma() in queue_pages_test_walk() Andrew Morton
2021-02-24 20:09 ` [patch 162/173] mm, oom: fix a comment in dump_task() Andrew Morton
2021-02-24 20:09 ` [patch 163/173] mm/hugetlb: change hugetlb_reserve_pages() to type bool Andrew Morton
2021-02-24 20:09 ` [patch 164/173] hugetlbfs: remove special hugetlbfs_set_page_dirty() Andrew Morton
2021-02-24 20:10 ` [patch 165/173] hugetlbfs: remove useless BUG_ON(!inode) in hugetlbfs_setattr() Andrew Morton
2021-02-24 20:10 ` [patch 166/173] hugetlbfs: use helper macro default_hstate in init_hugetlbfs_fs Andrew Morton
2021-02-24 20:10 ` [patch 167/173] hugetlbfs: correct obsolete function name in hugetlbfs_read_iter() Andrew Morton
2021-02-24 20:10 ` [patch 168/173] hugetlbfs: remove meaningless variable avoid_reserve Andrew Morton
2021-02-24 20:10 ` [patch 169/173] hugetlbfs: make hugepage size conversion more readable Andrew Morton
2021-02-24 20:10 ` [patch 170/173] hugetlbfs: correct some obsolete comments about inode i_mutex Andrew Morton
2021-02-24 20:10 ` [patch 171/173] hugetlbfs: fix some comment typos Andrew Morton
2021-02-24 20:10 ` [patch 172/173] hugetlbfs: remove unneeded return value of hugetlb_vmtruncate() Andrew Morton
2021-02-24 20:10 ` [patch 173/173] mm/migrate: remove unneeded semicolons Andrew Morton
2021-02-24 21:30 ` incoming Linus Torvalds
2021-02-24 21:37   ` incoming Linus Torvalds
2021-02-25  8:53     ` incoming Arnd Bergmann
2021-02-25  9:12       ` incoming Andrey Ryabinin
2021-02-25 11:07         ` incoming Walter Wu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210224200311.FvZgQBV11%akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=guro@fb.com \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=mm-commits@vger.kernel.org \
    --cc=shakeelb@google.com \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

mm-commits Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/mm-commits/0 mm-commits/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 mm-commits mm-commits/ https://lore.kernel.org/mm-commits \
		mm-commits@vger.kernel.org
	public-inbox-index mm-commits

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.mm-commits


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git