All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Baoquan He <bhe@redhat.com>, Vivek Goyal <vgoyal@redhat.com>,
	Dave Young <dyoung@redhat.com>,
	kexec@lists.infradead.org
Cc: kbuild-all@lists.01.org,
	"Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Tiezhu Yang <yangtiezhu@loongson.cn>,
	linux-kernel@vger.kernel.org,
	Amit Daniel Kachhap <amit.kachhap@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-s390@vger.kernel.org
Subject: Re: [PATCH 2/3] vmcore: Convert __read_vmcore to use an iov_iter
Date: Mon, 13 Dec 2021 11:24:20 +0800	[thread overview]
Message-ID: <202112131103.3ExA0BMN-lkp@intel.com> (raw)
In-Reply-To: <20211213000636.2932569-3-willy@infradead.org>

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/202112131103.3ExA0BMN-lkp@intel.com/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 <lkp@intel.com>

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/kbuild-all@lists.01.org

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: "Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Baoquan He <bhe@redhat.com>, Vivek Goyal <vgoyal@redhat.com>,
	Dave Young <dyoung@redhat.com>,
	kexec@lists.infradead.org
Cc: kbuild-all@lists.01.org,
	"Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Tiezhu Yang <yangtiezhu@loongson.cn>,
	linux-kernel@vger.kernel.org,
	Amit Daniel Kachhap <amit.kachhap@arm.com>,
	Christoph Hellwig <hch@lst.de>,
	linux-s390@vger.kernel.org
Subject: Re: [PATCH 2/3] vmcore: Convert __read_vmcore to use an iov_iter
Date: Mon, 13 Dec 2021 11:24:20 +0800	[thread overview]
Message-ID: <202112131103.3ExA0BMN-lkp@intel.com> (raw)
In-Reply-To: <20211213000636.2932569-3-willy@infradead.org>

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/202112131103.3ExA0BMN-lkp@intel.com/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 <lkp@intel.com>

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/kbuild-all@lists.01.org

WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 2/3] vmcore: Convert __read_vmcore to use an iov_iter
Date: Mon, 13 Dec 2021 11:24:20 +0800	[thread overview]
Message-ID: <202112131103.3ExA0BMN-lkp@intel.com> (raw)
In-Reply-To: <20211213000636.2932569-3-willy@infradead.org>

[-- Attachment #1: Type: text/plain, Size: 21856 bytes --]

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/202112131103.3ExA0BMN-lkp(a)intel.com/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 <lkp@intel.com>

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/kbuild-all(a)lists.01.org

  reply	other threads:[~2021-12-13  3:24 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-13  0:06 [PATCH 0/3] Convert vmcore to use an iov_iter Matthew Wilcox (Oracle)
2021-12-13  0:06 ` Matthew Wilcox (Oracle)
2021-12-13  0:06 ` [PATCH 1/3] vmcore: Convert copy_oldmem_page() to take " Matthew Wilcox (Oracle)
2021-12-13  0:06   ` Matthew Wilcox (Oracle)
2021-12-13  1:34   ` Matthew Wilcox
2021-12-13  1:34     ` Matthew Wilcox
2021-12-13  2:33   ` kernel test robot
2021-12-13  2:33     ` kernel test robot
2021-12-13  2:33     ` kernel test robot
2021-12-13  7:57   ` Christoph Hellwig
2021-12-13  7:57     ` Christoph Hellwig
2021-12-16  9:28     ` Heiko Carstens
2021-12-16  9:28       ` Heiko Carstens
2021-12-13  0:06 ` [PATCH 2/3] vmcore: Convert __read_vmcore to use " Matthew Wilcox (Oracle)
2021-12-13  0:06   ` Matthew Wilcox (Oracle)
2021-12-13  3:24   ` kernel test robot [this message]
2021-12-13  3:24     ` kernel test robot
2021-12-13  3:24     ` kernel test robot
2021-12-13  8:00   ` Christoph Hellwig
2021-12-13  8:00     ` Christoph Hellwig
2021-12-13  0:06 ` [PATCH 3/3] vmcore: Convert read_from_oldmem() to take " Matthew Wilcox (Oracle)
2021-12-13  0:06   ` Matthew Wilcox (Oracle)
2021-12-13  4:04   ` kernel test robot
2021-12-13  4:04     ` kernel test robot
2021-12-13  4:04     ` kernel test robot
2021-12-13  8:02   ` Christoph Hellwig
2021-12-13  8:02     ` Christoph Hellwig
2021-12-13  9:29     ` Baoquan He
2021-12-13  9:29       ` Baoquan He
2021-12-13 13:42     ` Matthew Wilcox
2021-12-13 13:42       ` Matthew Wilcox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202112131103.3ExA0BMN-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=amit.kachhap@arm.com \
    --cc=bhe@redhat.com \
    --cc=dyoung@redhat.com \
    --cc=hch@lst.de \
    --cc=kbuild-all@lists.01.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=vgoyal@redhat.com \
    --cc=willy@infradead.org \
    --cc=yangtiezhu@loongson.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.