tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   3cb60ee6323968b694208c4cbd56a7176396e931
commit: 87fa0f3eb267eed966ee194907bc15376c1b758f mm/filemap: rename 
generic_file_buffered_read to filemap_read
date:   8 days ago
config: powerpc-randconfig-r023-20210304 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 
eec7f8f7b1226be422a76542cb403d02538f453a)
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
        # install powerpc cross compiling tool for clang build
        # apt-get install binutils-powerpc-linux-gnu
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=87fa0f3eb267eed966ee194907bc15376c1b758f
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 87fa0f3eb267eed966ee194907bc15376c1b758f
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc 

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

All warnings (new ones prefixed by >>):

   In file included from mm/filemap.c:20:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:619:
   arch/powerpc/include/asm/io-defs.h:45:1: warning: performing pointer 
arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 
'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:224:1: note: expanded from here
   __do_insw
   ^
   arch/powerpc/include/asm/io.h:557:56: note: expanded from macro '__do_insw'
   #define __do_insw(p, b, n)      readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
                                          ~~~~~~~~~~~~~~~~~~~~~^
   In file included from mm/filemap.c:20:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:619:
   arch/powerpc/include/asm/io-defs.h:47:1: warning: performing pointer 
arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 
'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:228:1: note: expanded from here
   __do_insl
   ^
   arch/powerpc/include/asm/io.h:558:56: note: expanded from macro '__do_insl'
   #define __do_insl(p, b, n)      readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
                                          ~~~~~~~~~~~~~~~~~~~~~^
   In file included from mm/filemap.c:20:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:619:
   arch/powerpc/include/asm/io-defs.h:49:1: warning: performing pointer 
arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 
'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:232:1: note: expanded from here
   __do_outsb
   ^
   arch/powerpc/include/asm/io.h:559:58: note: expanded from macro '__do_outsb'
   #define __do_outsb(p, b, n)     writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
                                           ~~~~~~~~~~~~~~~~~~~~~^
   In file included from mm/filemap.c:20:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:619:
   arch/powerpc/include/asm/io-defs.h:51:1: warning: performing pointer 
arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 
'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:236:1: note: expanded from here
   __do_outsw
   ^
   arch/powerpc/include/asm/io.h:560:58: note: expanded from macro '__do_outsw'
   #define __do_outsw(p, b, n)     writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
                                           ~~~~~~~~~~~~~~~~~~~~~^
   In file included from mm/filemap.c:20:
   In file included from include/linux/kernel_stat.h:9:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:619:
   arch/powerpc/include/asm/io-defs.h:53:1: warning: performing pointer 
arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:616:3: note: expanded from macro 
'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:240:1: note: expanded from here
   __do_outsl
   ^
   arch/powerpc/include/asm/io.h:561:58: note: expanded from macro '__do_outsl'
   #define __do_outsl(p, b, n)     writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
                                           ~~~~~~~~~~~~~~~~~~~~~^
>> mm/filemap.c:2409:9: warning: stack frame size of 2704 bytes in function 
>> 'filemap_read' [-Wframe-larger-than=]
   ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter,
           ^
   13 warnings generated.


vim +/filemap_read +2409 mm/filemap.c

  2395  
  2396  /**
  2397   * filemap_read - Read data from the page cache.
  2398   * @iocb: The iocb to read.
  2399   * @iter: Destination for the data.
  2400   * @already_read: Number of bytes already read by the caller.
  2401   *
  2402   * Copies data from the page cache.  If the data is not currently 
present,
  2403   * uses the readahead and readpage address_space operations to fetch it.
  2404   *
  2405   * Return: Total number of bytes copied, including those already read by
  2406   * the caller.  If an error happens before any bytes are copied, returns
  2407   * a negative error number.
  2408   */
> 2409  ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter,
  2410                  ssize_t already_read)
  2411  {
  2412          struct file *filp = iocb->ki_filp;
  2413          struct file_ra_state *ra = &filp->f_ra;
  2414          struct address_space *mapping = filp->f_mapping;
  2415          struct inode *inode = mapping->host;
  2416          struct pagevec pvec;
  2417          int i, error = 0;
  2418          bool writably_mapped;
  2419          loff_t isize, end_offset;
  2420  
  2421          if (unlikely(iocb->ki_pos >= inode->i_sb->s_maxbytes))
  2422                  return 0;
  2423          if (unlikely(!iov_iter_count(iter)))
  2424                  return 0;
  2425  
  2426          iov_iter_truncate(iter, inode->i_sb->s_maxbytes);
  2427          pagevec_init(&pvec);
  2428  
  2429          do {
  2430                  cond_resched();
  2431  
  2432                  /*
  2433                   * If we've already successfully copied some data, then 
we
  2434                   * can no longer safely return -EIOCBQUEUED. Hence mark
  2435                   * an async read NOWAIT at that point.
  2436                   */
  2437                  if ((iocb->ki_flags & IOCB_WAITQ) && already_read)
  2438                          iocb->ki_flags |= IOCB_NOWAIT;
  2439  
  2440                  error = filemap_get_pages(iocb, iter, &pvec);
  2441                  if (error < 0)
  2442                          break;
  2443  
  2444                  /*
  2445                   * i_size must be checked after we know the pages are 
Uptodate.
  2446                   *
  2447                   * Checking i_size after the check allows us to 
calculate
  2448                   * the correct value for "nr", which means the 
zero-filled
  2449                   * part of the page is not copied back to userspace 
(unless
  2450                   * another truncate extends the file - this is desired 
though).
  2451                   */
  2452                  isize = i_size_read(inode);
  2453                  if (unlikely(iocb->ki_pos >= isize))
  2454                          goto put_pages;
  2455                  end_offset = min_t(loff_t, isize, iocb->ki_pos + 
iter->count);
  2456  
  2457                  /*
  2458                   * Once we start copying data, we don't want to be 
touching any
  2459                   * cachelines that might be contended:
  2460                   */
  2461                  writably_mapped = mapping_writably_mapped(mapping);
  2462  
  2463                  /*
  2464                   * When a sequential read accesses a page several 
times, only
  2465                   * mark it as accessed the first time.
  2466                   */
  2467                  if (iocb->ki_pos >> PAGE_SHIFT !=
  2468                      ra->prev_pos >> PAGE_SHIFT)
  2469                          mark_page_accessed(pvec.pages[0]);
  2470  
  2471                  for (i = 0; i < pagevec_count(&pvec); i++) {
  2472                          struct page *page = pvec.pages[i];
  2473                          size_t page_size = thp_size(page);
  2474                          size_t offset = iocb->ki_pos & (page_size - 1);
  2475                          size_t bytes = min_t(loff_t, end_offset - 
iocb->ki_pos,
  2476                                               page_size - offset);
  2477                          size_t copied;
  2478  
  2479                          if (end_offset < page_offset(page))
  2480                                  break;
  2481                          if (i > 0)
  2482                                  mark_page_accessed(page);
  2483                          /*
  2484                           * If users can be writing to this page using 
arbitrary
  2485                           * virtual addresses, take care about potential 
aliasing
  2486                           * before reading the page on the kernel side.
  2487                           */
  2488                          if (writably_mapped) {
  2489                                  int j;
  2490  
  2491                                  for (j = 0; j < thp_nr_pages(page); j++)
  2492                                          flush_dcache_page(page + j);
  2493                          }
  2494  
  2495                          copied = copy_page_to_iter(page, offset, bytes, 
iter);
  2496  
  2497                          already_read += copied;
  2498                          iocb->ki_pos += copied;
  2499                          ra->prev_pos = iocb->ki_pos;
  2500  
  2501                          if (copied < bytes) {
  2502                                  error = -EFAULT;
  2503                                  break;
  2504                          }
  2505                  }
  2506  put_pages:
  2507                  for (i = 0; i < pagevec_count(&pvec); i++)
  2508                          put_page(pvec.pages[i]);
  2509                  pagevec_reinit(&pvec);
  2510          } while (iov_iter_count(iter) && iocb->ki_pos < isize && 
!error);
  2511  
  2512          file_accessed(filp);
  2513  
  2514          return already_read ? already_read : error;
  2515  }
  2516  EXPORT_SYMBOL_GPL(filemap_read);
  2517  

---
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