> On Feb 21, 2020, at 10:34 PM, Longpeng(Mike) <longpeng2@xxxxxxxxxx> wrote: > > diff --git a/mm/hugetlb.c b/mm/hugetlb.c > index dd8737a..90daf37 100644 > --- a/mm/hugetlb.c > +++ b/mm/hugetlb.c > @@ -4910,28 +4910,30 @@ pte_t *huge_pte_offset(struct mm_struct *mm, > { > pgd_t *pgd; > p4d_t *p4d; > - pud_t *pud; > - pmd_t *pmd; > + pud_t *pud, pud_entry; > + pmd_t *pmd, pmd_entry; > > pgd = pgd_offset(mm, addr); > - if (!pgd_present(*pgd)) > + if (!pgd_present(READ_ONCE(*pgd))) > return NULL; > p4d = p4d_offset(pgd, addr); > - if (!p4d_present(*p4d)) > + if (!p4d_present(READ_ONCE(*p4d))) > return NULL; What’s the point of READ_ONCE() on those two places?