File 5e4c00ef-VT-d-check-full-RMRR-for-E820-reserved.patch of Package xen.14764
# Commit d6573bc6e6b7d95bb9de8471a6bfd7048ebc50f3
# Date 2020-02-18 16:21:19 +0100
# Author Jan Beulich <jbeulich@suse.com>
# Committer Jan Beulich <jbeulich@suse.com>
VT-d: check all of an RMRR for being E820-reserved
Checking just the first and last page is not sufficient (and redundant
for single-page regions). As we don't need to care about IA64 anymore,
use an x86-specific function to get this done without looping over each
individual page.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
--- a/xen/drivers/passthrough/vtd/dmar.c
+++ b/xen/drivers/passthrough/vtd/dmar.c
@@ -28,6 +28,7 @@
#include <xen/pci.h>
#include <xen/pci_regs.h>
#include <asm/atomic.h>
+#include <asm/e820.h>
#include <asm/string.h>
#include "dmar.h"
#include "iommu.h"
@@ -645,14 +646,11 @@ acpi_parse_one_rmrr(struct acpi_dmar_hea
* not properly represented in the system memory map and
* inform the user
*/
- if ( (!page_is_ram_type(paddr_to_pfn(base_addr), RAM_TYPE_RESERVED)) ||
- (!page_is_ram_type(paddr_to_pfn(end_addr), RAM_TYPE_RESERVED)) )
- {
+ if ( !e820_all_mapped(base_addr, end_addr + 1, RAM_TYPE_RESERVED) )
printk(XENLOG_WARNING VTDPREFIX
" RMRR address range %"PRIx64"..%"PRIx64" not in reserved memory;"
" need \"iommu_inclusive_mapping=1\"?\n",
base_addr, end_addr);
- }
rmrru = xzalloc(struct acpi_rmrr_unit);
if ( !rmrru )