|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v3 05/19] xen/arm: mm: Add support for the contiguous bit
Hi Julien,
> -----Original Message-----
> From: Xen-devel <xen-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of Julien
> Grall
> Sent: 2022年2月27日 3:30
> To: xen-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Julien Grall <jgrall@xxxxxxxxxx>; Stefano Stabellini
> <sstabellini@xxxxxxxxxx>; Bertrand Marquis <Bertrand.Marquis@xxxxxxx>;
> Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
> Subject: Re: [PATCH v3 05/19] xen/arm: mm: Add support for the contiguous bit
>
> Hi,
>
> On 21/02/2022 10:22, Julien Grall wrote:
> > @@ -1333,21 +1386,34 @@ static int xen_pt_update(unsigned long virt,
> > while ( left )
> > {
> > unsigned int order, level;
> > + unsigned int nr_contig;
> > + unsigned int new_flags;
> >
> > level = xen_pt_mapping_level(vfn, mfn, left, flags);
> > order = XEN_PT_LEVEL_ORDER(level);
> >
> > ASSERT(left >= BIT(order, UL));
> >
> > - rc = xen_pt_update_entry(root, pfn_to_paddr(vfn), mfn, level,
> > flags);
> > - if ( rc )
> > - break;
> > + /*
> > + * Check if we can set the contiguous mapping and update the
> > + * flags accordingly.
> > + */
> > + nr_contig = xen_pt_check_contig(vfn, mfn, level, left, flags);
> > + new_flags = flags | ((nr_contig > 1) ? _PAGE_CONTIG : 0);
> >
> > - vfn += 1U << order;
> > - if ( !mfn_eq(mfn, INVALID_MFN) )
> > - mfn = mfn_add(mfn, 1U << order);
> > + for ( ; nr_contig > 0; nr_contig-- )
> > + {
> > + rc = xen_pt_update_entry(root, pfn_to_paddr(vfn), mfn, level,
> > + new_flags);
> > + if ( rc )
> > + break;
> >
> > - left -= (1U << order);
> > + vfn += 1U << order;
> > + if ( !mfn_eq(mfn, INVALID_MFN) )
> > + mfn = mfn_add(mfn, 1U << order);
> > +
> > + left -= (1U << order);
> > + }
>
> I forgot to add:
>
> if ( rc )
> break;
>
> Without it, the outer loop will never exit in case of an error.
>
> Cheers,
>
> --
> Julien Grall
Yep, I am happy with that.
Reviewed-by: Hongda Deng <Hongda.Deng@xxxxxxx>
Cheers,
---
Hongda
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |