• Yong-Taek Lee's avatar
    printk: use kvmalloc instead of kmalloc for devkmsg_user · 9980c425
    Yong-Taek Lee authored
    Size of struct devkmsg_user increased to 16784 by commit 896fbe20
    ("printk: use the lockless ringbuffer") so order3(32kb) is needed for
    kmalloc. Under stress conditions the kernel may temporary fail to
    allocate 32k with kmalloc. Use kvmalloc instead of kmalloc to aviod
    this issue.
    
    qseecomd invoked oom-killer: gfp_mask=0x40cc0(GFP_KERNEL|__GFP_COMP), order=3, oom_score_adj=-1000
    Call trace:
     dump_backtrace+0x0/0x34c
     dump_stack_lvl+0xd4/0x16c
     dump_header+0x5c/0x338
     out_of_memory+0x374/0x4cc
     __alloc_pages_slowpath+0xbc8/0x1130
     __alloc_pages_nodemask+0x170/0x1b0
     kmalloc_order+0x5c/0x24c
     devkmsg_open+0x1f4/0x558
     memory_open+0x94/0xf0
     chrdev_open+0x288/0x3dc
     do_dentry_open+0x2b4/0x618
     path_openat+0xce4/0xfa8
     do_filp_open+0xb0/0x164
     do_sys_openat2+0xa8/0x264
     __arm64_sys_openat+0x70/0xa0
     el0_svc_common+0xc4/0x270
     el0_svc+0x34/0x9c
     el0_sync_handler+0x88/0xf0
     el0_sync+0x1bc/0x200
    
     DMA32: 4521*4kB (UMEC) 1377*8kB (UMECH) 73*16kB (UM) 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 30268kB
     Normal: 2490*4kB (UMEH) 277*8kB (UMH) 27*16kB (UH) 1*32kB (H) 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 12640kB
    Signed-off-by: default avatarYong-Taek Lee <ytk.lee@samsung.com>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Acked-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
    Signed-off-by: default avatarPetr Mladek <pmladek@suse.com>
    Link: https://lore.kernel.org/r/20210830071701epcms1p70f72ae10940bc407a3c33746d20da771@epcms1p7
    9980c425
printk.c 93.8 KB