@@ -235,7 +235,7 @@ fail:
* (as described above) we allow higher allocations and continue until
* that runs out (or we have allocated sufficient dom0 memory).
*/
-static void allocate_memory_11(struct domain *d, struct kernel_info *kinfo)
+static void allocate_memory(struct domain *d, struct kernel_info *kinfo)
{
const unsigned int min_low_order =
get_order_from_bytes(min_t(paddr_t, dom0_mem, MB(128)));
@@ -247,6 +247,12 @@ static void allocate_memory_11(struct domain *d, struct kernel_info *kinfo)
bool_t lowmem = is_32bit_domain(d);
unsigned int bits;
+ /*
+ * TODO: Implement memory bank allocation when DOM0 is not direct
+ * mapped
+ */
+ BUG_ON(!dom0_11_mapping);
+
printk("Allocating 1:1 mappings totalling %ldMB for dom0:\n",
/* Don't want format this as PRIpaddr (16 digit hex) */
(unsigned long)(kinfo->unassigned_mem >> 20));
@@ -343,56 +349,6 @@ static void allocate_memory_11(struct domain *d, struct kernel_info *kinfo)
}
}
-static void allocate_memory(struct domain *d, struct kernel_info *kinfo)
-{
-
- struct dt_device_node *memory = NULL;
- const void *reg;
- u32 reg_len, reg_size;
- unsigned int bank = 0;
-
- if ( dom0_11_mapping )
- return allocate_memory_11(d, kinfo);
-
- while ( (memory = dt_find_node_by_type(memory, "memory")) )
- {
- int l;
-
- dt_dprintk("memory node\n");
-
- reg_size = dt_cells_to_size(dt_n_addr_cells(memory) + dt_n_size_cells(memory));
-
- reg = dt_get_property(memory, "reg", ®_len);
- if ( reg == NULL )
- panic("Memory node has no reg property");
-
- for ( l = 0;
- kinfo->unassigned_mem > 0 && l + reg_size <= reg_len
- && kinfo->mem.nr_banks < NR_MEM_BANKS;
- l += reg_size )
- {
- paddr_t start, size;
-
- if ( dt_device_get_address(memory, bank, &start, &size) )
- panic("Unable to retrieve the bank %u for %s",
- bank, dt_node_full_name(memory));
-
- if ( size > kinfo->unassigned_mem )
- size = kinfo->unassigned_mem;
-
- printk("Populate P2M %#"PRIx64"->%#"PRIx64"\n",
- start, start + size);
- if ( p2m_populate_ram(d, start, start + size) < 0 )
- panic("Failed to populate P2M");
- kinfo->mem.bank[kinfo->mem.nr_banks].start = start;
- kinfo->mem.bank[kinfo->mem.nr_banks].size = size;
- kinfo->mem.nr_banks++;
-
- kinfo->unassigned_mem -= size;
- }
- }
-}
-
static int write_properties(struct domain *d, struct kernel_info *kinfo,
const struct dt_device_node *node)
{
The code to allocate memory when dom0 does not use direct mapping is relying on the presence of memory node in the DT. However, they are not present when booting using UEFI or when using ACPI. Rather than fixing the code, remove it because dom0 is always direct memory mapped and therefore the code is never tested. Also add a check to avoid disabling direct memory mapped and not implementing the associated RAM bank allocation. Signed-off-by: Julien Grall <julien.grall@arm.com> --- Changes in v4: - Patch added --- xen/arch/arm/domain_build.c | 58 ++++++--------------------------------------- 1 file changed, 7 insertions(+), 51 deletions(-)