linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Baoquan He <bhe@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org, akpm@linux-foundation.org, hch@lst.de,
	robin.murphy@arm.com, cl@linux.com, penberg@kernel.org,
	rientjes@google.com, iamjoonsoo.kim@lge.com, vbabka@suse.cz,
	m.szyprowski@samsung.com, rppt@linux.ibm.com,
	Baoquan He <bhe@redhat.com>
Subject: [RFC PATCH v2 0/5] Avoid requesting page from DMA zone when no managed pages
Date: Tue, 10 Aug 2021 17:48:30 +0800	[thread overview]
Message-ID: <20210810094835.13402-1-bhe@redhat.com> (raw)

In some places of the current kernel, it assumes that DMA zone must have
managed pages and try to request pages if CONFIG_ZONE_DMA is enabled.
While this is not always true. E.g in kdump kernel of x86_64, only low 1M
is presented and locked down at very early stage of boot, so that there's
no managed pages at all in DMA zone. This exception will always cause page
allocation failure if page is requested from DMA zone.

E.g in kdump kernel of x86_64, atomic_pool_dma which is created with GFP_DMA
will cause page allocation failure, and dma-kmalloc initialization also
caused page allocation failure.

In this v2 patchset:

* Patch 1, 2 are clean up patches of atomic pool code when read code.
* Patch 3 introduces helper functions to help check if DMA zone with managed
  pages exists.
* Patch 4 is to check if managed DMA zone exists, then create atomic_pool_dma
  if yes.
* Patch 5 is to check if managed DMA zone exists, then create
* dma-kmalloc cache if yes.

This is v1 post:
https://lore.kernel.org/lkml/20210624052010.5676-1-bhe@redhat.com/

v1->v2:
 In v1, I tried to adjust code to allow user to disable atomic pool
 completely with "coherent_pool=0" kernek parameter, then expect to add
 this into kdump kernel to mute the page allocation failure. However,
 later found atomic pool is needed when DMA_DIRECT_REMAP=y or
 mem_encrypt_active() is true, and dma-kmalloc also always caused page
 allocation failure. 
 
 So in this v2, change to check if managed DMA zone exists. If DMA zone
 has managed pages, we go further to request page from DMA zone to
 initialize. Otherwise, just skip to initialize stuffs which need pages
 from DMA zone.

Baoquan He (5):
  docs: kernel-parameters: Update to reflect the current default size of
    atomic pool
  dma-pool: allow user to disable atomic pool
  mm_zone: add function to check if managed dma zone exists
  dma/pool: create dma atomic pool only if dma zone has mamaged pages
  mm/slub: do not create dma-kmalloc if no managed pages in DMA zone

 .../admin-guide/kernel-parameters.txt         |  5 ++++-
 include/linux/mmzone.h                        | 21 +++++++++++++++++++
 kernel/dma/pool.c                             | 11 ++++++----
 mm/page_alloc.c                               | 11 ++++++++++
 mm/slab_common.c                              |  6 ++++++
 5 files changed, 49 insertions(+), 5 deletions(-)

-- 
2.17.2



             reply	other threads:[~2021-08-10  9:48 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-10  9:48 Baoquan He [this message]
2021-08-10  9:48 ` [RFC PATCH v2 1/5] docs: kernel-parameters: Update to reflect the current default size of atomic pool Baoquan He
2021-08-10  9:48 ` [RFC PATCH v2 2/5] dma-pool: allow user to disable " Baoquan He
2021-08-10  9:48 ` [RFC PATCH v2 3/5] mm_zone: add function to check if managed dma zone exists Baoquan He
2021-08-10  9:48 ` [RFC PATCH v2 4/5] dma/pool: create dma atomic pool only if dma zone has mamaged pages Baoquan He
2021-08-10  9:48 ` [RFC PATCH v2 5/5] mm/slub: do not create dma-kmalloc if no managed pages in DMA zone Baoquan He

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210810094835.13402-1-bhe@redhat.com \
    --to=bhe@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=cl@linux.com \
    --cc=hch@lst.de \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=m.szyprowski@samsung.com \
    --cc=penberg@kernel.org \
    --cc=rientjes@google.com \
    --cc=robin.murphy@arm.com \
    --cc=rppt@linux.ibm.com \
    --cc=vbabka@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox