From: Doug Berger <opendmb@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Jonathan Corbet <corbet@lwn.net>, Mike Rapoport <rppt@kernel.org>,
Borislav Petkov <bp@suse.de>,
"Paul E. McKenney" <paulmck@kernel.org>,
Randy Dunlap <rdunlap@infradead.org>,
Neeraj Upadhyay <quic_neeraju@quicinc.com>,
Damien Le Moal <damien.lemoal@opensource.wdc.com>,
Kim Phillips <kim.phillips@amd.com>,
"Steven Rostedt (Google)" <rostedt@goodmis.org>,
Michal Hocko <mhocko@suse.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Vlastimil Babka <vbabka@suse.cz>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Mel Gorman <mgorman@suse.de>,
Muchun Song <songmuchun@bytedance.com>,
Mike Kravetz <mike.kravetz@oracle.com>,
Florian Fainelli <f.fainelli@gmail.com>,
David Hildenbrand <david@redhat.com>,
Oscar Salvador <osalvador@suse.de>,
Joonsoo Kim <iamjoonsoo.kim@lge.com>,
Sukadev Bhattiprolu <quic_sukadev@quicinc.com>,
Rik van Riel <riel@surriel.com>, Roman Gushchin <guro@fb.com>,
Minchan Kim <minchan@kernel.org>,
Chris Goldsworthy <quic_cgoldswo@quicinc.com>,
"Georgi Djakov" <quic_c_gdjako@quicinc.com>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, Doug Berger <opendmb@gmail.com>
Subject: [PATCH v4 9/9] mm/page_alloc: allow base for movablecore
Date: Fri, 10 Mar 2023 16:38:55 -0800 [thread overview]
Message-ID: <20230311003855.645684-10-opendmb@gmail.com> (raw)
In-Reply-To: <20230311003855.645684-1-opendmb@gmail.com>
A Designated Movable Block can be created by including the base
address of the block when specifying a movablecore range on the
kernel command line.
Signed-off-by: Doug Berger <opendmb@gmail.com>
---
.../admin-guide/kernel-parameters.txt | 14 ++++++-
mm/page_alloc.c | 38 ++++++++++++++++---
2 files changed, 45 insertions(+), 7 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 6221a1d057dd..5e3bf6e0a264 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -3353,7 +3353,7 @@
reporting absolute coordinates, such as tablets
movablecore= [KNL,X86,IA-64,PPC]
- Format: nn[KMGTPE] | nn%
+ Format: nn[KMGTPE] | nn[KMGTPE]@ss[KMGTPE] | nn%
This parameter is the complement to kernelcore=, it
specifies the amount of memory used for migratable
allocations. If both kernelcore and movablecore is
@@ -3363,6 +3363,18 @@
that the amount of memory usable for all allocations
is not too small.
+ If @ss[KMGTPE] is included, memory within the region
+ from ss to ss+nn will be designated as a movable block
+ and included in ZONE_MOVABLE. Designated Movable Blocks
+ must be aligned to pageblock_order. Designated Movable
+ Blocks take priority over values of kernelcore= and are
+ considered part of any memory specified by more general
+ movablecore= values.
+ Multiple Designated Movable Blocks may be specified,
+ comma delimited.
+ Example:
+ movablecore=100M@2G,100M@3G,1G@1024G
+
movable_node [KNL] Boot-time switch to make hotplugable memory
NUMA nodes to be movable. This means that the memory
of such nodes will be usable only for movable
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index d4358d19d5a1..cb3c55acf7de 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -8504,9 +8504,9 @@ void __init free_area_init(unsigned long *max_zone_pfn)
}
static int __init cmdline_parse_core(char *p, unsigned long *core,
- unsigned long *percent)
+ unsigned long *percent, bool movable)
{
- unsigned long long coremem;
+ unsigned long long coremem, address;
char *endptr;
if (!p)
@@ -8521,6 +8521,17 @@ static int __init cmdline_parse_core(char *p, unsigned long *core,
*percent = coremem;
} else {
coremem = memparse(p, &p);
+ if (movable && *p == '@') {
+ address = memparse(++p, &p);
+ if (*p != '\0' ||
+ !memblock_is_region_memory(address, coremem) ||
+ memblock_is_region_reserved(address, coremem))
+ return -EINVAL;
+ memblock_reserve(address, coremem);
+ return dmb_reserve(address, coremem, NULL);
+ } else if (*p != '\0') {
+ return -EINVAL;
+ }
/* Paranoid check that UL is enough for the coremem value */
WARN_ON((coremem >> PAGE_SHIFT) > ULONG_MAX);
@@ -8543,17 +8554,32 @@ static int __init cmdline_parse_kernelcore(char *p)
}
return cmdline_parse_core(p, &required_kernelcore,
- &required_kernelcore_percent);
+ &required_kernelcore_percent, false);
}
/*
* movablecore=size sets the amount of memory for use for allocations that
- * can be reclaimed or migrated.
+ * can be reclaimed or migrated. movablecore=size@base defines a Designated
+ * Movable Block.
*/
static int __init cmdline_parse_movablecore(char *p)
{
- return cmdline_parse_core(p, &required_movablecore,
- &required_movablecore_percent);
+ int ret = -EINVAL;
+
+ while (p) {
+ char *k = strchr(p, ',');
+
+ if (k)
+ *k++ = 0;
+
+ ret = cmdline_parse_core(p, &required_movablecore,
+ &required_movablecore_percent, true);
+ if (ret)
+ break;
+ p = k;
+ }
+
+ return ret;
}
early_param("kernelcore", cmdline_parse_kernelcore);
--
2.34.1
prev parent reply other threads:[~2023-03-11 0:41 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-11 0:38 [PATCH v4 0/9] mm: introduce Designated Movable Blocks Doug Berger
2023-03-11 0:38 ` [PATCH v4 1/9] lib/show_mem.c: display MovableOnly Doug Berger
2023-03-11 0:38 ` [PATCH v4 2/9] mm/page_alloc: calculate node_spanned_pages from pfns Doug Berger
2023-03-11 0:38 ` [PATCH v4 3/9] mm/page_alloc: prevent creation of empty zones Doug Berger
2023-03-11 0:38 ` [PATCH v4 4/9] mm/page_alloc.c: allow oversized movablecore Doug Berger
2023-03-11 0:38 ` [PATCH v4 5/9] mm/page_alloc: introduce init_reserved_pageblock() Doug Berger
2023-03-11 0:38 ` [PATCH v4 6/9] memblock: introduce MEMBLOCK_MOVABLE flag Doug Berger
2023-03-11 0:38 ` [PATCH v4 7/9] mm/dmb: Introduce Designated Movable Blocks Doug Berger
2023-03-11 4:47 ` [lkp] [+661 bytes kernel size regression] [i386-tinyconfig] [f9fbaaba68] " kernel test robot
2023-03-11 0:38 ` [PATCH v4 8/9] mm/page_alloc: make alloc_contig_pages DMB aware Doug Berger
2023-03-11 0:38 ` Doug Berger [this message]
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=20230311003855.645684-10-opendmb@gmail.com \
--to=opendmb@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bp@suse.de \
--cc=corbet@lwn.net \
--cc=damien.lemoal@opensource.wdc.com \
--cc=david@redhat.com \
--cc=f.fainelli@gmail.com \
--cc=guro@fb.com \
--cc=hannes@cmpxchg.org \
--cc=iamjoonsoo.kim@lge.com \
--cc=kim.phillips@amd.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhocko@suse.com \
--cc=mike.kravetz@oracle.com \
--cc=minchan@kernel.org \
--cc=osalvador@suse.de \
--cc=paulmck@kernel.org \
--cc=quic_c_gdjako@quicinc.com \
--cc=quic_cgoldswo@quicinc.com \
--cc=quic_neeraju@quicinc.com \
--cc=quic_sukadev@quicinc.com \
--cc=rdunlap@infradead.org \
--cc=riel@surriel.com \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=songmuchun@bytedance.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 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.