lkml.org 
[lkml]   [2019]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [patch V5 01/32] mm/slab: Remove broken stack trace storage
    From
    Date
    On 4/16/19 4:10 PM, Thomas Gleixner wrote:
    > kstack_end() is broken on interrupt stacks as they are not guaranteed to be
    > sized THREAD_SIZE and THREAD_SIZE aligned.
    >
    > As SLAB seems not to be used much with debugging enabled and might just go
    > away completely according to:
    >
    > https://lkml.kernel.org/r/612f9b99-a75b-6aeb-cf92-7dc5421cd950@suse.cz
    >
    > just remove the bogus code instead of trying to fix it.
    >
    > Fixes: 98eb235b7feb ("[PATCH] page unmapping debug") - History tree
    > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    > Cc: Andrew Morton <akpm@linux-foundation.org>
    > Cc: Pekka Enberg <penberg@kernel.org>
    > Cc: linux-mm@kvack.org

    Acked-by: Vlastimil Babka <vbabka@suse.cz>

    Thanks.

    > ---
    > V5: Remove the cruft.
    > V4: Make it actually work
    > V2: Made the code simpler to understand (Andy)
    > ---
    > mm/slab.c | 22 +++-------------------
    > 1 file changed, 3 insertions(+), 19 deletions(-)
    >
    > --- a/mm/slab.c
    > +++ b/mm/slab.c
    > @@ -1470,33 +1470,17 @@ static bool is_debug_pagealloc_cache(str
    > static void store_stackinfo(struct kmem_cache *cachep, unsigned long *addr,
    > unsigned long caller)
    > {
    > - int size = cachep->object_size;
    > + int size = cachep->object_size / sizeof(unsigned long);
    >
    > addr = (unsigned long *)&((char *)addr)[obj_offset(cachep)];
    >
    > - if (size < 5 * sizeof(unsigned long))
    > + if (size < 4)
    > return;
    >
    > *addr++ = 0x12345678;
    > *addr++ = caller;
    > *addr++ = smp_processor_id();
    > - size -= 3 * sizeof(unsigned long);
    > - {
    > - unsigned long *sptr = &caller;
    > - unsigned long svalue;
    > -
    > - while (!kstack_end(sptr)) {
    > - svalue = *sptr++;
    > - if (kernel_text_address(svalue)) {
    > - *addr++ = svalue;
    > - size -= sizeof(unsigned long);
    > - if (size <= sizeof(unsigned long))
    > - break;
    > - }
    > - }
    > -
    > - }
    > - *addr++ = 0x87654321;
    > + *addr = 0x87654321;
    > }
    >
    > static void slab_kernel_map(struct kmem_cache *cachep, void *objp,
    >

    \
     
     \ /
      Last update: 2019-04-16 17:21    [W:5.085 / U:0.624 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site