[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.