Message ID | 20191122112621.204798-26-glider@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add KernelMemorySanitizer infrastructure | expand |
On Fri, Nov 22, 2019 at 12:27 PM <glider@google.com> wrote: > > This is a hack to reduce stackdepot pressure. I think this patch needs a better description :) Like in the comment below. > > Signed-off-by: Alexander Potapenko <glider@google.com> > To: Alexander Potapenko <glider@google.com> > Cc: Vegard Nossum <vegard.nossum@oracle.com> > Cc: Dmitry Vyukov <dvyukov@google.com> > Cc: linux-mm@kvack.org > > --- > > Change-Id: I22a201e7e4f67ed74f8129072f12e5351b26103a > --- > mm/mmu_gather.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/mm/mmu_gather.c b/mm/mmu_gather.c > index 7d70e5c78f97..8c5ea2d2e7d5 100644 > --- a/mm/mmu_gather.c > +++ b/mm/mmu_gather.c > @@ -1,6 +1,7 @@ > #include <linux/gfp.h> > #include <linux/highmem.h> > #include <linux/kernel.h> > +#include <linux/kmsan-checks.h> > #include <linux/mmdebug.h> > #include <linux/mm_types.h> > #include <linux/pagemap.h> > @@ -206,6 +207,15 @@ void tlb_flush_mmu(struct mmu_gather *tlb) > void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, > unsigned long start, unsigned long end) > { > + /* > + * TODO(glider): struct mmu_gather contains 7 1-bit fields packed into a Remove TODO? > + * 32-bit unsigned int value. The remaining 25 bits remain uninitialized > + * and are never used, but KMSAN updates the origin for them in > + * zap_pXX_range() in mm/memory.c, thus creating very long origin > + * chains. This is technically correct, but consumes too much memory. > + * Unpoisoning the whole structure will prevent creating such chains. > + */ > + kmsan_unpoison_shadow(tlb, sizeof(*tlb)); > tlb->mm = mm; > > /* Is it from 0 to ~0? */ > -- > 2.24.0.432.g9d3f5f5b63-goog >
On Fri, Nov 29, 2019 at 4:09 PM Andrey Konovalov <andreyknvl@google.com> wrote: > > On Fri, Nov 22, 2019 at 12:27 PM <glider@google.com> wrote: > > > > This is a hack to reduce stackdepot pressure. > > I think this patch needs a better description :) Like in the comment below. > > > > > Signed-off-by: Alexander Potapenko <glider@google.com> > > To: Alexander Potapenko <glider@google.com> > > Cc: Vegard Nossum <vegard.nossum@oracle.com> > > Cc: Dmitry Vyukov <dvyukov@google.com> > > Cc: linux-mm@kvack.org > > > > --- > > > > Change-Id: I22a201e7e4f67ed74f8129072f12e5351b26103a > > --- > > mm/mmu_gather.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/mm/mmu_gather.c b/mm/mmu_gather.c > > index 7d70e5c78f97..8c5ea2d2e7d5 100644 > > --- a/mm/mmu_gather.c > > +++ b/mm/mmu_gather.c > > @@ -1,6 +1,7 @@ > > #include <linux/gfp.h> > > #include <linux/highmem.h> > > #include <linux/kernel.h> > > +#include <linux/kmsan-checks.h> > > #include <linux/mmdebug.h> > > #include <linux/mm_types.h> > > #include <linux/pagemap.h> > > @@ -206,6 +207,15 @@ void tlb_flush_mmu(struct mmu_gather *tlb) > > void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, > > unsigned long start, unsigned long end) > > { > > + /* > > + * TODO(glider): struct mmu_gather contains 7 1-bit fields packed into a > > Remove TODO? Will do, thanks! > > + * 32-bit unsigned int value. The remaining 25 bits remain uninitialized > > + * and are never used, but KMSAN updates the origin for them in > > + * zap_pXX_range() in mm/memory.c, thus creating very long origin > > + * chains. This is technically correct, but consumes too much memory. > > + * Unpoisoning the whole structure will prevent creating such chains. > > + */ > > + kmsan_unpoison_shadow(tlb, sizeof(*tlb)); > > tlb->mm = mm; > > > > /* Is it from 0 to ~0? */ > > -- > > 2.24.0.432.g9d3f5f5b63-goog > >
diff --git a/mm/mmu_gather.c b/mm/mmu_gather.c index 7d70e5c78f97..8c5ea2d2e7d5 100644 --- a/mm/mmu_gather.c +++ b/mm/mmu_gather.c @@ -1,6 +1,7 @@ #include <linux/gfp.h> #include <linux/highmem.h> #include <linux/kernel.h> +#include <linux/kmsan-checks.h> #include <linux/mmdebug.h> #include <linux/mm_types.h> #include <linux/pagemap.h> @@ -206,6 +207,15 @@ void tlb_flush_mmu(struct mmu_gather *tlb) void tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) { + /* + * TODO(glider): struct mmu_gather contains 7 1-bit fields packed into a + * 32-bit unsigned int value. The remaining 25 bits remain uninitialized + * and are never used, but KMSAN updates the origin for them in + * zap_pXX_range() in mm/memory.c, thus creating very long origin + * chains. This is technically correct, but consumes too much memory. + * Unpoisoning the whole structure will prevent creating such chains. + */ + kmsan_unpoison_shadow(tlb, sizeof(*tlb)); tlb->mm = mm; /* Is it from 0 to ~0? */
This is a hack to reduce stackdepot pressure. Signed-off-by: Alexander Potapenko <glider@google.com> To: Alexander Potapenko <glider@google.com> Cc: Vegard Nossum <vegard.nossum@oracle.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: linux-mm@kvack.org --- Change-Id: I22a201e7e4f67ed74f8129072f12e5351b26103a --- mm/mmu_gather.c | 10 ++++++++++ 1 file changed, 10 insertions(+)