The patch titled Subject: mm/memcontrol.c: fix potential uninitialized variable warning has been added to the -mm tree. Its filename is mm-memcg-optimize-user-context-object-stock-access-fix.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/mm-memcg-optimize-user-context-object-stock-access-fix.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/mm-memcg-optimize-user-context-object-stock-access-fix.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Waiman Long <longman@xxxxxxxxxx> Subject: mm/memcontrol.c: fix potential uninitialized variable warning If the -Wno-maybe-uninitialized gcc option is not specified, compilation of memcontrol.c may generate the following warnings: mm/memcontrol.c: In function `refill_obj_stock': ./arch/x86/include/asm/irqflags.h:127:17: warning: `flags' may be used uninitialized in this function [-Wmaybe-uninitialized] return !(flags & X86_EFLAGS_IF); ~~~~~~~^~~~~~~~~~~~~~~~ mm/memcontrol.c:3216:16: note: `flags' was declared here unsigned long flags; ^~~~~ In file included from mm/memcontrol.c:29: mm/memcontrol.c: In function `uncharge_page': ./include/linux/memcontrol.h:797:2: warning: `objcg' may be used uninitialized in this function [-Wmaybe-uninitialized] percpu_ref_put(&objcg->refcnt); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Fix that by properly initializing *pflags in get_obj_stock() and introducing a use_objcg bool variable in uncharge_page() to avoid potentially accessing the struct page data twice. Link: https://lkml.kernel.org/r/20210526193602.8742-1-longman@xxxxxxxxxx Signed-off-by: Waiman Long <longman@xxxxxxxxxx> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxxxx> Cc: Vladimir Davydov <vdavydov.dev@xxxxxxxxx> Cc: Muchun Song <songmuchun@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/memcontrol.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --- a/mm/memcontrol.c~mm-memcg-optimize-user-context-object-stock-access-fix +++ a/mm/memcontrol.c @@ -2115,6 +2115,7 @@ static inline struct obj_stock *get_obj_ struct memcg_stock_pcp *stock; if (likely(in_task())) { + *pflags = 0UL; preempt_disable(); stock = this_cpu_ptr(&memcg_stock); return &stock->task_obj; @@ -6832,6 +6833,7 @@ static void uncharge_page(struct page *p unsigned long nr_pages; struct mem_cgroup *memcg; struct obj_cgroup *objcg; + bool use_objcg = PageMemcgKmem(page); VM_BUG_ON_PAGE(PageLRU(page), page); @@ -6840,7 +6842,7 @@ static void uncharge_page(struct page *p * page memcg or objcg at this point, we have fully * exclusive access to the page. */ - if (PageMemcgKmem(page)) { + if (use_objcg) { objcg = __page_objcg(page); /* * This get matches the put at the end of the function and @@ -6868,7 +6870,7 @@ static void uncharge_page(struct page *p nr_pages = compound_nr(page); - if (PageMemcgKmem(page)) { + if (use_objcg) { ug->nr_memory += nr_pages; ug->nr_kmem += nr_pages; _ Patches currently in -mm which might be from longman@xxxxxxxxxx are mm-memcg-move-mod_objcg_state-to-memcontrolc.patch mm-memcg-cache-vmstat-data-in-percpu-memcg_stock_pcp.patch mm-memcg-improve-refill_obj_stock-performance.patch mm-memcg-optimize-user-context-object-stock-access.patch mm-memcg-optimize-user-context-object-stock-access-fix.patch mm-memcg-slab-properly-set-up-gfp-flags-for-objcg-pointer-array.patch mm-memcg-slab-create-a-new-set-of-kmalloc-cg-n-caches.patch mm-memcg-slab-create-a-new-set-of-kmalloc-cg-n-caches-v5.patch mm-memcg-slab-disable-cache-merging-for-kmalloc_normal-caches.patch