mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-09-21 12:11:49 +08:00
mm/memory_hotplug: allow memmap on memory hotplug request to fallback
If not supported, fallback to not using memap on memmory. This avoids the need for callers to do the fallback. Link: https://lkml.kernel.org/r/20230808091501.287660-3-aneesh.kumar@linux.ibm.com Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> Acked-by: Michal Hocko <mhocko@suse.com> Acked-by: David Hildenbrand <david@redhat.com> Cc: Christophe Leroy <christophe.leroy@csgroup.eu> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Nicholas Piggin <npiggin@gmail.com> Cc: Oscar Salvador <osalvador@suse.de> Cc: Vishal Verma <vishal.l.verma@intel.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
04d5ea46a1
commit
e3c2bfdd33
@ -211,8 +211,7 @@ static int acpi_memory_enable_device(struct acpi_memory_device *mem_device)
|
|||||||
if (!info->length)
|
if (!info->length)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mhp_supports_memmap_on_memory(info->length))
|
mhp_flags |= MHP_MEMMAP_ON_MEMORY;
|
||||||
mhp_flags |= MHP_MEMMAP_ON_MEMORY;
|
|
||||||
result = __add_memory(mgid, info->start_addr, info->length,
|
result = __add_memory(mgid, info->start_addr, info->length,
|
||||||
mhp_flags);
|
mhp_flags);
|
||||||
|
|
||||||
|
@ -97,6 +97,8 @@ typedef int __bitwise mhp_t;
|
|||||||
* To do so, we will use the beginning of the hot-added range to build
|
* To do so, we will use the beginning of the hot-added range to build
|
||||||
* the page tables for the memmap array that describes the entire range.
|
* the page tables for the memmap array that describes the entire range.
|
||||||
* Only selected architectures support it with SPARSE_VMEMMAP.
|
* Only selected architectures support it with SPARSE_VMEMMAP.
|
||||||
|
* This is only a hint, the core kernel can decide to not do this based on
|
||||||
|
* different alignment checks.
|
||||||
*/
|
*/
|
||||||
#define MHP_MEMMAP_ON_MEMORY ((__force mhp_t)BIT(1))
|
#define MHP_MEMMAP_ON_MEMORY ((__force mhp_t)BIT(1))
|
||||||
/*
|
/*
|
||||||
@ -354,7 +356,6 @@ extern struct zone *zone_for_pfn_range(int online_type, int nid,
|
|||||||
extern int arch_create_linear_mapping(int nid, u64 start, u64 size,
|
extern int arch_create_linear_mapping(int nid, u64 start, u64 size,
|
||||||
struct mhp_params *params);
|
struct mhp_params *params);
|
||||||
void arch_remove_linear_mapping(u64 start, u64 size);
|
void arch_remove_linear_mapping(u64 start, u64 size);
|
||||||
extern bool mhp_supports_memmap_on_memory(unsigned long size);
|
|
||||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||||
|
|
||||||
#endif /* __LINUX_MEMORY_HOTPLUG_H */
|
#endif /* __LINUX_MEMORY_HOTPLUG_H */
|
||||||
|
@ -1247,7 +1247,7 @@ static int online_memory_block(struct memory_block *mem, void *arg)
|
|||||||
return device_online(&mem->dev);
|
return device_online(&mem->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mhp_supports_memmap_on_memory(unsigned long size)
|
static bool mhp_supports_memmap_on_memory(unsigned long size)
|
||||||
{
|
{
|
||||||
unsigned long nr_vmemmap_pages = size / PAGE_SIZE;
|
unsigned long nr_vmemmap_pages = size / PAGE_SIZE;
|
||||||
unsigned long vmemmap_size = nr_vmemmap_pages * sizeof(struct page);
|
unsigned long vmemmap_size = nr_vmemmap_pages * sizeof(struct page);
|
||||||
@ -1339,13 +1339,12 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
|
|||||||
* Self hosted memmap array
|
* Self hosted memmap array
|
||||||
*/
|
*/
|
||||||
if (mhp_flags & MHP_MEMMAP_ON_MEMORY) {
|
if (mhp_flags & MHP_MEMMAP_ON_MEMORY) {
|
||||||
if (!mhp_supports_memmap_on_memory(size)) {
|
if (mhp_supports_memmap_on_memory(size)) {
|
||||||
ret = -EINVAL;
|
mhp_altmap.free = PHYS_PFN(size);
|
||||||
goto error;
|
mhp_altmap.base_pfn = PHYS_PFN(start);
|
||||||
|
params.altmap = &mhp_altmap;
|
||||||
}
|
}
|
||||||
mhp_altmap.free = PHYS_PFN(size);
|
/* fallback to not using altmap */
|
||||||
mhp_altmap.base_pfn = PHYS_PFN(start);
|
|
||||||
params.altmap = &mhp_altmap;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* call arch's memory hotadd */
|
/* call arch's memory hotadd */
|
||||||
|
Loading…
Reference in New Issue
Block a user