|
@@ -27,6 +27,7 @@
|
|
|
#include <xen/interface/memory.h>
|
|
|
#include <xen/interface/physdev.h>
|
|
|
#include <xen/features.h>
|
|
|
+#include <xen/hvc-console.h>
|
|
|
#include "xen-ops.h"
|
|
|
#include "vdso.h"
|
|
|
#include "p2m.h"
|
|
@@ -790,6 +791,17 @@ char * __init xen_memory_setup(void)
|
|
|
|
|
|
sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
|
|
|
|
|
|
+ /*
|
|
|
+ * Check whether the kernel itself conflicts with the target E820 map.
|
|
|
+ * Failing now is better than running into weird problems later due
|
|
|
+ * to relocating (and even reusing) pages with kernel text or data.
|
|
|
+ */
|
|
|
+ if (xen_is_e820_reserved(__pa_symbol(_text),
|
|
|
+ __pa_symbol(__bss_stop) - __pa_symbol(_text))) {
|
|
|
+ xen_raw_console_write("Xen hypervisor allocated kernel memory conflicts with E820 map\n");
|
|
|
+ BUG();
|
|
|
+ }
|
|
|
+
|
|
|
xen_reserve_xen_mfnlist();
|
|
|
|
|
|
/*
|