Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752599AbdLEOkd (ORCPT ); Tue, 5 Dec 2017 09:40:33 -0500 Received: from mail-ua0-f193.google.com ([209.85.217.193]:39526 "EHLO mail-ua0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752410AbdLEOk3 (ORCPT ); Tue, 5 Dec 2017 09:40:29 -0500 X-Google-Smtp-Source: AGs4zMYx588iSnVMbT5ni7pibUhodoZFfiNm8ek1wxowcN/We9517gIwu1yPWtCumNAY6sqBoHxqkBDjTLuNDRErT/Q= MIME-Version: 1.0 In-Reply-To: <1512362600-40838-1-git-send-email-maninder1.s@samsung.com> References: <1512362600-40838-1-git-send-email-maninder1.s@samsung.com> From: Alexander Potapenko Date: Tue, 5 Dec 2017 15:40:27 +0100 Message-ID: Subject: Re: [PATCH 1/1] mm/page_owner: ignore everything below the IRQ entry point To: Maninder Singh Cc: Andrey Ryabinin , mbenes@suse.cz, Thomas Gleixner , pombredanne@nexb.com, Ingo Molnar , gregkh@linuxfoundation.org, Josh Poimboeuf , Andrew Morton , Vlastimil Babka , Stephen Rothwell , mhocko@suse.com, LKML , kasan-dev , Linux Memory Management List , a.sahrawat@samsung.com, pankaj.m@samsung.com, Vaneet Narang , Dmitriy Vyukov Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by nfs id vB5EebRr013279 Content-Length: 4747 Lines: 132 On Mon, Dec 4, 2017 at 5:43 AM, Maninder Singh wrote: > Check whether the allocation happens in an IRQ handler. > This lets us strip everything below the IRQ entry point to reduce the > number of unique stack traces needed to be stored. > > so moved code of KASAN in generic file so that page_owner can also > do same filteration. > > Initial KASAN commit > id=be7635e7287e0e8013af3c89a6354a9e0182594c > > Signed-off-by: Vaneet Narang > Signed-off-by: Maninder Singh Reviewed-by: Alexander Potapenko > --- > include/linux/stacktrace.h | 25 +++++++++++++++++++++++++ > mm/kasan/kasan.c | 22 ---------------------- > mm/page_owner.c | 1 + > 3 files changed, 26 insertions(+), 22 deletions(-) > > diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h > index ba29a06..2c1a562 100644 > --- a/include/linux/stacktrace.h > +++ b/include/linux/stacktrace.h > @@ -3,6 +3,7 @@ > #define __LINUX_STACKTRACE_H > > #include > +#include > > struct task_struct; > struct pt_regs; > @@ -26,6 +27,28 @@ extern int save_stack_trace_tsk_reliable(struct task_struct *tsk, > extern int snprint_stack_trace(char *buf, size_t size, > struct stack_trace *trace, int spaces); > > +static inline int in_irqentry_text(unsigned long ptr) > +{ > + return (ptr >= (unsigned long)&__irqentry_text_start && > + ptr < (unsigned long)&__irqentry_text_end) || > + (ptr >= (unsigned long)&__softirqentry_text_start && > + ptr < (unsigned long)&__softirqentry_text_end); > +} > + > +static inline void filter_irq_stacks(struct stack_trace *trace) > +{ > + int i; > + > + if (!trace->nr_entries) > + return; > + for (i = 0; i < trace->nr_entries; i++) > + if (in_irqentry_text(trace->entries[i])) { > + /* Include the irqentry function into the stack. */ > + trace->nr_entries = i + 1; > + break; > + } > +} > + > #ifdef CONFIG_USER_STACKTRACE_SUPPORT > extern void save_stack_trace_user(struct stack_trace *trace); > #else > @@ -38,6 +61,8 @@ extern int snprint_stack_trace(char *buf, size_t size, > # define save_stack_trace_user(trace) do { } while (0) > # define print_stack_trace(trace, spaces) do { } while (0) > # define snprint_stack_trace(buf, size, trace, spaces) do { } while (0) > +# define filter_irq_stacks(trace) do { } while (0) > +# define in_irqentry_text(ptr) do { } while (0) > # define save_stack_trace_tsk_reliable(tsk, trace) ({ -ENOSYS; }) > #endif /* CONFIG_STACKTRACE */ > > diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c > index 405bba4..129e7b8 100644 > --- a/mm/kasan/kasan.c > +++ b/mm/kasan/kasan.c > @@ -412,28 +412,6 @@ void kasan_poison_object_data(struct kmem_cache *cache, void *object) > KASAN_KMALLOC_REDZONE); > } > > -static inline int in_irqentry_text(unsigned long ptr) > -{ > - return (ptr >= (unsigned long)&__irqentry_text_start && > - ptr < (unsigned long)&__irqentry_text_end) || > - (ptr >= (unsigned long)&__softirqentry_text_start && > - ptr < (unsigned long)&__softirqentry_text_end); > -} > - > -static inline void filter_irq_stacks(struct stack_trace *trace) > -{ > - int i; > - > - if (!trace->nr_entries) > - return; > - for (i = 0; i < trace->nr_entries; i++) > - if (in_irqentry_text(trace->entries[i])) { > - /* Include the irqentry function into the stack. */ > - trace->nr_entries = i + 1; > - break; > - } > -} > - > static inline depot_stack_handle_t save_stack(gfp_t flags) > { > unsigned long entries[KASAN_STACK_DEPTH]; > diff --git a/mm/page_owner.c b/mm/page_owner.c > index 8602fb4..30e9cb2 100644 > --- a/mm/page_owner.c > +++ b/mm/page_owner.c > @@ -148,6 +148,7 @@ static noinline depot_stack_handle_t save_stack(gfp_t flags) > depot_stack_handle_t handle; > > save_stack_trace(&trace); > + filter_irq_stacks(&trace); > if (trace.nr_entries != 0 && > trace.entries[trace.nr_entries-1] == ULONG_MAX) > trace.nr_entries--; > -- > 1.9.1 > -- Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Straße, 33 80636 München Geschäftsführer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg