On Tue, Feb 13, 2024 at 04:48:50PM +0000, Ryan Roberts wrote:
> On 13/02/2024 16:43, Mark Rutland wrote:
> > On Fri, Feb 02, 2024 at 08:07:52AM +0000, Ryan Roberts wrote:

> >> +static inline void __clear_full_ptes(struct mm_struct *mm, unsigned long 
> >> addr,
> >> +                          pte_t *ptep, unsigned int nr, int full)
> >> +{
> >> +  for (;;) {
> >> +          __ptep_get_and_clear(mm, addr, ptep);
> >> +          if (--nr == 0)
> >> +                  break;
> >> +          ptep++;
> >> +          addr += PAGE_SIZE;
> >> +  }
> >> +}
> > 
> > The loop construct is a bit odd; can't this be:
> 
> I found it a little odd at first, but its avoiding the ptep and addr 
> increments
> the last time through the loop. Its the preferred pattern for these functions 
> in
> core-mm. See default set_ptes(), wrprotect_ptes(), clear_full_ptes() in
> include/linux/pgtable.h.
> 
> So I'd prefer to leave it as is so that we match them. What do you think?

That's fair enough; it I'm happy with it as-is.

Mark.

Reply via email to