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

Re: [Xen-devel] [PATCH V10 5/5] p2m: change_type_range: Only invalidate mapped gfns



On 11/28/18 11:56 PM, Razvan Cojocaru wrote:
> change_range_type() invalidates gfn ranges to lazily change the type
> of a range of gfns, and also modifies the logdirty rangesets of that
> p2m. At the moment, it clips both down by the hostp2m.
> 
> While this will result in correct behavior, it's not entirely efficient,
> since invalidated entries outside that range will, on fault, simply be
> modified back to "empty" before faulting normally again.
> 
> Separate out the calculation of the two ranges.  Keep using the
> hostp2m's max_mapped_pfn to clip the logdirty ranges, but use the
> current p2m's max_mapped_pfn to further clip the invalidation range
> for alternate p2ms.
> 
> Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxx>
> Signed-off-by: Razvan Cojocaru <rcojocaru@xxxxxxxxxxxxxxx>
> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
> 
> ---
> CC: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> CC: Jan Beulich <jbeulich@xxxxxxxx>
> CC: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> CC: Wei Liu <wei.liu2@xxxxxxxxxx>
> CC: "Roger Pau Monné" <roger.pau@xxxxxxxxxx>
> 
> ---
> Changes since V9:
>  - Corrected function name in patch subject.
>  - Updated the patch to take into account the changes in the
>    previous two patches (no functional changes).
>  - Added Jan's Reviewed-by.
> ---
>  xen/arch/x86/mm/p2m.c | 55 
> ++++++++++++++++++++++++++++++++++++++-------------
>  1 file changed, 41 insertions(+), 14 deletions(-)
> 
> diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
> index fde2012..1907c29 100644
> --- a/xen/arch/x86/mm/p2m.c
> +++ b/xen/arch/x86/mm/p2m.c
> @@ -1007,8 +1007,10 @@ static void change_type_range(struct p2m_domain *p2m,
>                                unsigned long start, unsigned long end,
>                                p2m_type_t ot, p2m_type_t nt)
>  {
> +    unsigned long invalidate_start, invalidate_end;
>      struct domain *d = p2m->domain;
>      const unsigned long host_max_pfn = p2m_get_hostp2m(d)->max_mapped_pfn;
> +    const unsigned long max_pfn = p2m->max_mapped_pfn;
>      int rc = 0;
>  
>      --end;
> @@ -1017,9 +1019,18 @@ static void change_type_range(struct p2m_domain *p2m,
>          printk(XENLOG_G_WARNING "Dom%d logdirty rangeset clipped to 
> max_mapped_pfn\n",
>                 d->domain_id);
>  
> -    /* Always clip the rangeset down to the host p2m */
> +    /*
> +     * If we have an altp2m, the logdirty rangeset range needs to
> +     * match that of the hostp2m, but for efficiency, we want to clip
> +     * down the the invalidation range according to the mapped values
> +     * in the altp2m.  Keep track of and clip the ranges separately.
> +     */
> +     invalidate_start = start;
> +     invalidate_end   = end;
> +
> +     /* Clip down to the host p2m */
>      if ( unlikely(end > host_max_pfn) )
> -        end = host_max_pfn;
> +        end = invalidate_end = host_max_pfn;

Sorry, there seem to be some indentation issues that my editor has
missed here. If the patch is otherwise acceptable and these can't be
fixed on commit I'll resend a corrected version.


Thanks,
Razvan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

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