|
[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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |