[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 |