On Sat, Mar 21, 2020 at 09:37:26AM +0100, Christoph Hellwig wrote: > On Fri, Mar 20, 2020 at 01:49:01PM -0300, Jason Gunthorpe wrote: > > +enum { > > + NEED_FAULT = 1 << 0, > > + NEED_WRITE_FAULT = 1 << 1, > > +}; > > Maybe add a HMM_ prefix? Yes, OK, the existing names are pretty generic > > for (i = 0; i < npages; ++i) { > > + required_fault |= > > + hmm_pte_need_fault(hmm_vma_walk, pfns[i], cpu_flags); > > + if (required_fault == (NEED_FAULT | NEED_WRITE_FAULT)) > > + return required_fault; > > No need for the inner braces. Techincally yes, but gcc demands them: mm/hmm.c:146:22: warning: suggest parentheses around comparison in operand of '|' [-Wparentheses] if (required_fault == NEED_FAULT | NEED_WRITE_FAULT) ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~ Probably because | vs || is a common confusion? Actually this whole NEED_FAULT | WRITE_FAULT thing is silly, I'm going to define NEED_WRITE_FAULT == NEED_FAULT | (1<<1) and add a NEED_ALL_BITS to make this clear what this test is for (early loop exit once there is no possible change to required_fault). > > @@ -532,17 +515,15 @@ static int hmm_vma_walk_test(unsigned long start, unsigned long end, > > */ > > if ((vma->vm_flags & (VM_IO | VM_PFNMAP | VM_MIXEDMAP)) || > > !(vma->vm_flags & VM_READ)) { > > - bool fault, write_fault; > > - > > No that there is no need for local variables I'd invert the test and > return early: This is more readable, I reworked the comment too Jason