[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v2] xen/arm: add warning if memory modules overlap


  • To: xen-devel@xxxxxxxxxxxxxxxxxxxx
  • From: Brian Woods <brian.woods@xxxxxxxxxx>
  • Date: Thu, 17 Oct 2019 13:07:40 -0700
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.199.60.83) smtp.rcpttodomain=epam.com smtp.mailfrom=xilinx.com; dmarc=bestguesspass action=none header.from=xilinx.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+6aqsrlVx+M4Yaf0+/zrHQY0vg69SlIZH0Lw6B9X3E8=; b=kXLzWw3CVtouyN2ipqqKs+FwPPjCd+N/BWQRSRrvIwe3LVe6gbFeTLiEzdaQnCfv78oOW+7nNzawEsKFKe+CqeMoZE6XRk0vmWJnEZQp/QQMpB99+4NNSAdi9MzBunXU7g+2scCF0nL5qywMkL9Dwb4v8Ui7FXGOFAmfVZ2qeB4M9ARWGVejSvMzhTx1KscLwA4y0T4lh6lm7S8cfBh+eIIm6RGGFar5Bvt3sy+G6h/x3MAEdugI9htNMo/xbpehEc98tu94Woto7JcMk+JqFAweyLpCU7jhBqehSZK1tjtVuOryFUqoAVJCYtdREP2Q+J6B/zKRNcS1kxJZPyBOfg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VNRCpS5NaCGtVKBTlyvoH3/1kkCW/DeTQj79+KBONR3z/rHX8rNymMSQmw0+up6wCBQmL6ccN2QkfBg+Hjp+PVPMzJel6CFv7KMaJ/QN9eqyG6QaEVPOftO+kctN/1MYBvL+8AWqEK6V4/IlI83NkgwOCzY/BWP6s8E0qM+y3vzzP5L0vXugNkXA41Q1s3Y9FU7YPzY8Xf/aCbhKYDgTLhfpwLiUJYeM4RNYiQKDhfZt+domYfbs8w43BuKo3vmrFTRMUVVH8h671w8Gppy7f4QkR003h+a2R3HnnHEEuCx9FFZ//f/UDiVdlsSBZJAmIE/FkPXlFXOwyJA2cILaMQ==
  • Authentication-results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; epam.com; dkim=none (message not signed) header.d=none;epam.com; dmarc=bestguesspass action=none header.from=xilinx.com;
  • Cc: Brian Woods <brian.woods@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Thu, 17 Oct 2019 20:08:13 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

It's possible for a misconfigured device tree to cause Xen to crash when
there are overlapping addresses in the memory modules.  Add a warning
when printing the addresses to let the user know there's a possible
issue.

Signed-off-by: Brian Woods <brian.woods@xxxxxxxxxx>
---
v1 -> v2
        - removed nested loop and placed check in add_boot_module()

Sample output:
...
(XEN) MODULE[0]: 0000000001400000 - 0000000001542121 Xen         
(XEN) MODULE[1]: 0000000003846000 - 0000000003850080 Device Tree 
(XEN) MODULE[2]: 0000000003853000 - 0000000007fff676 Ramdisk     
(XEN) MODULE[3]: 0000000000080000 - 0000000003180000 Kernel      
(XEN)  RESVD[0]: 0000000003846000 - 0000000003850000
(XEN)  RESVD[1]: 0000000003853000 - 0000000007fff676
(XEN) 
(XEN) WARNING: overlap detected in the memory module addresses
(XEN) 
(XEN) Command line: console=dtuart dtuart=serial0 dom0_mem=1G bootscrub=0 
maxcpus=1 timer_slop=0
...

 xen/arch/arm/bootfdt.c      | 4 ++++
 xen/arch/arm/setup.c        | 6 ++++++
 xen/include/asm-arm/setup.h | 1 +
 3 files changed, 11 insertions(+)

diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c
index 08fb59f..f8b34d4 100644
--- a/xen/arch/arm/bootfdt.c
+++ b/xen/arch/arm/bootfdt.c
@@ -387,6 +387,10 @@ static void __init early_print_info(void)
                mem_resv->bank[j].start + mem_resv->bank[j].size - 1);
     }
     printk("\n");
+
+    if ( mem_module_overlap )
+        printk("WARNING: overlap detected in the memory module addresses.\n");
+
     for ( i = 0 ; i < cmds->nr_mods; i++ )
         printk("CMDLINE[%"PRIpaddr"]:%s %s\n", cmds->cmdline[i].start,
                cmds->cmdline[i].dt_name,
diff --git a/xen/arch/arm/setup.c b/xen/arch/arm/setup.c
index 705a917..315a131 100644
--- a/xen/arch/arm/setup.c
+++ b/xen/arch/arm/setup.c
@@ -69,6 +69,8 @@ integer_param("xenheap_megabytes", opt_xenheap_megabytes);
 
 domid_t __read_mostly max_init_domid;
 
+bool __initdata mem_module_overlap;
+
 static __used void init_done(void)
 {
     /* Must be done past setting system_state. */
@@ -254,6 +256,10 @@ struct bootmodule __init *add_boot_module(bootmodule_kind 
kind,
                 mod->domU = false;
             return mod;
         }
+
+        if ( ((mod->start >= start) && (mod->start < start + size)) ||
+             ((start >= mod->start) && (start < mod->start + mod->size)) )
+            mem_module_overlap = true;
     }
 
     mod = &mods->module[mods->nr_mods++];
diff --git a/xen/include/asm-arm/setup.h b/xen/include/asm-arm/setup.h
index 2f8f24e..4bb1ba1 100644
--- a/xen/include/asm-arm/setup.h
+++ b/xen/include/asm-arm/setup.h
@@ -122,6 +122,7 @@ void device_tree_get_reg(const __be32 **cell, u32 
address_cells,
 u32 device_tree_get_u32(const void *fdt, int node,
                         const char *prop_name, u32 dflt);
 
+extern bool mem_module_overlap;
 #endif
 /*
  * Local variables:
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.