[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 3/5] iommu/x86: use full addresses internally for the IVMD/RMRR range checks
Adjust the code in the checker to use full addresses rather than frame numbers, as it's only page_get_ram_type() that requires an mfn parameter. Suggested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- xen/drivers/passthrough/x86/iommu.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/xen/drivers/passthrough/x86/iommu.c b/xen/drivers/passthrough/x86/iommu.c index 304a2f5480c7..e713cf803e8a 100644 --- a/xen/drivers/passthrough/x86/iommu.c +++ b/xen/drivers/passthrough/x86/iommu.c @@ -794,28 +794,26 @@ __initcall(adjust_irq_affinities); bool __init iommu_unity_region_ok(const char *prefix, mfn_t start, mfn_t end) { - mfn_t addr; + paddr_t s = mfn_to_maddr(start), e = mfn_to_maddr(end); - if ( e820_all_mapped(mfn_to_maddr(start), mfn_to_maddr(end) + PAGE_SIZE, - E820_RESERVED) ) + if ( e820_all_mapped(s, e + PAGE_SIZE, E820_RESERVED) ) return true; printk(XENLOG_WARNING "%s: [%#lx, %#lx] is not (entirely) in reserved memory\n", - prefix, mfn_to_maddr(start), mfn_to_maddr(end)); + prefix, s, e); - for ( addr = start; mfn_x(addr) <= mfn_x(end); addr = mfn_add(addr, 1) ) + for ( paddr_t addr = s; addr <= e; addr += PAGE_SIZE ) { - unsigned int type = page_get_ram_type(addr); + unsigned int type = page_get_ram_type(maddr_to_mfn(addr)); if ( type == RAM_TYPE_UNKNOWN ) { - if ( e820_add_range(mfn_to_maddr(addr), - mfn_to_maddr(addr) + PAGE_SIZE, E820_RESERVED) ) + if ( e820_add_range(addr, addr + PAGE_SIZE, E820_RESERVED) ) continue; printk(XENLOG_ERR - "%s: page at %#" PRI_mfn " couldn't be reserved\n", - prefix, mfn_x(addr)); + "%s: page at %#lx couldn't be reserved\n", + prefix, paddr_to_pfn(addr)); return false; } @@ -829,9 +827,8 @@ bool __init iommu_unity_region_ok(const char *prefix, mfn_t start, mfn_t end) RAM_TYPE_UNUSABLE) ) continue; - printk(XENLOG_ERR - "%s: page at %#" PRI_mfn " can't be converted\n", - prefix, mfn_x(addr)); + printk(XENLOG_ERR "%s: page at %#lx can't be converted\n", + prefix, paddr_to_pfn(addr)); return false; } -- 2.43.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |