From: Hongyan Xia <hongyxia@amazon.com>
This avoids the assumption that there is a direct map and boot pages
fall inside the direct map.
Clean up the variables so that mfn actually stores a type-safe mfn.
Signed-off-by: Hongyan Xia <hongyxia@amazon.com>
Signed-off-by: Julien Grall <jgrall@amazon.com>
Signed-off-by: Elias El Yandouzi <eliasely@amazon.com>
----
See the discussion in the next patch about using panic().
Changes in v2:
* vmap_contig_pages() was renamed to vmap_contig()
* Replace the BUG_ON() with a panic()
Changes compare to Hongyan's version:
* The function modified was moved to common code. So rebase it
* vmap_boot_pages() was renamed to vmap_contig_pages()
diff --git a/xen/common/numa.c b/xen/common/numa.c
index f454c4d894..ef13ec2255 100644
--- a/xen/common/numa.c
+++ b/xen/common/numa.c
@@ -424,13 +424,14 @@ static int __init populate_memnodemap(const struct node *nodes,
static int __init allocate_cachealigned_memnodemap(void)
{
unsigned long size = PFN_UP(memnodemapsize * sizeof(*memnodemap));
- unsigned long mfn = mfn_x(alloc_boot_pages(size, 1));
+ mfn_t mfn = alloc_boot_pages(size, 1);
- memnodemap = mfn_to_virt(mfn);
- mfn <<= PAGE_SHIFT;
+ memnodemap = vmap_contig(mfn, size);
+ if ( !memnodemap )
+ panic("Unable to map the ACPI SLIT. Retry with numa=off");
size <<= PAGE_SHIFT;
printk(KERN_DEBUG "NUMA: Allocated memnodemap from %lx - %lx\n",
- mfn, mfn + size);
+ mfn_to_maddr(mfn), mfn_to_maddr(mfn) + size);
memnodemapsize = size / sizeof(*memnodemap);
return 0;
--
2.40.1