tree:   https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git 
willy-maple
head:   7e346d2845b4bd77663394f39fa70456e0084c86
commit: 33a8e095b173365f8adf8cb7fda5224d514f0359 [166/202] ipc/shm: Stop using 
the vma linked list
config: c6x-allyesconfig (attached as .config)
compiler: c6x-elf-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git/commit/?id=33a8e095b173365f8adf8cb7fda5224d514f0359
        git remote add rcu 
https://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
        git fetch --no-tags rcu willy-maple
        git checkout 33a8e095b173365f8adf8cb7fda5224d514f0359
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=c6x 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/mm_types.h:11,
                    from include/linux/mmzone.h:21,
                    from include/linux/gfp.h:6,
                    from include/linux/slab.h:15,
                    from ipc/shm.c:28:
   include/linux/maple_tree.h:79:22: error: 'MAPLE_RANGE64_SLOTS' undeclared 
here (not in a function)
      79 |  unsigned long pivot[MAPLE_RANGE64_SLOTS - 1];
         |                      ^~~~~~~~~~~~~~~~~~~
   include/linux/maple_tree.h:85:22: error: 'MAPLE_ARANGE64_SLOTS' undeclared 
here (not in a function)
      85 |  unsigned long pivot[MAPLE_ARANGE64_SLOTS - 1];
         |                      ^~~~~~~~~~~~~~~~~~~~
   include/linux/maple_tree.h:91:28: error: 'MAPLE_NODE_SLOTS' undeclared here 
(not in a function); did you mean 'MAPLE_ALLOC_SLOTS'?
      91 | #define MAPLE_ALLOC_SLOTS (MAPLE_NODE_SLOTS - 1)
         |                            ^~~~~~~~~~~~~~~~
   include/linux/maple_tree.h:96:27: note: in expansion of macro 
'MAPLE_ALLOC_SLOTS'
      96 |  struct maple_alloc *slot[MAPLE_ALLOC_SLOTS];
         |                           ^~~~~~~~~~~~~~~~~
   In file included from ipc/shm.c:29:
   include/linux/mm.h:2595:6: warning: no previous prototype for 
'mm_populate_vma' [-Wmissing-prototypes]
    2595 | void mm_populate_vma(struct vm_area_struct *vma, unsigned long start,
         |      ^~~~~~~~~~~~~~~
   ipc/shm.c: In function 'ksys_shmdt':
>> ipc/shm.c:1717:18: error: 'mas' undeclared (first use in this function); did 
>> you mean 'max'?
    1717 |  vma = mas_walk(&mas);
         |                  ^~~
         |                  max
   ipc/shm.c:1717:18: note: each undeclared identifier is reported only once 
for each function it appears in


vim +1717 ipc/shm.c

  1636  
  1637          if (addr & ~PAGE_MASK)
  1638                  return retval;
  1639  
  1640          if (mmap_write_lock_killable(mm))
  1641                  return -EINTR;
  1642  
  1643          /*
  1644           * This function tries to be smart and unmap shm segments that
  1645           * were modified by partial mlock or munmap calls:
  1646           * - It first determines the size of the shm segment that 
should be
  1647           *   unmapped: It searches for a vma that is backed by shm and 
that
  1648           *   started at address shmaddr. It records it's size and then 
unmaps
  1649           *   it.
  1650           * - Then it unmaps all shm vmas that started at shmaddr and 
that
  1651           *   are within the initially determined size and that are from 
the
  1652           *   same shm segment from which we determined the size.
  1653           * Errors from do_munmap are ignored: the function only fails if
  1654           * it's called with invalid parameters or if it's called to 
unmap
  1655           * a part of a vma. Both calls in this function are for full 
vmas,
  1656           * the parameters are directly copied from the vma itself and 
always
  1657           * valid - therefore do_munmap cannot fail. (famous last words?)
  1658           */
  1659          /*
  1660           * If it had been mremap()'d, the starting address would not
  1661           * match the usual checks anyway. So assume all vma's are
  1662           * above the starting address given.
  1663           */
  1664  
  1665  #ifdef CONFIG_MMU
  1666          vma = mas_find(&mas, ULONG_MAX);
  1667          while (vma) {
  1668                  next = mas_find(&mas, ULONG_MAX);
  1669  
  1670                  /*
  1671                   * Check if the starting address would match, i.e. it's
  1672                   * a fragment created by mprotect() and/or munmap(), or 
it
  1673                   * otherwise it starts at this address with no hassles.
  1674                   */
  1675                  if ((vma->vm_ops == &shm_vm_ops) &&
  1676                          (vma->vm_start - addr)/PAGE_SIZE == 
vma->vm_pgoff) {
  1677  
  1678                          /*
  1679                           * Record the file of the shm segment being
  1680                           * unmapped.  With mremap(), someone could place
  1681                           * page from another segment but with equal 
offsets
  1682                           * in the range we are unmapping.
  1683                           */
  1684                          file = vma->vm_file;
  1685                          size = i_size_read(file_inode(vma->vm_file));
  1686                          do_munmap(mm, vma->vm_start, vma->vm_end - 
vma->vm_start, NULL);
  1687                          /*
  1688                           * We discovered the size of the shm segment, so
  1689                           * break out of here and fall through to the 
next
  1690                           * loop that uses the size information to stop
  1691                           * searching for matching vma's.
  1692                           */
  1693                          retval = 0;
  1694                          vma = next;
  1695                          break;
  1696                  }
  1697                  vma = next;
  1698          }
  1699  
  1700          /*
  1701           * We need look no further than the maximum address a fragment
  1702           * could possibly have landed at. Also cast things to loff_t to
  1703           * prevent overflows and make comparisons vs. equal-width types.
  1704           */
  1705          size = PAGE_ALIGN(size);
  1706          while (vma && (loff_t)(vma->vm_end - addr) <= size) {
  1707                  /* finding a matching vma now does not alter retval */
  1708                  if ((vma->vm_ops == &shm_vm_ops) &&
  1709                      ((vma->vm_start - addr)/PAGE_SIZE == vma->vm_pgoff) 
&&
  1710                      (vma->vm_file == file))
  1711                          do_munmap(mm, vma->vm_start, vma->vm_end - 
vma->vm_start, NULL);
  1712  
  1713                  vma = mas_find(&mas, addr + size - 1);
  1714          }
  1715  
  1716  #else   /* CONFIG_MMU */
> 1717          vma = mas_walk(&mas);
  1718          /* under NOMMU conditions, the exact address to be destroyed 
must be
  1719           * given
  1720           */
  1721          if (vma && vma->vm_ops == &shm_vm_ops) {
  1722                  do_munmap(mm, vma->vm_start, vma->vm_end - 
vma->vm_start, NULL);
  1723                  retval = 0;
  1724          }
  1725  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to