Hi "Matthew,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on tip/x86/core]
[also build test ERROR on arm64/for-next/core powerpc/next s390/features 
linus/master v5.16-rc5]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Matthew-Wilcox-Oracle/Convert-vmcore-to-use-an-iov_iter/20211213-080748
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 
e463a09af2f0677b9485a7e8e4e70b396b2ffb6f
config: riscv-randconfig-r012-20211213 
(https://download.01.org/0day-ci/archive/20211213/[email protected]/config)
compiler: riscv64-linux-gcc (GCC) 11.2.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://github.com/0day-ci/linux/commit/687563a8e516282784ed87ca7ed3eca900b42192
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Matthew-Wilcox-Oracle/Convert-vmcore-to-use-an-iov_iter/20211213-080748
        git checkout 687563a8e516282784ed87ca7ed3eca900b42192
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross 
O=build_dir ARCH=riscv SHELL=/bin/bash fs/proc/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>

All errors (new ones prefixed by >>):

   fs/proc/vmcore.c:135:9: warning: no previous prototype for 
'read_from_oldmem_iter' [-Wmissing-prototypes]
     135 | ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count,
         |         ^~~~~~~~~~~~~~~~~~~~~
   fs/proc/vmcore.c: In function 'read_from_oldmem_iter':
   fs/proc/vmcore.c:157:31: error: implicit declaration of function 
'iov_iter_zero' [-Werror=implicit-function-declaration]
     157 |                         tmp = iov_iter_zero(nr_bytes, iter);
         |                               ^~~~~~~~~~~~~
   fs/proc/vmcore.c: In function 'read_from_oldmem':
   fs/proc/vmcore.c:187:25: error: storage size of 'iter' isn't known
     187 |         struct iov_iter iter;
         |                         ^~~~
   fs/proc/vmcore.c:188:22: error: storage size of 'iov' isn't known
     188 |         struct iovec iov;
         |                      ^~~
   fs/proc/vmcore.c:189:21: error: storage size of 'kvec' isn't known
     189 |         struct kvec kvec;
         |                     ^~~~
   fs/proc/vmcore.c:194:17: error: implicit declaration of function 
'iov_iter_init'; did you mean 'klist_iter_init'? 
[-Werror=implicit-function-declaration]
     194 |                 iov_iter_init(&iter, READ, &iov, 1, count);
         |                 ^~~~~~~~~~~~~
         |                 klist_iter_init
   fs/proc/vmcore.c:198:17: error: implicit declaration of function 
'iov_iter_kvec' [-Werror=implicit-function-declaration]
     198 |                 iov_iter_kvec(&iter, READ, &kvec, 1, count);
         |                 ^~~~~~~~~~~~~
   fs/proc/vmcore.c:189:21: warning: unused variable 'kvec' [-Wunused-variable]
     189 |         struct kvec kvec;
         |                     ^~~~
   fs/proc/vmcore.c:188:22: warning: unused variable 'iov' [-Wunused-variable]
     188 |         struct iovec iov;
         |                      ^~~
   fs/proc/vmcore.c:187:25: warning: unused variable 'iter' [-Wunused-variable]
     187 |         struct iov_iter iter;
         |                         ^~~~
   fs/proc/vmcore.c: In function '__read_vmcore':
>> fs/proc/vmcore.c:337:17: error: invalid use of undefined type 'struct 
>> iov_iter'
     337 |         if (iter->count == 0 || *fpos >= vmcore_size)
         |                 ^~
   fs/proc/vmcore.c:341:17: error: invalid use of undefined type 'struct 
iov_iter'
     341 |         if (iter->count > vmcore_size - *fpos)
         |                 ^~
   fs/proc/vmcore.c:342:21: error: invalid use of undefined type 'struct 
iov_iter'
     342 |                 iter->count = vmcore_size - *fpos;
         |                     ^~
   In file included from include/linux/kernel.h:17,
                    from include/linux/cpumask.h:10,
                    from include/linux/smp.h:13,
                    from include/linux/lockdep.h:14,
                    from include/linux/spinlock.h:62,
                    from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:6,
                    from include/linux/mm.h:10,
                    from fs/proc/vmcore.c:11:
   fs/proc/vmcore.c:346:62: error: invalid use of undefined type 'struct 
iov_iter'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                                                              ^~
   include/linux/minmax.h:20:46: note: in definition of macro '__typecheck'
      20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
         |                                              ^
   include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |                               ^~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:346:23: note: in expansion of macro 'min'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                       ^~~
   In file included from arch/riscv/include/asm/bug.h:10,
                    from include/linux/bug.h:5,
                    from include/linux/mmdebug.h:5,
                    from include/linux/mm.h:9,
                    from fs/proc/vmcore.c:11:
   fs/proc/vmcore.c:346:62: error: invalid use of undefined type 'struct 
iov_iter'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                                                              ^~
   include/linux/const.h:12:55: note: in definition of macro '__is_constexpr'
      12 |         (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : 
(int *)8)))
         |                                                       ^
   include/linux/minmax.h:26:39: note: in expansion of macro '__no_side_effects'
      26 |                 (__typecheck(x, y) && __no_side_effects(x, y))
         |                                       ^~~~~~~~~~~~~~~~~
   include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |                               ^~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:346:23: note: in expansion of macro 'min'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                       ^~~
   In file included from include/linux/kernel.h:17,
                    from include/linux/cpumask.h:10,
                    from include/linux/smp.h:13,
                    from include/linux/lockdep.h:14,
                    from include/linux/spinlock.h:62,
                    from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:6,
                    from include/linux/mm.h:10,
                    from fs/proc/vmcore.c:11:
   fs/proc/vmcore.c:346:62: error: invalid use of undefined type 'struct 
iov_iter'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                                                              ^~
   include/linux/minmax.h:28:34: note: in definition of macro '__cmp'
      28 | #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
         |                                  ^
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:346:23: note: in expansion of macro 'min'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                       ^~~
   fs/proc/vmcore.c:346:62: error: invalid use of undefined type 'struct 
iov_iter'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                                                              ^~
   include/linux/minmax.h:28:46: note: in definition of macro '__cmp'
      28 | #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
         |                                              ^
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:346:23: note: in expansion of macro 'min'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                       ^~~
   fs/proc/vmcore.c:346:62: error: invalid use of undefined type 'struct 
iov_iter'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                                                              ^~
   include/linux/minmax.h:32:24: note: in definition of macro '__cmp_once'
      32 |                 typeof(y) unique_y = (y);               \
         |                        ^
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:346:23: note: in expansion of macro 'min'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                       ^~~
   fs/proc/vmcore.c:346:62: error: invalid use of undefined type 'struct 
iov_iter'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                                                              ^~
   include/linux/minmax.h:32:39: note: in definition of macro '__cmp_once'
      32 |                 typeof(y) unique_y = (y);               \
         |                                       ^
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:346:23: note: in expansion of macro 'min'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                       ^~~
   include/linux/minmax.h:36:9: error: first argument to 
'__builtin_choose_expr' not a constant
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |         ^~~~~~~~~~~~~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:346:23: note: in expansion of macro 'min'
     346 |                 tsz = min(elfcorebuf_sz - (size_t)*fpos, 
iter->count);
         |                       ^~~
>> fs/proc/vmcore.c:347:21: error: implicit declaration of function 
>> 'copy_to_iter'; did you mean 'copy_to_user'? 
>> [-Werror=implicit-function-declaration]
     347 |                 if (copy_to_iter(elfcorebuf + *fpos, tsz, iter) < 
tsz)
         |                     ^~~~~~~~~~~~
         |                     copy_to_user
   fs/proc/vmcore.c:353:25: error: invalid use of undefined type 'struct 
iov_iter'
     353 |                 if (iter->count == 0)
         |                         ^~
   In file included from include/linux/kernel.h:17,
                    from include/linux/cpumask.h:10,
                    from include/linux/smp.h:13,
                    from include/linux/lockdep.h:14,
                    from include/linux/spinlock.h:62,
                    from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:6,
                    from include/linux/mm.h:10,
                    from fs/proc/vmcore.c:11:
   fs/proc/vmcore.c:389:76: error: invalid use of undefined type 'struct 
iov_iter'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                                                                      
      ^~
   include/linux/minmax.h:20:46: note: in definition of macro '__typecheck'
      20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
         |                                              ^
   include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |                               ^~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:389:23: note: in expansion of macro 'min'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                       ^~~
   In file included from arch/riscv/include/asm/bug.h:10,
                    from include/linux/bug.h:5,
                    from include/linux/mmdebug.h:5,
                    from include/linux/mm.h:9,
                    from fs/proc/vmcore.c:11:
   fs/proc/vmcore.c:389:76: error: invalid use of undefined type 'struct 
iov_iter'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                                                                      
      ^~
   include/linux/const.h:12:55: note: in definition of macro '__is_constexpr'
      12 |         (sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : 
(int *)8)))
         |                                                       ^
   include/linux/minmax.h:26:39: note: in expansion of macro '__no_side_effects'
      26 |                 (__typecheck(x, y) && __no_side_effects(x, y))
         |                                       ^~~~~~~~~~~~~~~~~
   include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
      36 |         __builtin_choose_expr(__safe_cmp(x, y), \
         |                               ^~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:389:23: note: in expansion of macro 'min'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                       ^~~
   In file included from include/linux/kernel.h:17,
                    from include/linux/cpumask.h:10,
                    from include/linux/smp.h:13,
                    from include/linux/lockdep.h:14,
                    from include/linux/spinlock.h:62,
                    from include/linux/mmzone.h:8,
                    from include/linux/gfp.h:6,
                    from include/linux/mm.h:10,
                    from fs/proc/vmcore.c:11:
   fs/proc/vmcore.c:389:76: error: invalid use of undefined type 'struct 
iov_iter'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                                                                      
      ^~
   include/linux/minmax.h:28:34: note: in definition of macro '__cmp'
      28 | #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
         |                                  ^
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:389:23: note: in expansion of macro 'min'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                       ^~~
   fs/proc/vmcore.c:389:76: error: invalid use of undefined type 'struct 
iov_iter'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                                                                      
      ^~
   include/linux/minmax.h:28:46: note: in definition of macro '__cmp'
      28 | #define __cmp(x, y, op) ((x) op (y) ? (x) : (y))
         |                                              ^
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:389:23: note: in expansion of macro 'min'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                       ^~~
   fs/proc/vmcore.c:389:76: error: invalid use of undefined type 'struct 
iov_iter'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                                                                      
      ^~
   include/linux/minmax.h:32:24: note: in definition of macro '__cmp_once'
      32 |                 typeof(y) unique_y = (y);               \
         |                        ^
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
      45 | #define min(x, y)       __careful_cmp(x, y, <)
         |                         ^~~~~~~~~~~~~
   fs/proc/vmcore.c:389:23: note: in expansion of macro 'min'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);
         |                       ^~~
   fs/proc/vmcore.c:389:76: error: invalid use of undefined type 'struct 
iov_iter'
     389 |                 tsz = min(elfcorebuf_sz + elfnotes_sz - 
(size_t)*fpos, iter->count);


vim +337 fs/proc/vmcore.c

   326  
   327  /* Read from the ELF header and then the crash dump. On error, negative 
value is
   328   * returned otherwise number of bytes read are returned.
   329   */
   330  static ssize_t __read_vmcore(struct iov_iter *iter, loff_t *fpos)
   331  {
   332          ssize_t acc = 0, tmp;
   333          size_t tsz;
   334          u64 start;
   335          struct vmcore *m = NULL;
   336  
 > 337          if (iter->count == 0 || *fpos >= vmcore_size)
   338                  return 0;
   339  
   340          /* trim iter to not go beyond EOF */
   341          if (iter->count > vmcore_size - *fpos)
   342                  iter->count = vmcore_size - *fpos;
   343  
   344          /* Read ELF core header */
   345          if (*fpos < elfcorebuf_sz) {
   346                  tsz = min(elfcorebuf_sz - (size_t)*fpos, iter->count);
 > 347                  if (copy_to_iter(elfcorebuf + *fpos, tsz, iter) < tsz)
   348                          return -EFAULT;
   349                  *fpos += tsz;
   350                  acc += tsz;
   351  
   352                  /* leave now if filled buffer already */
   353                  if (iter->count == 0)
   354                          return acc;
   355          }
   356  
   357          /* Read Elf note segment */
   358          if (*fpos < elfcorebuf_sz + elfnotes_sz) {
   359                  void *kaddr;
   360  
   361                  /* We add device dumps before other elf notes because 
the
   362                   * other elf notes may not fill the elf notes buffer
   363                   * completely and we will end up with zero-filled data
   364                   * between the elf notes and the device dumps. Tools 
will
   365                   * then try to decode this zero-filled data as valid 
notes
   366                   * and we don't want that. Hence, adding device dumps 
before
   367                   * the other elf notes ensure that zero-filled data can 
be
   368                   * avoided.
   369                   */
   370  #ifdef CONFIG_PROC_VMCORE_DEVICE_DUMP
   371                  /* Read device dumps */
   372                  if (*fpos < elfcorebuf_sz + vmcoredd_orig_sz) {
   373                          tsz = min(elfcorebuf_sz + vmcoredd_orig_sz -
   374                                    (size_t)*fpos, iter->count);
   375                          start = *fpos - elfcorebuf_sz;
   376                          if (vmcoredd_copy_dumps(iter, start, tsz))
   377                                  return -EFAULT;
   378  
   379                          *fpos += tsz;
   380                          acc += tsz;
   381  
   382                          /* leave now if filled buffer already */
   383                          if (!iter->count)
   384                                  return acc;
   385                  }
   386  #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */
   387  
   388                  /* Read remaining elf notes */
   389                  tsz = min(elfcorebuf_sz + elfnotes_sz - (size_t)*fpos, 
iter->count);
   390                  kaddr = elfnotes_buf + *fpos - elfcorebuf_sz - 
vmcoredd_orig_sz;
   391                  if (copy_to_iter(kaddr, tsz, iter) < tsz)
   392                          return -EFAULT;
   393  
   394                  *fpos += tsz;
   395                  acc += tsz;
   396  
   397                  /* leave now if filled buffer already */
   398                  if (iter->count == 0)
   399                          return acc;
   400          }
   401  
   402          list_for_each_entry(m, &vmcore_list, list) {
   403                  if (*fpos < m->offset + m->size) {
   404                          tsz = (size_t)min_t(unsigned long long,
   405                                              m->offset + m->size - *fpos,
   406                                              iter->count);
   407                          start = m->paddr + *fpos - m->offset;
   408                          tmp = read_from_oldmem_iter(iter, tsz, &start,
   409                                          
cc_platform_has(CC_ATTR_MEM_ENCRYPT));
   410                          if (tmp < 0)
   411                                  return tmp;
   412                          *fpos += tsz;
   413                          acc += tsz;
   414  
   415                          /* leave now if filled buffer already */
   416                          if (iter->count == 0)
   417                                  return acc;
   418                  }
   419          }
   420  
   421          return acc;
   422  }
   423  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to