• Baoquan He's avatar
    mm/page_alloc.c: do not warn allocation failure on zone DMA if no managed pages · c4dc63f0
    Baoquan He authored
    In kdump kernel of x86_64, page allocation failure is observed:
    
     kworker/u2:2: page allocation failure: order:0, mode:0xcc1(GFP_KERNEL|GFP_DMA), nodemask=(null),cpuset=/,mems_allowed=0
     CPU: 0 PID: 55 Comm: kworker/u2:2 Not tainted 5.16.0-rc4+ #5
     Hardware name: AMD Dinar/Dinar, BIOS RDN1505B 06/05/2013
     Workqueue: events_unbound async_run_entry_fn
     Call Trace:
      <TASK>
      dump_stack_lvl+0x48/0x5e
      warn_alloc.cold+0x72/0xd6
      __alloc_pages_slowpath.constprop.0+0xc69/0xcd0
      __alloc_pages+0x1df/0x210
      new_slab+0x389/0x4d0
      ___slab_alloc+0x58f/0x770
      __slab_alloc.constprop.0+0x4a/0x80
      kmem_cache_alloc_trace+0x24b/0x2c0
      sr_probe+0x1db/0x620
      ......
      device_add+0x405/0x920
      ......
      __scsi_add_device+0xe5/0x100
      ata_scsi_scan_host+0x97/0x1d0
      async_run_entry_fn+0x30/0x130
      process_one_work+0x1e8/0x3c0
      worker_thread+0x50/0x3b0
      ? rescuer_thread+0x350/0x350
      kthread+0x16b/0x190
      ? set_kthread_struct+0x40/0x40
      ret_from_fork+0x22/0x30
      </TASK>
     Mem-Info:
     ......
    
    The above failure happened when calling kmalloc() to allocate buffer with
    GFP_DMA.  It requests to allocate slab page from DMA zone while no managed
    pages at all in there.
    
     sr_probe()
     --> get_capabilities()
         --> buffer = kmalloc(512, GFP_KERNEL | GFP_DMA);
    
    Because in the current kernel, dma-kmalloc will be created as long as
    CONFIG_ZONE_DMA is enabled.  However, kdump kernel of x86_64 doesn't have
    managed pages on DMA zone since commit 6f599d84 ("x86/kdump: Always
    reserve the low 1M when the crashkernel option is specified").  The
    failure can be always reproduced.
    
    For now, let's mute the warning of allocation failure if requesting pages
    from DMA zone while no managed pages.
    
    [akpm@linux-foundation.org: fix warning]
    
    Link: https://lkml.kernel.org/r/20211223094435.248523-4-bhe@redhat.com
    Fixes: 6f599d84 ("x86/kdump: Always reserve the low 1M when the crashkernel option is specified")
    Signed-off-by: default avatarBaoquan He <bhe@redhat.com>
    Acked-by: default avatarJohn Donnelly  <john.p.donnelly@oracle.com>
    Reviewed-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: David Laight <David.Laight@ACULAB.COM>
    Cc: Marek Szyprowski <m.szyprowski@samsung.com>
    Cc: Robin Murphy <robin.murphy@arm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c4dc63f0
page_alloc.c 265 KB