[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 04/11] arch, arm: make pfn range passed to map_mmio_regions() inclusive
Currently, the map_mmio_regions() function accepts a range of pfns which is not inclusive of the end frame number. However, the corresponding operation performed for the x86 architecture, which will be factored out from the memory_mapping DOMCTL in one of the following commits, accepts a pfn range which is inclusive of the end pfn. This commit attempts to make such an interface consistent, by letting map_mmio_regions() consider a pfn range inclusive of the end pfn. Signed-off-by: Arianna Avanzini <avanzini.arianna@xxxxxxxxx> Cc: Dario Faggioli <dario.faggioli@xxxxxxxxxx> Cc: Paolo Valente <paolo.valente@xxxxxxxxxx> Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> Cc: Julien Grall <julien.grall@xxxxxxxxxx> Cc: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx> Cc: Jan Beulich <JBeulich@xxxxxxxx> Cc: Keir Fraser <keir@xxxxxxx> Cc: Tim Deegan <tim@xxxxxxx> Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> Cc: Eric Trudeau <etrudeau@xxxxxxxxxxxx> Cc: Viktor Kleinik <viktor.kleinik@xxxxxxxxxxxxxxx> --- xen/arch/arm/domain_build.c | 2 +- xen/arch/arm/gic.c | 6 +++--- xen/arch/arm/p2m.c | 2 +- xen/arch/arm/platforms/exynos5.c | 4 ++-- xen/arch/arm/platforms/omap5.c | 8 ++++---- xen/arch/arm/platforms/xgene-storm.c | 2 +- xen/include/asm-arm/p2m.h | 5 +++-- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 15db84b..0d55468 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -753,7 +753,7 @@ static int map_device(struct domain *d, const struct dt_device_node *dev) } res = map_mmio_regions(d, paddr_to_pfn(addr & PAGE_MASK), - paddr_to_pfn_aligned(addr + size - 1), + paddr_to_pfn_aligned(addr + size) - 1, paddr_to_pfn(addr & PAGE_MASK)); if ( res ) { diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c index a5c3288..11fbd42 100644 --- a/xen/arch/arm/gic.c +++ b/xen/arch/arm/gic.c @@ -890,7 +890,7 @@ int gicv_setup(struct domain *d) */ ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase), paddr_to_pfn_aligned(d->arch.vgic.cbase + - PAGE_SIZE - 1), + PAGE_SIZE) - 1, paddr_to_pfn(gic.vbase)); if (ret) return ret; @@ -898,12 +898,12 @@ int gicv_setup(struct domain *d) if ( !platform_has_quirk(PLATFORM_QUIRK_GIC_64K_STRIDE) ) ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase + PAGE_SIZE), paddr_to_pfn_aligned(d->arch.vgic.cbase + - (2 * PAGE_SIZE) - 1), + (2 * PAGE_SIZE)) - 1, paddr_to_pfn(gic.vbase + PAGE_SIZE)); else ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase + PAGE_SIZE), paddr_to_pfn_aligned(d->arch.vgic.cbase + - (2 * PAGE_SIZE) - 1), + (2 * PAGE_SIZE)) - 1, paddr_to_pfn(gic.vbase + 16*PAGE_SIZE)); return ret; diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c index eb9da33..54a0afa 100644 --- a/xen/arch/arm/p2m.c +++ b/xen/arch/arm/p2m.c @@ -517,7 +517,7 @@ int map_mmio_regions(struct domain *d, { return apply_p2m_changes(d, INSERT, pfn_to_paddr(start_gfn), - pfn_to_paddr(end_gfn), + pfn_to_paddr(end_gfn + 1), pfn_to_paddr(mfn), MATTR_DEV, p2m_mmio_direct); } diff --git a/xen/arch/arm/platforms/exynos5.c b/xen/arch/arm/platforms/exynos5.c index acd8781..d8c0b82 100644 --- a/xen/arch/arm/platforms/exynos5.c +++ b/xen/arch/arm/platforms/exynos5.c @@ -55,13 +55,13 @@ static int exynos5_specific_mapping(struct domain *d) { /* Map the chip ID */ map_mmio_regions(d, paddr_to_pfn(EXYNOS5_PA_CHIPID), - paddr_to_pfn_aligned(EXYNOS5_PA_CHIPID + PAGE_SIZE - 1), + paddr_to_pfn_aligned(EXYNOS5_PA_CHIPID + PAGE_SIZE) - 1, paddr_to_pfn(EXYNOS5_PA_CHIPID)); /* Map the PWM region */ map_mmio_regions(d, paddr_to_pfn(EXYNOS5_PA_TIMER), paddr_to_pfn_aligned(EXYNOS5_PA_TIMER + - (PAGE_SIZE * 2) - 1), + (PAGE_SIZE * 2)) - 1, paddr_to_pfn(EXYNOS5_PA_TIMER)); return 0; diff --git a/xen/arch/arm/platforms/omap5.c b/xen/arch/arm/platforms/omap5.c index c975020..3876456 100644 --- a/xen/arch/arm/platforms/omap5.c +++ b/xen/arch/arm/platforms/omap5.c @@ -103,22 +103,22 @@ static int omap5_specific_mapping(struct domain *d) { /* Map the PRM module */ map_mmio_regions(d, paddr_to_pfn(OMAP5_PRM_BASE), - paddr_to_pfn_aligned(OMAP5_PRM_BASE + (PAGE_SIZE * 2) - 1), + paddr_to_pfn_aligned(OMAP5_PRM_BASE + (PAGE_SIZE * 2)) - 1, paddr_to_pfn(OMAP5_PRM_BASE)); /* Map the PRM_MPU */ map_mmio_regions(d, paddr_to_pfn(OMAP5_PRCM_MPU_BASE), - paddr_to_pfn_aligned(OMAP5_PRCM_MPU_BASE + PAGE_SIZE - 1), + paddr_to_pfn_aligned(OMAP5_PRCM_MPU_BASE + PAGE_SIZE) - 1, paddr_to_pfn(OMAP5_PRCM_MPU_BASE)); /* Map the Wakeup Gen */ map_mmio_regions(d, paddr_to_pfn(OMAP5_WKUPGEN_BASE), - paddr_to_pfn_aligned(OMAP5_WKUPGEN_BASE + PAGE_SIZE - 1), + paddr_to_pfn_aligned(OMAP5_WKUPGEN_BASE + PAGE_SIZE) - 1, paddr_to_pfn(OMAP5_WKUPGEN_BASE)); /* Map the on-chip SRAM */ map_mmio_regions(d, paddr_to_pfn(OMAP5_SRAM_PA), - paddr_to_pfn_aligned(OMAP5_SRAM_PA + (PAGE_SIZE * 32) - 1), + paddr_to_pfn_aligned(OMAP5_SRAM_PA + (PAGE_SIZE * 32)) - 1, paddr_to_pfn(OMAP5_SRAM_PA)); return 0; diff --git a/xen/arch/arm/platforms/xgene-storm.c b/xen/arch/arm/platforms/xgene-storm.c index f3662fd..6187d02 100644 --- a/xen/arch/arm/platforms/xgene-storm.c +++ b/xen/arch/arm/platforms/xgene-storm.c @@ -48,7 +48,7 @@ static int map_one_mmio(struct domain *d, const char *what, printk("Additional MMIO %"PRIpaddr"-%"PRIpaddr" (%s)\n", start, end, what); ret = map_mmio_regions(d, paddr_to_pfn(start), - paddr_to_pfn_aligned(end), + paddr_to_pfn_aligned(end) - 1, paddr_to_pfn(start)); if ( ret ) printk("Failed to map %s @ %"PRIpaddr" to dom%d\n", diff --git a/xen/include/asm-arm/p2m.h b/xen/include/asm-arm/p2m.h index c7dd6aa..f75dd44 100644 --- a/xen/include/asm-arm/p2m.h +++ b/xen/include/asm-arm/p2m.h @@ -84,8 +84,9 @@ int p2m_cache_flush(struct domain *d, xen_pfn_t start_mfn, xen_pfn_t end_mfn); /* Setup p2m RAM mapping for domain d from start-end. */ int p2m_populate_ram(struct domain *d, paddr_t start, paddr_t end); -/* Map MMIO regions in the p2m: start_gfn and end_gfn is the range in the guest - * physical address space to map, starting from the machine frame number mfn. */ +/* Map MMIO regions in the p2m: start_gfn and end_gfn is the range, inclusive + * of the end_gfn frame number, in the guest physical address space to map, + * starting from the machine frame number mfn. */ int map_mmio_regions(struct domain *d, unsigned long start_gfn, unsigned long end_gfn, -- 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 |