Hi Keith,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.19-rc4 next-20180921]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Keith-Busch/mm-gup_benchmark-Time-put_page/20180921-223159
config: x86_64-kexec (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   mm/gup.c: In function 'follow_pmd_mask':
>> mm/gup.c:233:32: error: macro "follow_huge_pd" passed 5 arguments, but takes 
>> just 3
              ctx->flags, PMD_SHIFT);
                                   ^
>> mm/gup.c:231:10: error: 'follow_huge_pd' undeclared (first use in this 
>> function); did you mean 'follow_page_pte'?
      page = follow_huge_pd(ctx->vma, ctx->address,
             ^~~~~~~~~~~~~~
             follow_page_pte
   mm/gup.c:231:10: note: each undeclared identifier is reported only once for 
each function it appears in
   mm/gup.c: In function 'follow_pud_mask':
   mm/gup.c:333:32: error: macro "follow_huge_pd" passed 5 arguments, but takes 
just 3
              ctx->flags, PUD_SHIFT);
                                   ^
   mm/gup.c:331:10: error: 'follow_huge_pd' undeclared (first use in this 
function); did you mean 'follow_page_pte'?
      page = follow_huge_pd(ctx->vma, ctx->address,
             ^~~~~~~~~~~~~~
             follow_page_pte
   mm/gup.c: In function 'follow_p4d_mask':
   mm/gup.c:366:32: error: macro "follow_huge_pd" passed 5 arguments, but takes 
just 3
              ctx->flags, P4D_SHIFT);
                                   ^
   mm/gup.c:364:10: error: 'follow_huge_pd' undeclared (first use in this 
function); did you mean 'follow_page_pte'?
      page = follow_huge_pd(ctx->vma, ctx->address,
             ^~~~~~~~~~~~~~
             follow_page_pte
   mm/gup.c: In function 'follow_page_mask':
   mm/gup.c:414:34: error: macro "follow_huge_pd" passed 5 arguments, but takes 
just 3
              ctx->flags, PGDIR_SHIFT);
                                     ^
   mm/gup.c:412:10: error: 'follow_huge_pd' undeclared (first use in this 
function); did you mean 'follow_page_pte'?
      page = follow_huge_pd(ctx->vma, ctx->address,
             ^~~~~~~~~~~~~~
             follow_page_pte

vim +/follow_huge_pd +233 mm/gup.c

   208  
   209  static struct page *follow_pmd_mask(struct follow_page_context *ctx, 
pud_t *pudp)
   210  {
   211          pmd_t *pmd, pmdval;
   212          spinlock_t *ptl;
   213          struct page *page;
   214          struct mm_struct *mm = ctx->vma->vm_mm;
   215  
   216          pmd = pmd_offset(pudp, ctx->address);
   217          /*
   218           * The READ_ONCE() will stabilize the pmdval in a register or
   219           * on the stack so that it will stop changing under the code.
   220           */
   221          pmdval = READ_ONCE(*pmd);
   222          if (pmd_none(pmdval))
   223                  return no_page_table(ctx);
   224          if (pmd_huge(pmdval) && ctx->vma->vm_flags & VM_HUGETLB) {
   225                  page = follow_huge_pmd(mm, ctx->address, pmd, 
ctx->flags);
   226                  if (page)
   227                          return page;
   228                  return no_page_table(ctx);
   229          }
   230          if (is_hugepd(__hugepd(pmd_val(pmdval)))) {
 > 231                  page = follow_huge_pd(ctx->vma, ctx->address,
   232                                        __hugepd(pmd_val(pmdval)),
 > 233                                        ctx->flags, PMD_SHIFT);
   234                  if (page)
   235                          return page;
   236                  return no_page_table(ctx);
   237          }
   238  retry:
   239          if (!pmd_present(pmdval)) {
   240                  if (likely(!(ctx->flags & FOLL_MIGRATION)))
   241                          return no_page_table(ctx);
   242                  VM_BUG_ON(thp_migration_supported() &&
   243                                    !is_pmd_migration_entry(pmdval));
   244                  if (is_pmd_migration_entry(pmdval))
   245                          pmd_migration_entry_wait(mm, pmd);
   246                  pmdval = READ_ONCE(*pmd);
   247                  /*
   248                   * MADV_DONTNEED may convert the pmd to null because
   249                   * mmap_sem is held in read mode
   250                   */
   251                  if (pmd_none(pmdval))
   252                          return no_page_table(ctx);
   253                  goto retry;
   254          }
   255          if (pmd_devmap(pmdval)) {
   256                  ptl = pmd_lock(mm, pmd);
   257                  page = follow_devmap_pmd(ctx, pmd);
   258                  spin_unlock(ptl);
   259                  if (page)
   260                          return page;
   261          }
   262          if (likely(!pmd_trans_huge(pmdval)))
   263                  return follow_page_pte(ctx, pmd);
   264  
   265          if ((ctx->flags & FOLL_NUMA) && pmd_protnone(pmdval))
   266                  return no_page_table(ctx);
   267  
   268  retry_locked:
   269          ptl = pmd_lock(mm, pmd);
   270          if (unlikely(pmd_none(*pmd))) {
   271                  spin_unlock(ptl);
   272                  return no_page_table(ctx);
   273          }
   274          if (unlikely(!pmd_present(*pmd))) {
   275                  spin_unlock(ptl);
   276                  if (likely(!(ctx->flags & FOLL_MIGRATION)))
   277                          return no_page_table(ctx);
   278                  pmd_migration_entry_wait(mm, pmd);
   279                  goto retry_locked;
   280          }
   281          if (unlikely(!pmd_trans_huge(*pmd))) {
   282                  spin_unlock(ptl);
   283                  return follow_page_pte(ctx, pmd);
   284          }
   285          if (ctx->flags & FOLL_SPLIT) {
   286                  int ret;
   287                  page = pmd_page(*pmd);
   288                  if (is_huge_zero_page(page)) {
   289                          spin_unlock(ptl);
   290                          ret = 0;
   291                          split_huge_pmd(ctx->vma, pmd, ctx->address);
   292                          if (pmd_trans_unstable(pmd))
   293                                  ret = -EBUSY;
   294                  } else {
   295                          get_page(page);
   296                          spin_unlock(ptl);
   297                          lock_page(page);
   298                          ret = split_huge_page(page);
   299                          unlock_page(page);
   300                          put_page(page);
   301                          if (pmd_none(*pmd))
   302                                  return no_page_table(ctx);
   303                  }
   304  
   305                  return ret ? ERR_PTR(ret) :
   306                          follow_page_pte(ctx, pmd);
   307          }
   308          page = follow_trans_huge_pmd(ctx->vma, ctx->address, pmd, 
ctx->flags);
   309          spin_unlock(ptl);
   310          ctx->page_mask = HPAGE_PMD_NR - 1;
   311          return page;
   312  }
   313  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to