Signed-off-by: Iurii Konovalenko <iurii.konovalenko@xxxxxxxxxxxxxxx>
---
xen/Rules.mk | 1 +
xen/arch/arm/setup.c | 14 ++++++++++++++
2 files changed, 15 insertions(+)
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 51f7124..30f5227 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -66,6 +66,7 @@ CFLAGS-$(HAS_PDX) += -DHAS_PDX
CFLAGS-$(frame_pointer) += -fno-omit-frame-pointer -DCONFIG_FRAME_POINTER
CFLAGS-$(ARM32_RELOCATE_OVER_4GB) += -DARM32_RELOCATE_OVER_4GB
CFLAGS-$(ARM32_SEPAR_MEM_SPLIT) += -DARM32_SEPAR_MEM_SPLIT
+CFLAGS-$(ARM32_XENHEAP_IN_LOWMEM) += -DARM32_XENHEAP_IN_LOWMEM
ifneq ($(max_phys_cpus),)
CFLAGS-y += -DMAX_PHYS_CPUS=$(max_phys_cpus)
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index 7e507bc..5510a34 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -475,7 +475,11 @@ static void init_pdx(void)
#ifdef CONFIG_ARM_32
static void __init setup_mm(unsigned long dtb_paddr, size_t dtb_size)
{
+#ifdef ARM32_XENHEAP_IN_LOWMEM
+ paddr_t ram_start, ram_end, ram_size, dma32_end;
+#else
paddr_t ram_start, ram_end, ram_size;
+#endif
paddr_t s, e;
unsigned long ram_pages;
unsigned long heap_pages, xenheap_pages, domheap_pages;
@@ -492,6 +496,9 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t
dtb_size)
ram_start = bootinfo.mem.bank[0].start;
ram_size = bootinfo.mem.bank[0].size;
ram_end = ram_start + ram_size;
+#ifdef ARM32_XENHEAP_IN_LOWMEM
+ dma32_end = ram_end > 0x100000000ULL ? 0 : ram_end;
+#endif
for ( i = 1; i < bootinfo.mem.nr_banks; i++ )
{
@@ -502,6 +509,9 @@ static void __init setup_mm(unsigned long dtb_paddr, size_t
dtb_size)
ram_size = ram_size + bank_size;
ram_start = min(ram_start,bank_start);
ram_end = max(ram_end,bank_end);
+#ifdef ARM32_XENHEAP_IN_LOWMEM
+ dma32_end = bank_end > 0x100000000ULL ? dma32_end : bank_end;
+#endif
}
total_pages = ram_pages = ram_size >> PAGE_SHIFT;
@@ -530,7 +540,11 @@ static void __init setup_mm(unsigned long dtb_paddr,
size_t dtb_size)
do
{
+#ifdef ARM32_XENHEAP_IN_LOWMEM
+ e = consider_modules(ram_start, dma32_end,
+#else
e = consider_modules(ram_start, ram_end,
+#endif
pfn_to_paddr(xenheap_pages),
32<<20, 0);
if ( e )