[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH for-4.9] xen/arm: p2m: Fix incorrect mapping of superpages



On Fri, 19 May 2017, Julien Grall wrote:
> The same set of functions is used to set as well as to clean P2M
> entries, except for clean operations (INVALID_MFN ~0UL) is passed as a
> parameter. Unfortunately, when calculating an appropriate target order
> for a particular mapping INVALID_MFN is taken into account which leads
> to 4K page target order being set each time even for 2MB and 1GB
> mappings.
> 
> This will result to break down the superpage into 4K mappings and leave
> empty tables allocated.
> 
> This was introduced by commit 2ef3e36ec7 "xen/arm: p2m: Introduce
> p2m_set_entry and __p2m_set_entry".
> 
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>

Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>


> ---
> This patch is a candidate for Xen 4.9 and also backporting to Xen 4.8.
> Without this patch, removing superpage mapping (2MB, 1GB) will breakdown
> into 4K mapping first then remove 4K by 4K.
> ---
>  xen/arch/arm/p2m.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/xen/arch/arm/p2m.c b/xen/arch/arm/p2m.c
> index 34d57760d7..752e948070 100644
> --- a/xen/arch/arm/p2m.c
> +++ b/xen/arch/arm/p2m.c
> @@ -1005,12 +1005,18 @@ int p2m_set_entry(struct p2m_domain *p2m,
>  
>      while ( nr )
>      {
> +        unsigned long mask;
> +        unsigned long order;
> +
>          /*
> +         * Don't take into account the MFN when removing mapping (i.e
> +         * MFN_INVALID) to calculate the correct target order.
> +         *
>           * XXX: Support superpage mappings if nr is not aligned to a
>           * superpage size.
>           */
> -        unsigned long mask = gfn_x(sgfn) | mfn_x(smfn) | nr;
> -        unsigned long order;
> +        mask = !mfn_eq(smfn, INVALID_MFN) ? mfn_x(smfn) : 0;
> +        mask |= gfn_x(sgfn) | nr;
>  
>          /* Always map 4k by 4k when memaccess is enabled */
>          if ( unlikely(p2m->mem_access_enabled) )
> -- 
> 2.11.0
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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