|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC][PATCH 1/5] xen:x86: record RMRR mappings
We will expose RMRR mappings to VM so need to record all
RMRR mappings firstly.
Signed-off-by: Tiejun Chen <tiejun.chen@xxxxxxxxx>
---
xen/arch/x86/e820.c | 2 ++
xen/drivers/passthrough/vtd/dmar.c | 15 +++++++++++++++
xen/include/asm-x86/e820.h | 1 +
3 files changed, 18 insertions(+)
diff --git a/xen/arch/x86/e820.c b/xen/arch/x86/e820.c
index 55fe0d6..53bb2cf 100644
--- a/xen/arch/x86/e820.c
+++ b/xen/arch/x86/e820.c
@@ -34,6 +34,8 @@ static bool_t __initdata e820_verbose;
boolean_param("e820-verbose", e820_verbose);
struct e820map e820;
+/* Used to record RMRR mapping. */
+struct e820map rmrr_e820;
/*
* This function checks if the entire range <start,end> is mapped with type.
diff --git a/xen/drivers/passthrough/vtd/dmar.c
b/xen/drivers/passthrough/vtd/dmar.c
index 1152c3a..245a6cc 100644
--- a/xen/drivers/passthrough/vtd/dmar.c
+++ b/xen/drivers/passthrough/vtd/dmar.c
@@ -29,6 +29,7 @@
#include <xen/pci.h>
#include <xen/pci_regs.h>
#include <asm/string.h>
+#include <asm/e820.h>
#include "dmar.h"
#include "iommu.h"
#include "extern.h"
@@ -80,6 +81,19 @@ static int __init acpi_register_rmrr_unit(struct
acpi_rmrr_unit *rmrr)
return 0;
}
+/* Record RMRR mapping to ready expose VM. */
+static int __init rmrr_e820_register(struct acpi_rmrr_unit *rmrr)
+{
+ static int i = 0;
+
+ rmrr_e820.map[i].addr = rmrr->base_address;
+ rmrr_e820.map[i].size = rmrr->end_address - rmrr->base_address;
+ rmrr_e820.map[i].type = E820_RESERVED;
+ rmrr_e820.nr_map = i;
+ i++;
+ return 0;
+}
+
static void __init disable_all_dmar_units(void)
{
struct acpi_drhd_unit *drhd, *_drhd;
@@ -675,6 +689,7 @@ acpi_parse_one_rmrr(struct acpi_dmar_header *header)
" end_address %"PRIx64"\n",
rmrru->base_address, rmrru->end_address);
acpi_register_rmrr_unit(rmrru);
+ rmrr_e820_register(rmrru);
}
}
diff --git a/xen/include/asm-x86/e820.h b/xen/include/asm-x86/e820.h
index 08b413d..8418fc4 100644
--- a/xen/include/asm-x86/e820.h
+++ b/xen/include/asm-x86/e820.h
@@ -32,6 +32,7 @@ extern int e820_add_range(
struct e820map *, uint64_t s, uint64_t e, uint32_t type);
extern unsigned long init_e820(const char *, struct e820entry *, int *);
extern struct e820map e820;
+extern struct e820map rmrr_e820;
/* These symbols live in the boot trampoline. */
extern struct e820entry e820map[];
--
1.9.1
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |