On Tue, Oct 31, 2017 at 3:03 AM, Aneesh Kumar K.V <aneeshkumar.opensou...@gmail.com> wrote: > > > On 10/30/2017 06:08 PM, Balbir Singh wrote: >> >> + >> +static void pnv_npu2_invalidate_helper(struct npu_context *npu_context, >> + struct mm_struct *mm, unsigned long start, >> + unsigned long end, bool flush) >> +{ >> + unsigned long address; >> + bool is_thp; >> + unsigned int hshift, shift; >> + >> + address = start; >> + do { >> + local_irq_disable(); >> + find_linux_pte(mm->pgd, address, &is_thp, &hshift); >> + if (!is_thp) >> + shift = PAGE_SHIFT; >> + else >> + shift = hshift; > > > Is that correct? if is_thp is 0 can we derive shift from hshift? IIUC we set > hshift only > if it is a hugepage.
OK.. I assumed that it'll be set. So I've got to check for if (is_thp) shift = mmu_psize_defs[MMU_PAGE_2M].shift else if (hshift) shift = hshift else shift = PAGE_SHIFT > > >> + mmio_invalidate(npu_context, address > 0, address, flush, >> + shift); >> + local_irq_enable(); >> + address += (1ull << shift); >> + } while (address < end); >> } >> Thanks for the review! Balbir Singh.