All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baoquan He <bhe@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org, x86@kernel.org, rientjes@google.com,
	rppt@linux.ibm.com, thomas.lendacky@amd.com,
	brijesh.singh@amd.com, kexec@lists.infradead.org, bhe@redhat.com
Subject: [PATCH 2/2] dma-pool: allow user to disable atomic pool
Date: Thu, 24 Jun 2021 13:20:10 +0800	[thread overview]
Message-ID: <20210624052010.5676-3-bhe@redhat.com> (raw)
In-Reply-To: <20210624052010.5676-1-bhe@redhat.com>

In the current code, three atomic memory pools are provided,
atomic_pool_kernel, atomic_pool_dma, atomic_pool_dma32, initialized
with flag GFP_KERNEL, GFP_KERNEL|GFP_DMA, GFP_KERNEL|GFP_DMA32.
And they are always enabled, even though 'coherent_pool=0' is
specified in kernel command line.

In some cases, atomic pool may not be needed. And worse, it even will
cause problem. E.g in kdump kernel of x86_64, it will cause OOM for
atomic_pool_dma initialization. Because there isn't available memory
for buddy allocatory in DMA zone of kdump kernel since commit
f1d4d47c5851 ("x86/setup: Always reserve the first 1M of RAM"). 
The OOM will cause panic if panic_on_oom is added into kdump kernel.

So change code to adjust the existing coherent_pool to allow user
to disable atomic pool by specifying 'coherent_pool=0'.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 kernel/dma/pool.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/kernel/dma/pool.c b/kernel/dma/pool.c
index 5f84e6cdb78e..5a85804b5beb 100644
--- a/kernel/dma/pool.c
+++ b/kernel/dma/pool.c
@@ -21,7 +21,7 @@ static struct gen_pool *atomic_pool_kernel __ro_after_init;
 static unsigned long pool_size_kernel;
 
 /* Size can be defined by the coherent_pool command line */
-static size_t atomic_pool_size;
+static unsigned long atomic_pool_size = -1;
 
 /* Dynamic background expansion when the atomic pool is near capacity */
 static struct work_struct atomic_pool_work;
@@ -188,11 +188,14 @@ static int __init dma_atomic_pool_init(void)
 {
 	int ret = 0;
 
+	if (!atomic_pool_size)
+		return 0;
+
 	/*
 	 * If coherent_pool was not used on the command line, default the pool
 	 * sizes to 128KB per 1GB of memory, min 128KB, max MAX_ORDER-1.
 	 */
-	if (!atomic_pool_size) {
+	if (atomic_pool_size == -1) {
 		unsigned long pages = totalram_pages() / (SZ_1G / SZ_128K);
 		pages = min_t(unsigned long, pages, MAX_ORDER_NR_PAGES);
 		atomic_pool_size = max_t(size_t, pages << PAGE_SHIFT, SZ_128K);
-- 
2.17.2


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

WARNING: multiple messages have this Message-ID (diff)
From: Baoquan He <bhe@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: linux-mm@kvack.org, x86@kernel.org, rientjes@google.com,
	rppt@linux.ibm.com, thomas.lendacky@amd.com,
	brijesh.singh@amd.com, kexec@lists.infradead.org, bhe@redhat.com
Subject: [PATCH 2/2] dma-pool: allow user to disable atomic pool
Date: Thu, 24 Jun 2021 13:20:10 +0800	[thread overview]
Message-ID: <20210624052010.5676-3-bhe@redhat.com> (raw)
In-Reply-To: <20210624052010.5676-1-bhe@redhat.com>

In the current code, three atomic memory pools are provided,
atomic_pool_kernel, atomic_pool_dma, atomic_pool_dma32, initialized
with flag GFP_KERNEL, GFP_KERNEL|GFP_DMA, GFP_KERNEL|GFP_DMA32.
And they are always enabled, even though 'coherent_pool=0' is
specified in kernel command line.

In some cases, atomic pool may not be needed. And worse, it even will
cause problem. E.g in kdump kernel of x86_64, it will cause OOM for
atomic_pool_dma initialization. Because there isn't available memory
for buddy allocatory in DMA zone of kdump kernel since commit
f1d4d47c5851 ("x86/setup: Always reserve the first 1M of RAM"). 
The OOM will cause panic if panic_on_oom is added into kdump kernel.

So change code to adjust the existing coherent_pool to allow user
to disable atomic pool by specifying 'coherent_pool=0'.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 kernel/dma/pool.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/kernel/dma/pool.c b/kernel/dma/pool.c
index 5f84e6cdb78e..5a85804b5beb 100644
--- a/kernel/dma/pool.c
+++ b/kernel/dma/pool.c
@@ -21,7 +21,7 @@ static struct gen_pool *atomic_pool_kernel __ro_after_init;
 static unsigned long pool_size_kernel;
 
 /* Size can be defined by the coherent_pool command line */
-static size_t atomic_pool_size;
+static unsigned long atomic_pool_size = -1;
 
 /* Dynamic background expansion when the atomic pool is near capacity */
 static struct work_struct atomic_pool_work;
@@ -188,11 +188,14 @@ static int __init dma_atomic_pool_init(void)
 {
 	int ret = 0;
 
+	if (!atomic_pool_size)
+		return 0;
+
 	/*
 	 * If coherent_pool was not used on the command line, default the pool
 	 * sizes to 128KB per 1GB of memory, min 128KB, max MAX_ORDER-1.
 	 */
-	if (!atomic_pool_size) {
+	if (atomic_pool_size == -1) {
 		unsigned long pages = totalram_pages() / (SZ_1G / SZ_128K);
 		pages = min_t(unsigned long, pages, MAX_ORDER_NR_PAGES);
 		atomic_pool_size = max_t(size_t, pages << PAGE_SHIFT, SZ_128K);
-- 
2.17.2



  parent reply	other threads:[~2021-06-24  5:20 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-24  5:20 [PATCH RFC 0/2] dma-pool: allow user to disable atomic pool Baoquan He
2021-06-24  5:20 ` Baoquan He
2021-06-24  5:20 ` [PATCH 1/2] docs: kernel-parameters: Update to reflect the current default size of " Baoquan He
2021-06-24  5:20   ` Baoquan He
2021-06-24  5:20 ` Baoquan He [this message]
2021-06-24  5:20   ` [PATCH 2/2] dma-pool: allow user to disable " Baoquan He
2021-06-24  7:40 ` [PATCH RFC 0/2] " Christoph Hellwig
2021-06-24  7:40   ` Christoph Hellwig
2021-06-24  9:29   ` Baoquan He
2021-06-24  9:29     ` Baoquan He
2021-06-24  9:29     ` Baoquan He
2021-06-24 10:47     ` Robin Murphy
2021-06-24 10:47       ` Robin Murphy
2021-06-24 10:47       ` Robin Murphy
2021-06-24 12:10       ` Christoph Hellwig
2021-06-24 12:10         ` Christoph Hellwig
2021-06-24 12:10         ` Christoph Hellwig
2021-08-05  6:54       ` Baoquan He
2021-08-05  6:54         ` Baoquan He
2021-08-05  6:54         ` Baoquan He
2021-08-10 20:52         ` Tom Lendacky
2021-08-10 20:52           ` Tom Lendacky
2021-08-10 20:52           ` Tom Lendacky via iommu
2021-08-11  2:23           ` Baoquan He
2021-08-11  2:23             ` Baoquan He
2021-08-11  2:23             ` Baoquan He
2021-08-11 13:46             ` Tom Lendacky
2021-08-11 13:46               ` Tom Lendacky
2021-08-11 13:46               ` Tom Lendacky via iommu
2021-08-11  5:52           ` Christoph Hellwig
2021-08-11  5:52             ` Christoph Hellwig
2021-08-11  5:52             ` Christoph Hellwig
  -- strict thread matches above, loose matches on Subject: below --
2021-12-17  9:08 [PATCH 0/2] Clean up document and small improvement of " Baoquan He
2021-12-17  9:08 ` [PATCH 2/2] dma-pool: allow user to disable " Baoquan He
2021-12-21  8:52   ` Christoph Hellwig

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=20210624052010.5676-3-bhe@redhat.com \
    --to=bhe@redhat.com \
    --cc=brijesh.singh@amd.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rientjes@google.com \
    --cc=rppt@linux.ibm.com \
    --cc=thomas.lendacky@amd.com \
    --cc=x86@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.