|
Message-ID: <20160617205526.5cjfm56prpstvowc@treble> Date: Fri, 17 Jun 2016 15:55:26 -0500 From: Josh Poimboeuf <jpoimboe@...hat.com> To: Andy Lutomirski <luto@...nel.org> Cc: x86@...nel.org, linux-kernel@...r.kernel.org, linux-arch@...r.kernel.org, Borislav Petkov <bp@...en8.de>, Nadav Amit <nadav.amit@...il.com>, Kees Cook <keescook@...omium.org>, Brian Gerst <brgerst@...il.com>, "kernel-hardening@...ts.openwall.com" <kernel-hardening@...ts.openwall.com>, Linus Torvalds <torvalds@...ux-foundation.org>, Jann Horn <jann@...jh.net>, Heiko Carstens <heiko.carstens@...ibm.com>, Vladimir Davydov <vdavydov@...tuozzo.com>, Johannes Weiner <hannes@...xchg.org>, Michal Hocko <mhocko@...nel.org>, linux-mm@...ck.org Subject: Re: [PATCH v2 05/13] mm: Move memcg stack accounting to account_kernel_stack On Fri, Jun 17, 2016 at 01:00:41PM -0700, Andy Lutomirski wrote: > We should account for stacks regardless of stack size. Move it into > account_kernel_stack. > > Fixes: 12580e4b54ba8 ("mm: memcontrol: report kernel stack usage in cgroup2 memory.stat") > Cc: Vladimir Davydov <vdavydov@...tuozzo.com> > Cc: Johannes Weiner <hannes@...xchg.org> > Cc: Michal Hocko <mhocko@...nel.org> > Cc: linux-mm@...ck.org > Signed-off-by: Andy Lutomirski <luto@...nel.org> > --- > kernel/fork.c | 15 ++++++--------- > 1 file changed, 6 insertions(+), 9 deletions(-) > > diff --git a/kernel/fork.c b/kernel/fork.c > index be7f006af727..cd2abe6e4e41 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -165,20 +165,12 @@ static struct thread_info *alloc_thread_info_node(struct task_struct *tsk, > struct page *page = alloc_kmem_pages_node(node, THREADINFO_GFP, > THREAD_SIZE_ORDER); > > - if (page) > - memcg_kmem_update_page_stat(page, MEMCG_KERNEL_STACK, > - 1 << THREAD_SIZE_ORDER); > - > return page ? page_address(page) : NULL; > } > > static inline void free_thread_info(struct thread_info *ti) > { > - struct page *page = virt_to_page(ti); > - > - memcg_kmem_update_page_stat(page, MEMCG_KERNEL_STACK, > - -(1 << THREAD_SIZE_ORDER)); > - __free_kmem_pages(page, THREAD_SIZE_ORDER); > + free_kmem_pages((unsigned long)ti, THREAD_SIZE_ORDER); > } > # else > static struct kmem_cache *thread_info_cache; > @@ -227,6 +219,11 @@ static void account_kernel_stack(struct thread_info *ti, int account) > > mod_zone_page_state(zone, NR_KERNEL_STACK_KB, > THREAD_SIZE / 1024 * account); > + > + /* All stack pages belong to the same memcg. */ > + memcg_kmem_update_page_stat( > + virt_to_page(ti), MEMCG_KERNEL_STACK, > + account * (THREAD_SIZE / PAGE_SIZE)); > } Won't this be broken in the case where THREAD_SIZE < PAGE_SIZE? -- Josh
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.