From: Jan Beulich Date: Thu, 5 Mar 2020 10:37:39 +0000 (+0100) Subject: VT-d: check all of an RMRR for being E820-reserved X-Git-Tag: archive/raspbian/4.11.4-1+rpi1^2~58^2~16 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f9e2a60b393315c08515af4156540d0e94789cbc;p=xen.git 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 Reviewed-by: Roger Pau Monné Reviewed-by: Kevin Tian master commit: d6573bc6e6b7d95bb9de8471a6bfd7048ebc50f3 master date: 2020-02-18 16:21:19 +0100 --- diff --git a/xen/drivers/passthrough/vtd/dmar.c b/xen/drivers/passthrough/vtd/dmar.c index 81afa5498e..5ce8de0208 100644 --- a/xen/drivers/passthrough/vtd/dmar.c +++ b/xen/drivers/passthrough/vtd/dmar.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "dmar.h" #include "iommu.h" @@ -670,14 +671,11 @@ acpi_parse_one_rmrr(struct acpi_dmar_header *header) * 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, E820_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 )