|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 3/7] arch, arm: let map_mmio_regions() take pfn as parameters
On Tue, 25 Mar 2014, Arianna Avanzini wrote:
> Currently, the map_mmio_regions() function, defined for the ARM
> architecture, has parameters with paddr_t type. This interface,
> however, needs caller functions to correctly page-align addresses
> given as parameters to map_mmio_regions(). This commit changes the
> function's interface to accept page frame numbers as parameters.
> This commit also modifies caller functions in an attempt to adapt
> them to the new interface.
>
> NOTE: platform-specific code has not been tested.
>
> 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 | 7 ++++---
> xen/arch/arm/gic.c | 21 ++++++++++++---------
> xen/arch/arm/p2m.c | 13 ++++++++-----
> xen/arch/arm/platforms/exynos5.c | 13 ++++++++-----
> xen/arch/arm/platforms/omap5.c | 25 ++++++++++++++++---------
> xen/arch/arm/platforms/xgene-storm.c | 4 +++-
> xen/include/asm-arm/p2m.h | 11 ++++++-----
> 7 files changed, 57 insertions(+), 37 deletions(-)
>
> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> index 4a0411c..10f508d 100644
> --- a/xen/arch/arm/domain_build.c
> +++ b/xen/arch/arm/domain_build.c
> @@ -744,9 +744,10 @@ static int map_device(struct domain *d, const struct
> dt_device_node *dev)
> addr & PAGE_MASK, PAGE_ALIGN(addr + size) - 1);
> return res;
> }
> - res = map_mmio_regions(d, addr & PAGE_MASK,
> - PAGE_ALIGN(addr + size) - 1,
> - addr & PAGE_MASK);
> + res = map_mmio_regions(d,
> + paddr_to_pfn(addr & PAGE_MASK),
> + paddr_to_pfn(PAGE_ALIGN(addr + size - 1)),
> + paddr_to_pfn(addr & PAGE_MASK));
> if ( res )
> {
> printk(XENLOG_ERR "Unable to map 0x%"PRIx64
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index 074624e..55354d4 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -882,20 +882,23 @@ int gicv_setup(struct domain *d)
> * The second page is always mapped at +4K irrespective of the
> * GIC_64K_STRIDE quirk. The DTB passed to the guest reflects this.
> */
> - ret = map_mmio_regions(d, d->arch.vgic.cbase,
> - d->arch.vgic.cbase + PAGE_SIZE - 1,
> - gic.vbase);
> + ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase),
> + paddr_to_pfn(PAGE_ALIGN(d->arch.vgic.cbase +
> + PAGE_SIZE - 1)),
> + paddr_to_pfn(gic.vbase));
> if (ret)
> return ret;
>
> if ( !platform_has_quirk(PLATFORM_QUIRK_GIC_64K_STRIDE) )
> - ret = map_mmio_regions(d, d->arch.vgic.cbase + PAGE_SIZE,
> - d->arch.vgic.cbase + (2 * PAGE_SIZE) - 1,
> - gic.vbase + PAGE_SIZE);
> + ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase +
> PAGE_SIZE),
> + paddr_to_pfn(PAGE_ALIGN(d->arch.vgic.cbase +
> + (2 * PAGE_SIZE) - 1)),
> + paddr_to_pfn(gic.vbase + PAGE_SIZE));
> else
> - ret = map_mmio_regions(d, d->arch.vgic.cbase + PAGE_SIZE,
> - d->arch.vgic.cbase + (2 * PAGE_SIZE) - 1,
> - gic.vbase + 16*PAGE_SIZE);
> + ret = map_mmio_regions(d, paddr_to_pfn(d->arch.vgic.cbase +
> PAGE_SIZE),
> + paddr_to_pfn(PAGE_ALIGN(d->arch.vgic.cbase +
> + (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 bb0db16..c8e77b9 100644
> --- a/xen/arch/arm/p2m.c
> +++ b/xen/arch/arm/p2m.c
> @@ -469,12 +469,15 @@ int p2m_populate_ram(struct domain *d,
> }
>
> int map_mmio_regions(struct domain *d,
> - paddr_t start_gaddr,
> - paddr_t end_gaddr,
> - paddr_t maddr)
> + unsigned long start_gfn,
> + unsigned long end_gfn,
> + unsigned long mfn)
> {
> - return apply_p2m_changes(d, INSERT, start_gaddr, end_gaddr,
> - maddr, MATTR_DEV, p2m_mmio_direct);
> + return apply_p2m_changes(d, INSERT,
> + pfn_to_paddr(start_gfn),
> + pfn_to_paddr(end_gfn),
> + pfn_to_paddr(mfn),
> + MATTR_DEV, p2m_mmio_direct);
> }
This doesn't make any sense. Shouldn't you modify apply_p2m_changes to
take pfns as parameters too?
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |