All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
@ 2022-04-08  9:06 ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: akpm, willy
  Cc: linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro, bhe

Copy the description of v3 cover letter from Willy:
===
For some reason several people have been sending bad patches to fix
compiler warnings in vmcore recently.  Here's how it should be done.
Compile-tested only on x86.  As noted in the first patch, s390 should
take this conversion a bit further, but I'm not inclined to do that
work myself.

V4:
[PATCH v4 0/3] Convert vmcore to use an iov_iter
https://lore.kernel.org/all/20220318093706.161534-1-bhe@redhat.com/T/#u

v3:
[PATCH v3 0/3] Convert vmcore to use an iov_iter
https://lore.kernel.org/all/20211213143927.3069508-1-willy@infradead.org/T/#u


Changelog:
===
v5 RESEND:
 - Add my own Signed-off-by, no code or log change related in this round.

v5:
 - Rebased on Linus's latest master branch.
 - Merge the patch 4 of v4 into patch 2.
v4:
 - Append one patch to replace the open code with iov_iter_count().
   This is suggested by Al.
 - Fix a indentation error by replacing space with tab in
   arch/sh/kernel/crash_dump.c of patch 1 reported by checkpatch. The
   rest of patch 1~3 are untouched.
 - Add Christopy's Reviewed-by and my Acked-by for patch 1~3.
v3:
 - Send the correct patches this time
v2:
 - Removed unnecessary kernel-doc
 - Included uio.h to fix compilation problems
 - Made read_from_oldmem_iter static to avoid compile warnings during the
   conversion
 - Use iov_iter_truncate() (Christoph)


Matthew Wilcox (Oracle) (3):
  vmcore: Convert copy_oldmem_page() to take an iov_iter
  vmcore: Convert __read_vmcore to use an iov_iter
  vmcore: Convert read_from_oldmem() to take an iov_iter

 arch/arm/kernel/crash_dump.c     |  27 +------
 arch/arm64/kernel/crash_dump.c   |  29 +------
 arch/ia64/kernel/crash_dump.c    |  32 +-------
 arch/mips/kernel/crash_dump.c    |  27 +------
 arch/powerpc/kernel/crash_dump.c |  35 ++-------
 arch/riscv/kernel/crash_dump.c   |  26 +------
 arch/s390/kernel/crash_dump.c    |  13 ++--
 arch/sh/kernel/crash_dump.c      |  29 ++-----
 arch/x86/kernel/crash_dump_32.c  |  29 +------
 arch/x86/kernel/crash_dump_64.c  |  48 ++++--------
 fs/proc/vmcore.c                 | 130 +++++++++++++------------------
 include/linux/crash_dump.h       |  19 ++---
 12 files changed, 123 insertions(+), 321 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
@ 2022-04-08  9:06 ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: kexec

Copy the description of v3 cover letter from Willy:
===
For some reason several people have been sending bad patches to fix
compiler warnings in vmcore recently.  Here's how it should be done.
Compile-tested only on x86.  As noted in the first patch, s390 should
take this conversion a bit further, but I'm not inclined to do that
work myself.

V4:
[PATCH v4 0/3] Convert vmcore to use an iov_iter
https://lore.kernel.org/all/20220318093706.161534-1-bhe at redhat.com/T/#u

v3:
[PATCH v3 0/3] Convert vmcore to use an iov_iter
https://lore.kernel.org/all/20211213143927.3069508-1-willy at infradead.org/T/#u


Changelog:
===
v5 RESEND:
 - Add my own Signed-off-by, no code or log change related in this round.

v5:
 - Rebased on Linus's latest master branch.
 - Merge the patch 4 of v4 into patch 2.
v4:
 - Append one patch to replace the open code with iov_iter_count().
   This is suggested by Al.
 - Fix a indentation error by replacing space with tab in
   arch/sh/kernel/crash_dump.c of patch 1 reported by checkpatch. The
   rest of patch 1~3 are untouched.
 - Add Christopy's Reviewed-by and my Acked-by for patch 1~3.
v3:
 - Send the correct patches this time
v2:
 - Removed unnecessary kernel-doc
 - Included uio.h to fix compilation problems
 - Made read_from_oldmem_iter static to avoid compile warnings during the
   conversion
 - Use iov_iter_truncate() (Christoph)


Matthew Wilcox (Oracle) (3):
  vmcore: Convert copy_oldmem_page() to take an iov_iter
  vmcore: Convert __read_vmcore to use an iov_iter
  vmcore: Convert read_from_oldmem() to take an iov_iter

 arch/arm/kernel/crash_dump.c     |  27 +------
 arch/arm64/kernel/crash_dump.c   |  29 +------
 arch/ia64/kernel/crash_dump.c    |  32 +-------
 arch/mips/kernel/crash_dump.c    |  27 +------
 arch/powerpc/kernel/crash_dump.c |  35 ++-------
 arch/riscv/kernel/crash_dump.c   |  26 +------
 arch/s390/kernel/crash_dump.c    |  13 ++--
 arch/sh/kernel/crash_dump.c      |  29 ++-----
 arch/x86/kernel/crash_dump_32.c  |  29 +------
 arch/x86/kernel/crash_dump_64.c  |  48 ++++--------
 fs/proc/vmcore.c                 | 130 +++++++++++++------------------
 include/linux/crash_dump.h       |  19 ++---
 12 files changed, 123 insertions(+), 321 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-08  9:06 ` Baoquan He
@ 2022-04-08  9:06   ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: akpm, willy
  Cc: linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro, bhe

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>

Instead of passing in a 'buf' and 'userbuf' argument, pass in an iov_iter.
s390 needs more work to pass the iov_iter down further, or refactor,
but I'd be more comfortable if someone who can test on s390 did that work.

It's more convenient to convert the whole of read_from_oldmem() to
take an iov_iter at the same time, so rename it to read_from_oldmem_iter()
and add a temporary read_from_oldmem() wrapper that creates an iov_iter.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/arm/kernel/crash_dump.c     | 27 +++-------------
 arch/arm64/kernel/crash_dump.c   | 29 +++--------------
 arch/ia64/kernel/crash_dump.c    | 32 +++----------------
 arch/mips/kernel/crash_dump.c    | 27 +++-------------
 arch/powerpc/kernel/crash_dump.c | 35 +++------------------
 arch/riscv/kernel/crash_dump.c   | 26 +++------------
 arch/s390/kernel/crash_dump.c    | 13 +++++---
 arch/sh/kernel/crash_dump.c      | 29 +++--------------
 arch/x86/kernel/crash_dump_32.c  | 29 +++--------------
 arch/x86/kernel/crash_dump_64.c  | 41 +++++++-----------------
 fs/proc/vmcore.c                 | 54 ++++++++++++++++++++------------
 include/linux/crash_dump.h       |  9 +++---
 12 files changed, 91 insertions(+), 260 deletions(-)

diff --git a/arch/arm/kernel/crash_dump.c b/arch/arm/kernel/crash_dump.c
index 53cb92435392..938bd932df9a 100644
--- a/arch/arm/kernel/crash_dump.c
+++ b/arch/arm/kernel/crash_dump.c
@@ -14,22 +14,10 @@
 #include <linux/crash_dump.h>
 #include <linux/uaccess.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is int he user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -40,14 +28,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user(buf, vaddr + offset, csize)) {
-			iounmap(vaddr);
-			return -EFAULT;
-		}
-	} else {
-		memcpy(buf, vaddr + offset, csize);
-	}
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	iounmap(vaddr);
 	return csize;
diff --git a/arch/arm64/kernel/crash_dump.c b/arch/arm64/kernel/crash_dump.c
index 58303a9ec32c..670e4ce81822 100644
--- a/arch/arm64/kernel/crash_dump.c
+++ b/arch/arm64/kernel/crash_dump.c
@@ -9,25 +9,11 @@
 #include <linux/crash_dump.h>
 #include <linux/errno.h>
 #include <linux/io.h>
-#include <linux/memblock.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <asm/memory.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is in a user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -38,14 +24,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, vaddr + offset, csize)) {
-			memunmap(vaddr);
-			return -EFAULT;
-		}
-	} else {
-		memcpy(buf, vaddr + offset, csize);
-	}
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	memunmap(vaddr);
 
diff --git a/arch/ia64/kernel/crash_dump.c b/arch/ia64/kernel/crash_dump.c
index 0ed3c3dee4cd..4ef68e2aa757 100644
--- a/arch/ia64/kernel/crash_dump.c
+++ b/arch/ia64/kernel/crash_dump.c
@@ -10,42 +10,18 @@
 #include <linux/errno.h>
 #include <linux/types.h>
 #include <linux/crash_dump.h>
-
+#include <linux/uio.h>
 #include <asm/page.h>
-#include <linux/uaccess.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- *
- * Calling copy_to_user() in atomic context is not desirable. Hence first
- * copying the data to a pre-allocated kernel page and then copying to user
- * space in non-atomic context.
- */
-ssize_t
-copy_oldmem_page(unsigned long pfn, char *buf,
-		size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+		size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 
 	if (!csize)
 		return 0;
 	vaddr = __va(pfn<<PAGE_SHIFT);
-	if (userbuf) {
-		if (copy_to_user(buf, (vaddr + offset), csize)) {
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, (vaddr + offset), csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	return csize;
 }
 
diff --git a/arch/mips/kernel/crash_dump.c b/arch/mips/kernel/crash_dump.c
index 2e50f55185a6..6e50f4902409 100644
--- a/arch/mips/kernel/crash_dump.c
+++ b/arch/mips/kernel/crash_dump.c
@@ -1,22 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0
 #include <linux/highmem.h>
 #include <linux/crash_dump.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 
@@ -24,14 +12,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 		return 0;
 
 	vaddr = kmap_local_pfn(pfn);
-
-	if (!userbuf) {
-		memcpy(buf, vaddr + offset, csize);
-	} else {
-		if (copy_to_user(buf, vaddr + offset, csize))
-			csize = -EFAULT;
-	}
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	kunmap_local(vaddr);
 
 	return csize;
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
index 5693e1c67c2b..32b4a97f1b79 100644
--- a/arch/powerpc/kernel/crash_dump.c
+++ b/arch/powerpc/kernel/crash_dump.c
@@ -16,7 +16,7 @@
 #include <asm/kdump.h>
 #include <asm/prom.h>
 #include <asm/firmware.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <asm/rtas.h>
 #include <asm/inst.h>
 
@@ -68,33 +68,8 @@ void __init setup_kdump_trampoline(void)
 }
 #endif /* CONFIG_NONSTATIC_KERNEL */
 
-static size_t copy_oldmem_vaddr(void *vaddr, char *buf, size_t csize,
-                               unsigned long offset, int userbuf)
-{
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, (vaddr + offset), csize))
-			return -EFAULT;
-	} else
-		memcpy(buf, (vaddr + offset), csize);
-
-	return csize;
-}
-
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *      space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *      otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 	phys_addr_t paddr;
@@ -107,10 +82,10 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 
 	if (memblock_is_region_memory(paddr, csize)) {
 		vaddr = __va(paddr);
-		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+		csize = copy_to_iter(vaddr + offset, csize, iter);
 	} else {
 		vaddr = ioremap_cache(paddr, PAGE_SIZE);
-		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+		csize = copy_to_iter(vaddr + offset, csize, iter);
 		iounmap(vaddr);
 	}
 
diff --git a/arch/riscv/kernel/crash_dump.c b/arch/riscv/kernel/crash_dump.c
index 86cc0ada5752..ea2158cee97b 100644
--- a/arch/riscv/kernel/crash_dump.c
+++ b/arch/riscv/kernel/crash_dump.c
@@ -7,22 +7,10 @@
 
 #include <linux/crash_dump.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is in a user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -33,13 +21,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, vaddr + offset, csize)) {
-			memunmap(vaddr);
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, vaddr + offset, csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	memunmap(vaddr);
 	return csize;
diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c
index 69819b765250..a2c1c55daec0 100644
--- a/arch/s390/kernel/crash_dump.c
+++ b/arch/s390/kernel/crash_dump.c
@@ -15,6 +15,7 @@
 #include <linux/slab.h>
 #include <linux/memblock.h>
 #include <linux/elf.h>
+#include <linux/uio.h>
 #include <asm/asm-offsets.h>
 #include <asm/os_info.h>
 #include <asm/elf.h>
@@ -212,8 +213,8 @@ static int copy_oldmem_user(void __user *dst, unsigned long src, size_t count)
 /*
  * Copy one page from "oldmem"
  */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
 	unsigned long src;
 	int rc;
@@ -221,10 +222,12 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
 	if (!csize)
 		return 0;
 	src = pfn_to_phys(pfn) + offset;
-	if (userbuf)
-		rc = copy_oldmem_user((void __force __user *) buf, src, csize);
+
+	/* XXX: pass the iov_iter down to a common function */
+	if (iter_is_iovec(iter))
+		rc = copy_oldmem_user(iter->iov->iov_base, src, csize);
 	else
-		rc = copy_oldmem_kernel((void *) buf, src, csize);
+		rc = copy_oldmem_kernel(iter->kvec->iov_base, src, csize);
 	return rc;
 }
 
diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
index 5b41b59698c1..19ce6a950aac 100644
--- a/arch/sh/kernel/crash_dump.c
+++ b/arch/sh/kernel/crash_dump.c
@@ -8,23 +8,11 @@
 #include <linux/errno.h>
 #include <linux/crash_dump.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 #include <linux/uaccess.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-                               size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void  __iomem *vaddr;
 
@@ -32,15 +20,8 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 		return 0;
 
 	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
-
-	if (userbuf) {
-		if (copy_to_user((void __user *)buf, (vaddr + offset), csize)) {
-			iounmap(vaddr);
-			return -EFAULT;
-		}
-	} else
-	memcpy(buf, (vaddr + offset), csize);
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	iounmap(vaddr);
+
 	return csize;
 }
diff --git a/arch/x86/kernel/crash_dump_32.c b/arch/x86/kernel/crash_dump_32.c
index 5fcac46aaf6b..5f4ae5476e19 100644
--- a/arch/x86/kernel/crash_dump_32.c
+++ b/arch/x86/kernel/crash_dump_32.c
@@ -10,8 +10,7 @@
 #include <linux/errno.h>
 #include <linux/highmem.h>
 #include <linux/crash_dump.h>
-
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 
 static inline bool is_crashed_pfn_valid(unsigned long pfn)
 {
@@ -29,21 +28,8 @@ static inline bool is_crashed_pfn_valid(unsigned long pfn)
 #endif
 }
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there might be no pte mapped
- * in the current kernel.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
 	void  *vaddr;
 
@@ -54,14 +40,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
 		return -EFAULT;
 
 	vaddr = kmap_local_pfn(pfn);
-
-	if (!userbuf) {
-		memcpy(buf, vaddr + offset, csize);
-	} else {
-		if (copy_to_user(buf, vaddr + offset, csize))
-			csize = -EFAULT;
-	}
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	kunmap_local(vaddr);
 
 	return csize;
diff --git a/arch/x86/kernel/crash_dump_64.c b/arch/x86/kernel/crash_dump_64.c
index a7f617a3981d..f922d51c9d1f 100644
--- a/arch/x86/kernel/crash_dump_64.c
+++ b/arch/x86/kernel/crash_dump_64.c
@@ -8,12 +8,12 @@
 
 #include <linux/errno.h>
 #include <linux/crash_dump.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <linux/io.h>
 #include <linux/cc_platform.h>
 
-static ssize_t __copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-				  unsigned long offset, int userbuf,
+static ssize_t __copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+				  size_t csize, unsigned long offset,
 				  bool encrypted)
 {
 	void  *vaddr;
@@ -29,47 +29,28 @@ static ssize_t __copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((void __user *)buf, vaddr + offset, csize)) {
-			iounmap((void __iomem *)vaddr);
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, vaddr + offset, csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	set_iounmap_nonlazy();
 	iounmap((void __iomem *)vaddr);
 	return csize;
 }
 
-/**
- * copy_oldmem_page - copy one page of memory
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from the old kernel's memory. For this page, there is no pte
- * mapped in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
-	return __copy_oldmem_page(pfn, buf, csize, offset, userbuf, false);
+	return __copy_oldmem_page(iter, pfn, csize, offset, false);
 }
 
-/**
+/*
  * copy_oldmem_page_encrypted - same as copy_oldmem_page() above but ioremap the
  * memory with the encryption mask set to accommodate kdump on SME-enabled
  * machines.
  */
-ssize_t copy_oldmem_page_encrypted(unsigned long pfn, char *buf, size_t csize,
-				   unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page_encrypted(struct iov_iter *iter, unsigned long pfn,
+				   size_t csize, unsigned long offset)
 {
-	return __copy_oldmem_page(pfn, buf, csize, offset, userbuf, true);
+	return __copy_oldmem_page(iter, pfn, csize, offset, true);
 }
 
 ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos)
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 6f1b8ddc6f7a..54dda2e19ed1 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -26,6 +26,7 @@
 #include <linux/vmalloc.h>
 #include <linux/pagemap.h>
 #include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <linux/cc_platform.h>
 #include <asm/io.h>
 #include "internal.h"
@@ -128,9 +129,8 @@ static int open_vmcore(struct inode *inode, struct file *file)
 }
 
 /* Reads a page from the oldmem device from given offset. */
-ssize_t read_from_oldmem(char *buf, size_t count,
-			 u64 *ppos, int userbuf,
-			 bool encrypted)
+static ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count,
+			 u64 *ppos, bool encrypted)
 {
 	unsigned long pfn, offset;
 	size_t nr_bytes;
@@ -152,29 +152,23 @@ ssize_t read_from_oldmem(char *buf, size_t count,
 
 		/* If pfn is not ram, return zeros for sparse dump files */
 		if (!pfn_is_ram(pfn)) {
-			tmp = 0;
-			if (!userbuf)
-				memset(buf, 0, nr_bytes);
-			else if (clear_user(buf, nr_bytes))
-				tmp = -EFAULT;
+			tmp = iov_iter_zero(nr_bytes, iter);
 		} else {
 			if (encrypted)
-				tmp = copy_oldmem_page_encrypted(pfn, buf,
+				tmp = copy_oldmem_page_encrypted(iter, pfn,
 								 nr_bytes,
-								 offset,
-								 userbuf);
+								 offset);
 			else
-				tmp = copy_oldmem_page(pfn, buf, nr_bytes,
-						       offset, userbuf);
+				tmp = copy_oldmem_page(iter, pfn, nr_bytes,
+						       offset);
 		}
-		if (tmp < 0) {
+		if (tmp < nr_bytes) {
 			srcu_read_unlock(&vmcore_cb_srcu, idx);
-			return tmp;
+			return -EFAULT;
 		}
 
 		*ppos += nr_bytes;
 		count -= nr_bytes;
-		buf += nr_bytes;
 		read += nr_bytes;
 		++pfn;
 		offset = 0;
@@ -184,6 +178,27 @@ ssize_t read_from_oldmem(char *buf, size_t count,
 	return read;
 }
 
+ssize_t read_from_oldmem(char *buf, size_t count,
+			 u64 *ppos, int userbuf,
+			 bool encrypted)
+{
+	struct iov_iter iter;
+	struct iovec iov;
+	struct kvec kvec;
+
+	if (userbuf) {
+		iov.iov_base = (__force void __user *)buf;
+		iov.iov_len = count;
+		iov_iter_init(&iter, READ, &iov, 1, count);
+	} else {
+		kvec.iov_base = buf;
+		kvec.iov_len = count;
+		iov_iter_kvec(&iter, READ, &kvec, 1, count);
+	}
+
+	return read_from_oldmem_iter(&iter, count, ppos, encrypted);
+}
+
 /*
  * Architectures may override this function to allocate ELF header in 2nd kernel
  */
@@ -228,11 +243,10 @@ int __weak remap_oldmem_pfn_range(struct vm_area_struct *vma,
 /*
  * Architectures which support memory encryption override this.
  */
-ssize_t __weak
-copy_oldmem_page_encrypted(unsigned long pfn, char *buf, size_t csize,
-			   unsigned long offset, int userbuf)
+ssize_t __weak copy_oldmem_page_encrypted(struct iov_iter *iter,
+		unsigned long pfn, size_t csize, unsigned long offset)
 {
-	return copy_oldmem_page(pfn, buf, csize, offset, userbuf);
+	return copy_oldmem_page(iter, pfn, csize, offset);
 }
 
 /*
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h
index 620821549b23..a1cf7d5c03c7 100644
--- a/include/linux/crash_dump.h
+++ b/include/linux/crash_dump.h
@@ -24,11 +24,10 @@ extern int remap_oldmem_pfn_range(struct vm_area_struct *vma,
 				  unsigned long from, unsigned long pfn,
 				  unsigned long size, pgprot_t prot);
 
-extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
-						unsigned long, int);
-extern ssize_t copy_oldmem_page_encrypted(unsigned long pfn, char *buf,
-					  size_t csize, unsigned long offset,
-					  int userbuf);
+ssize_t copy_oldmem_page(struct iov_iter *i, unsigned long pfn, size_t csize,
+		unsigned long offset);
+ssize_t copy_oldmem_page_encrypted(struct iov_iter *iter, unsigned long pfn,
+				   size_t csize, unsigned long offset);
 
 void vmcore_cleanup(void);
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-08  9:06   ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: kexec

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>

Instead of passing in a 'buf' and 'userbuf' argument, pass in an iov_iter.
s390 needs more work to pass the iov_iter down further, or refactor,
but I'd be more comfortable if someone who can test on s390 did that work.

It's more convenient to convert the whole of read_from_oldmem() to
take an iov_iter at the same time, so rename it to read_from_oldmem_iter()
and add a temporary read_from_oldmem() wrapper that creates an iov_iter.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/arm/kernel/crash_dump.c     | 27 +++-------------
 arch/arm64/kernel/crash_dump.c   | 29 +++--------------
 arch/ia64/kernel/crash_dump.c    | 32 +++----------------
 arch/mips/kernel/crash_dump.c    | 27 +++-------------
 arch/powerpc/kernel/crash_dump.c | 35 +++------------------
 arch/riscv/kernel/crash_dump.c   | 26 +++------------
 arch/s390/kernel/crash_dump.c    | 13 +++++---
 arch/sh/kernel/crash_dump.c      | 29 +++--------------
 arch/x86/kernel/crash_dump_32.c  | 29 +++--------------
 arch/x86/kernel/crash_dump_64.c  | 41 +++++++-----------------
 fs/proc/vmcore.c                 | 54 ++++++++++++++++++++------------
 include/linux/crash_dump.h       |  9 +++---
 12 files changed, 91 insertions(+), 260 deletions(-)

diff --git a/arch/arm/kernel/crash_dump.c b/arch/arm/kernel/crash_dump.c
index 53cb92435392..938bd932df9a 100644
--- a/arch/arm/kernel/crash_dump.c
+++ b/arch/arm/kernel/crash_dump.c
@@ -14,22 +14,10 @@
 #include <linux/crash_dump.h>
 #include <linux/uaccess.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is int he user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -40,14 +28,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user(buf, vaddr + offset, csize)) {
-			iounmap(vaddr);
-			return -EFAULT;
-		}
-	} else {
-		memcpy(buf, vaddr + offset, csize);
-	}
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	iounmap(vaddr);
 	return csize;
diff --git a/arch/arm64/kernel/crash_dump.c b/arch/arm64/kernel/crash_dump.c
index 58303a9ec32c..670e4ce81822 100644
--- a/arch/arm64/kernel/crash_dump.c
+++ b/arch/arm64/kernel/crash_dump.c
@@ -9,25 +9,11 @@
 #include <linux/crash_dump.h>
 #include <linux/errno.h>
 #include <linux/io.h>
-#include <linux/memblock.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <asm/memory.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is in a user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -38,14 +24,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, vaddr + offset, csize)) {
-			memunmap(vaddr);
-			return -EFAULT;
-		}
-	} else {
-		memcpy(buf, vaddr + offset, csize);
-	}
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	memunmap(vaddr);
 
diff --git a/arch/ia64/kernel/crash_dump.c b/arch/ia64/kernel/crash_dump.c
index 0ed3c3dee4cd..4ef68e2aa757 100644
--- a/arch/ia64/kernel/crash_dump.c
+++ b/arch/ia64/kernel/crash_dump.c
@@ -10,42 +10,18 @@
 #include <linux/errno.h>
 #include <linux/types.h>
 #include <linux/crash_dump.h>
-
+#include <linux/uio.h>
 #include <asm/page.h>
-#include <linux/uaccess.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- *
- * Calling copy_to_user() in atomic context is not desirable. Hence first
- * copying the data to a pre-allocated kernel page and then copying to user
- * space in non-atomic context.
- */
-ssize_t
-copy_oldmem_page(unsigned long pfn, char *buf,
-		size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+		size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 
 	if (!csize)
 		return 0;
 	vaddr = __va(pfn<<PAGE_SHIFT);
-	if (userbuf) {
-		if (copy_to_user(buf, (vaddr + offset), csize)) {
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, (vaddr + offset), csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	return csize;
 }
 
diff --git a/arch/mips/kernel/crash_dump.c b/arch/mips/kernel/crash_dump.c
index 2e50f55185a6..6e50f4902409 100644
--- a/arch/mips/kernel/crash_dump.c
+++ b/arch/mips/kernel/crash_dump.c
@@ -1,22 +1,10 @@
 // SPDX-License-Identifier: GPL-2.0
 #include <linux/highmem.h>
 #include <linux/crash_dump.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 
@@ -24,14 +12,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 		return 0;
 
 	vaddr = kmap_local_pfn(pfn);
-
-	if (!userbuf) {
-		memcpy(buf, vaddr + offset, csize);
-	} else {
-		if (copy_to_user(buf, vaddr + offset, csize))
-			csize = -EFAULT;
-	}
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	kunmap_local(vaddr);
 
 	return csize;
diff --git a/arch/powerpc/kernel/crash_dump.c b/arch/powerpc/kernel/crash_dump.c
index 5693e1c67c2b..32b4a97f1b79 100644
--- a/arch/powerpc/kernel/crash_dump.c
+++ b/arch/powerpc/kernel/crash_dump.c
@@ -16,7 +16,7 @@
 #include <asm/kdump.h>
 #include <asm/prom.h>
 #include <asm/firmware.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <asm/rtas.h>
 #include <asm/inst.h>
 
@@ -68,33 +68,8 @@ void __init setup_kdump_trampoline(void)
 }
 #endif /* CONFIG_NONSTATIC_KERNEL */
 
-static size_t copy_oldmem_vaddr(void *vaddr, char *buf, size_t csize,
-                               unsigned long offset, int userbuf)
-{
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, (vaddr + offset), csize))
-			return -EFAULT;
-	} else
-		memcpy(buf, (vaddr + offset), csize);
-
-	return csize;
-}
-
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *      space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *      otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			size_t csize, unsigned long offset)
 {
 	void  *vaddr;
 	phys_addr_t paddr;
@@ -107,10 +82,10 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 
 	if (memblock_is_region_memory(paddr, csize)) {
 		vaddr = __va(paddr);
-		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+		csize = copy_to_iter(vaddr + offset, csize, iter);
 	} else {
 		vaddr = ioremap_cache(paddr, PAGE_SIZE);
-		csize = copy_oldmem_vaddr(vaddr, buf, csize, offset, userbuf);
+		csize = copy_to_iter(vaddr + offset, csize, iter);
 		iounmap(vaddr);
 	}
 
diff --git a/arch/riscv/kernel/crash_dump.c b/arch/riscv/kernel/crash_dump.c
index 86cc0ada5752..ea2158cee97b 100644
--- a/arch/riscv/kernel/crash_dump.c
+++ b/arch/riscv/kernel/crash_dump.c
@@ -7,22 +7,10 @@
 
 #include <linux/crash_dump.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 
-/**
- * copy_oldmem_page() - copy one page from old kernel memory
- * @pfn: page frame number to be copied
- * @buf: buffer where the copied page is placed
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page
- * @userbuf: if set, @buf is in a user address space
- *
- * This function copies one page from old kernel memory into buffer pointed by
- * @buf. If @buf is in userspace, set @userbuf to %1. Returns number of bytes
- * copied or negative error in case of failure.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-			 size_t csize, unsigned long offset,
-			 int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void *vaddr;
 
@@ -33,13 +21,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((char __user *)buf, vaddr + offset, csize)) {
-			memunmap(vaddr);
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, vaddr + offset, csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	memunmap(vaddr);
 	return csize;
diff --git a/arch/s390/kernel/crash_dump.c b/arch/s390/kernel/crash_dump.c
index 69819b765250..a2c1c55daec0 100644
--- a/arch/s390/kernel/crash_dump.c
+++ b/arch/s390/kernel/crash_dump.c
@@ -15,6 +15,7 @@
 #include <linux/slab.h>
 #include <linux/memblock.h>
 #include <linux/elf.h>
+#include <linux/uio.h>
 #include <asm/asm-offsets.h>
 #include <asm/os_info.h>
 #include <asm/elf.h>
@@ -212,8 +213,8 @@ static int copy_oldmem_user(void __user *dst, unsigned long src, size_t count)
 /*
  * Copy one page from "oldmem"
  */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
 	unsigned long src;
 	int rc;
@@ -221,10 +222,12 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
 	if (!csize)
 		return 0;
 	src = pfn_to_phys(pfn) + offset;
-	if (userbuf)
-		rc = copy_oldmem_user((void __force __user *) buf, src, csize);
+
+	/* XXX: pass the iov_iter down to a common function */
+	if (iter_is_iovec(iter))
+		rc = copy_oldmem_user(iter->iov->iov_base, src, csize);
 	else
-		rc = copy_oldmem_kernel((void *) buf, src, csize);
+		rc = copy_oldmem_kernel(iter->kvec->iov_base, src, csize);
 	return rc;
 }
 
diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
index 5b41b59698c1..19ce6a950aac 100644
--- a/arch/sh/kernel/crash_dump.c
+++ b/arch/sh/kernel/crash_dump.c
@@ -8,23 +8,11 @@
 #include <linux/errno.h>
 #include <linux/crash_dump.h>
 #include <linux/io.h>
+#include <linux/uio.h>
 #include <linux/uaccess.h>
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there is no pte mapped
- * in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
-                               size_t csize, unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+			 size_t csize, unsigned long offset)
 {
 	void  __iomem *vaddr;
 
@@ -32,15 +20,8 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf,
 		return 0;
 
 	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
-
-	if (userbuf) {
-		if (copy_to_user((void __user *)buf, (vaddr + offset), csize)) {
-			iounmap(vaddr);
-			return -EFAULT;
-		}
-	} else
-	memcpy(buf, (vaddr + offset), csize);
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	iounmap(vaddr);
+
 	return csize;
 }
diff --git a/arch/x86/kernel/crash_dump_32.c b/arch/x86/kernel/crash_dump_32.c
index 5fcac46aaf6b..5f4ae5476e19 100644
--- a/arch/x86/kernel/crash_dump_32.c
+++ b/arch/x86/kernel/crash_dump_32.c
@@ -10,8 +10,7 @@
 #include <linux/errno.h>
 #include <linux/highmem.h>
 #include <linux/crash_dump.h>
-
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 
 static inline bool is_crashed_pfn_valid(unsigned long pfn)
 {
@@ -29,21 +28,8 @@ static inline bool is_crashed_pfn_valid(unsigned long pfn)
 #endif
 }
 
-/**
- * copy_oldmem_page - copy one page from "oldmem"
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from "oldmem". For this page, there might be no pte mapped
- * in the current kernel.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
 	void  *vaddr;
 
@@ -54,14 +40,7 @@ ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
 		return -EFAULT;
 
 	vaddr = kmap_local_pfn(pfn);
-
-	if (!userbuf) {
-		memcpy(buf, vaddr + offset, csize);
-	} else {
-		if (copy_to_user(buf, vaddr + offset, csize))
-			csize = -EFAULT;
-	}
-
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 	kunmap_local(vaddr);
 
 	return csize;
diff --git a/arch/x86/kernel/crash_dump_64.c b/arch/x86/kernel/crash_dump_64.c
index a7f617a3981d..f922d51c9d1f 100644
--- a/arch/x86/kernel/crash_dump_64.c
+++ b/arch/x86/kernel/crash_dump_64.c
@@ -8,12 +8,12 @@
 
 #include <linux/errno.h>
 #include <linux/crash_dump.h>
-#include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <linux/io.h>
 #include <linux/cc_platform.h>
 
-static ssize_t __copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-				  unsigned long offset, int userbuf,
+static ssize_t __copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
+				  size_t csize, unsigned long offset,
 				  bool encrypted)
 {
 	void  *vaddr;
@@ -29,47 +29,28 @@ static ssize_t __copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
 	if (!vaddr)
 		return -ENOMEM;
 
-	if (userbuf) {
-		if (copy_to_user((void __user *)buf, vaddr + offset, csize)) {
-			iounmap((void __iomem *)vaddr);
-			return -EFAULT;
-		}
-	} else
-		memcpy(buf, vaddr + offset, csize);
+	csize = copy_to_iter(vaddr + offset, csize, iter);
 
 	set_iounmap_nonlazy();
 	iounmap((void __iomem *)vaddr);
 	return csize;
 }
 
-/**
- * copy_oldmem_page - copy one page of memory
- * @pfn: page frame number to be copied
- * @buf: target memory address for the copy; this can be in kernel address
- *	space or user address space (see @userbuf)
- * @csize: number of bytes to copy
- * @offset: offset in bytes into the page (based on pfn) to begin the copy
- * @userbuf: if set, @buf is in user address space, use copy_to_user(),
- *	otherwise @buf is in kernel address space, use memcpy().
- *
- * Copy a page from the old kernel's memory. For this page, there is no pte
- * mapped in the current kernel. We stitch up a pte, similar to kmap_atomic.
- */
-ssize_t copy_oldmem_page(unsigned long pfn, char *buf, size_t csize,
-			 unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn, size_t csize,
+			 unsigned long offset)
 {
-	return __copy_oldmem_page(pfn, buf, csize, offset, userbuf, false);
+	return __copy_oldmem_page(iter, pfn, csize, offset, false);
 }
 
-/**
+/*
  * copy_oldmem_page_encrypted - same as copy_oldmem_page() above but ioremap the
  * memory with the encryption mask set to accommodate kdump on SME-enabled
  * machines.
  */
-ssize_t copy_oldmem_page_encrypted(unsigned long pfn, char *buf, size_t csize,
-				   unsigned long offset, int userbuf)
+ssize_t copy_oldmem_page_encrypted(struct iov_iter *iter, unsigned long pfn,
+				   size_t csize, unsigned long offset)
 {
-	return __copy_oldmem_page(pfn, buf, csize, offset, userbuf, true);
+	return __copy_oldmem_page(iter, pfn, csize, offset, true);
 }
 
 ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos)
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 6f1b8ddc6f7a..54dda2e19ed1 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -26,6 +26,7 @@
 #include <linux/vmalloc.h>
 #include <linux/pagemap.h>
 #include <linux/uaccess.h>
+#include <linux/uio.h>
 #include <linux/cc_platform.h>
 #include <asm/io.h>
 #include "internal.h"
@@ -128,9 +129,8 @@ static int open_vmcore(struct inode *inode, struct file *file)
 }
 
 /* Reads a page from the oldmem device from given offset. */
-ssize_t read_from_oldmem(char *buf, size_t count,
-			 u64 *ppos, int userbuf,
-			 bool encrypted)
+static ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count,
+			 u64 *ppos, bool encrypted)
 {
 	unsigned long pfn, offset;
 	size_t nr_bytes;
@@ -152,29 +152,23 @@ ssize_t read_from_oldmem(char *buf, size_t count,
 
 		/* If pfn is not ram, return zeros for sparse dump files */
 		if (!pfn_is_ram(pfn)) {
-			tmp = 0;
-			if (!userbuf)
-				memset(buf, 0, nr_bytes);
-			else if (clear_user(buf, nr_bytes))
-				tmp = -EFAULT;
+			tmp = iov_iter_zero(nr_bytes, iter);
 		} else {
 			if (encrypted)
-				tmp = copy_oldmem_page_encrypted(pfn, buf,
+				tmp = copy_oldmem_page_encrypted(iter, pfn,
 								 nr_bytes,
-								 offset,
-								 userbuf);
+								 offset);
 			else
-				tmp = copy_oldmem_page(pfn, buf, nr_bytes,
-						       offset, userbuf);
+				tmp = copy_oldmem_page(iter, pfn, nr_bytes,
+						       offset);
 		}
-		if (tmp < 0) {
+		if (tmp < nr_bytes) {
 			srcu_read_unlock(&vmcore_cb_srcu, idx);
-			return tmp;
+			return -EFAULT;
 		}
 
 		*ppos += nr_bytes;
 		count -= nr_bytes;
-		buf += nr_bytes;
 		read += nr_bytes;
 		++pfn;
 		offset = 0;
@@ -184,6 +178,27 @@ ssize_t read_from_oldmem(char *buf, size_t count,
 	return read;
 }
 
+ssize_t read_from_oldmem(char *buf, size_t count,
+			 u64 *ppos, int userbuf,
+			 bool encrypted)
+{
+	struct iov_iter iter;
+	struct iovec iov;
+	struct kvec kvec;
+
+	if (userbuf) {
+		iov.iov_base = (__force void __user *)buf;
+		iov.iov_len = count;
+		iov_iter_init(&iter, READ, &iov, 1, count);
+	} else {
+		kvec.iov_base = buf;
+		kvec.iov_len = count;
+		iov_iter_kvec(&iter, READ, &kvec, 1, count);
+	}
+
+	return read_from_oldmem_iter(&iter, count, ppos, encrypted);
+}
+
 /*
  * Architectures may override this function to allocate ELF header in 2nd kernel
  */
@@ -228,11 +243,10 @@ int __weak remap_oldmem_pfn_range(struct vm_area_struct *vma,
 /*
  * Architectures which support memory encryption override this.
  */
-ssize_t __weak
-copy_oldmem_page_encrypted(unsigned long pfn, char *buf, size_t csize,
-			   unsigned long offset, int userbuf)
+ssize_t __weak copy_oldmem_page_encrypted(struct iov_iter *iter,
+		unsigned long pfn, size_t csize, unsigned long offset)
 {
-	return copy_oldmem_page(pfn, buf, csize, offset, userbuf);
+	return copy_oldmem_page(iter, pfn, csize, offset);
 }
 
 /*
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h
index 620821549b23..a1cf7d5c03c7 100644
--- a/include/linux/crash_dump.h
+++ b/include/linux/crash_dump.h
@@ -24,11 +24,10 @@ extern int remap_oldmem_pfn_range(struct vm_area_struct *vma,
 				  unsigned long from, unsigned long pfn,
 				  unsigned long size, pgprot_t prot);
 
-extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
-						unsigned long, int);
-extern ssize_t copy_oldmem_page_encrypted(unsigned long pfn, char *buf,
-					  size_t csize, unsigned long offset,
-					  int userbuf);
+ssize_t copy_oldmem_page(struct iov_iter *i, unsigned long pfn, size_t csize,
+		unsigned long offset);
+ssize_t copy_oldmem_page_encrypted(struct iov_iter *iter, unsigned long pfn,
+				   size_t csize, unsigned long offset);
 
 void vmcore_cleanup(void);
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 2/3] vmcore: Convert __read_vmcore to use an iov_iter
  2022-04-08  9:06 ` Baoquan He
@ 2022-04-08  9:06   ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: akpm, willy
  Cc: linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro, bhe

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>

This gets rid of copy_to() and let us use proc_read_iter() instead
of proc_read().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Baoquan He <bhe@redhat.com>
---
 fs/proc/vmcore.c | 82 ++++++++++++++++++------------------------------
 1 file changed, 30 insertions(+), 52 deletions(-)

diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 54dda2e19ed1..4a721865b5cd 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -249,22 +249,8 @@ ssize_t __weak copy_oldmem_page_encrypted(struct iov_iter *iter,
 	return copy_oldmem_page(iter, pfn, csize, offset);
 }
 
-/*
- * Copy to either kernel or user space
- */
-static int copy_to(void *target, void *src, size_t size, int userbuf)
-{
-	if (userbuf) {
-		if (copy_to_user((char __user *) target, src, size))
-			return -EFAULT;
-	} else {
-		memcpy(target, src, size);
-	}
-	return 0;
-}
-
 #ifdef CONFIG_PROC_VMCORE_DEVICE_DUMP
-static int vmcoredd_copy_dumps(void *dst, u64 start, size_t size, int userbuf)
+static int vmcoredd_copy_dumps(struct iov_iter *iter, u64 start, size_t size)
 {
 	struct vmcoredd_node *dump;
 	u64 offset = 0;
@@ -277,14 +263,13 @@ static int vmcoredd_copy_dumps(void *dst, u64 start, size_t size, int userbuf)
 		if (start < offset + dump->size) {
 			tsz = min(offset + (u64)dump->size - start, (u64)size);
 			buf = dump->buf + start - offset;
-			if (copy_to(dst, buf, tsz, userbuf)) {
+			if (copy_to_iter(buf, tsz, iter) < tsz) {
 				ret = -EFAULT;
 				goto out_unlock;
 			}
 
 			size -= tsz;
 			start += tsz;
-			dst += tsz;
 
 			/* Leave now if buffer filled already */
 			if (!size)
@@ -340,33 +325,28 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct *vma, unsigned long dst,
 /* Read from the ELF header and then the crash dump. On error, negative value is
  * returned otherwise number of bytes read are returned.
  */
-static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
-			     int userbuf)
+static ssize_t __read_vmcore(struct iov_iter *iter, loff_t *fpos)
 {
 	ssize_t acc = 0, tmp;
 	size_t tsz;
 	u64 start;
 	struct vmcore *m = NULL;
 
-	if (buflen == 0 || *fpos >= vmcore_size)
+	if (!iov_iter_count(iter) || *fpos >= vmcore_size)
 		return 0;
 
-	/* trim buflen to not go beyond EOF */
-	if (buflen > vmcore_size - *fpos)
-		buflen = vmcore_size - *fpos;
+	iov_iter_truncate(iter, vmcore_size - *fpos);
 
 	/* Read ELF core header */
 	if (*fpos < elfcorebuf_sz) {
-		tsz = min(elfcorebuf_sz - (size_t)*fpos, buflen);
-		if (copy_to(buffer, elfcorebuf + *fpos, tsz, userbuf))
+		tsz = min(elfcorebuf_sz - (size_t)*fpos, iov_iter_count(iter));
+		if (copy_to_iter(elfcorebuf + *fpos, tsz, iter) < tsz)
 			return -EFAULT;
-		buflen -= tsz;
 		*fpos += tsz;
-		buffer += tsz;
 		acc += tsz;
 
 		/* leave now if filled buffer already */
-		if (buflen == 0)
+		if (!iov_iter_count(iter))
 			return acc;
 	}
 
@@ -387,35 +367,32 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
 		/* Read device dumps */
 		if (*fpos < elfcorebuf_sz + vmcoredd_orig_sz) {
 			tsz = min(elfcorebuf_sz + vmcoredd_orig_sz -
-				  (size_t)*fpos, buflen);
+				  (size_t)*fpos, iov_iter_count(iter));
 			start = *fpos - elfcorebuf_sz;
-			if (vmcoredd_copy_dumps(buffer, start, tsz, userbuf))
+			if (vmcoredd_copy_dumps(iter, start, tsz))
 				return -EFAULT;
 
-			buflen -= tsz;
 			*fpos += tsz;
-			buffer += tsz;
 			acc += tsz;
 
 			/* leave now if filled buffer already */
-			if (!buflen)
+			if (!iov_iter_count(iter))
 				return acc;
 		}
 #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */
 
 		/* Read remaining elf notes */
-		tsz = min(elfcorebuf_sz + elfnotes_sz - (size_t)*fpos, buflen);
+		tsz = min(elfcorebuf_sz + elfnotes_sz - (size_t)*fpos,
+			  iov_iter_count(iter));
 		kaddr = elfnotes_buf + *fpos - elfcorebuf_sz - vmcoredd_orig_sz;
-		if (copy_to(buffer, kaddr, tsz, userbuf))
+		if (copy_to_iter(kaddr, tsz, iter) < tsz)
 			return -EFAULT;
 
-		buflen -= tsz;
 		*fpos += tsz;
-		buffer += tsz;
 		acc += tsz;
 
 		/* leave now if filled buffer already */
-		if (buflen == 0)
+		if (!iov_iter_count(iter))
 			return acc;
 	}
 
@@ -423,19 +400,17 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
 		if (*fpos < m->offset + m->size) {
 			tsz = (size_t)min_t(unsigned long long,
 					    m->offset + m->size - *fpos,
-					    buflen);
+					    iov_iter_count(iter));
 			start = m->paddr + *fpos - m->offset;
-			tmp = read_from_oldmem(buffer, tsz, &start,
-					       userbuf, cc_platform_has(CC_ATTR_MEM_ENCRYPT));
+			tmp = read_from_oldmem_iter(iter, tsz, &start,
+					cc_platform_has(CC_ATTR_MEM_ENCRYPT));
 			if (tmp < 0)
 				return tmp;
-			buflen -= tsz;
 			*fpos += tsz;
-			buffer += tsz;
 			acc += tsz;
 
 			/* leave now if filled buffer already */
-			if (buflen == 0)
+			if (!iov_iter_count(iter))
 				return acc;
 		}
 	}
@@ -443,15 +418,14 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
 	return acc;
 }
 
-static ssize_t read_vmcore(struct file *file, char __user *buffer,
-			   size_t buflen, loff_t *fpos)
+static ssize_t read_vmcore(struct kiocb *iocb, struct iov_iter *iter)
 {
-	return __read_vmcore((__force char *) buffer, buflen, fpos, 1);
+	return __read_vmcore(iter, &iocb->ki_pos);
 }
 
 /*
  * The vmcore fault handler uses the page cache and fills data using the
- * standard __vmcore_read() function.
+ * standard __read_vmcore() function.
  *
  * On s390 the fault handler is used for memory regions that can't be mapped
  * directly with remap_pfn_range().
@@ -461,9 +435,10 @@ static vm_fault_t mmap_vmcore_fault(struct vm_fault *vmf)
 #ifdef CONFIG_S390
 	struct address_space *mapping = vmf->vma->vm_file->f_mapping;
 	pgoff_t index = vmf->pgoff;
+	struct iov_iter iter;
+	struct kvec kvec;
 	struct page *page;
 	loff_t offset;
-	char *buf;
 	int rc;
 
 	page = find_or_create_page(mapping, index, GFP_KERNEL);
@@ -471,8 +446,11 @@ static vm_fault_t mmap_vmcore_fault(struct vm_fault *vmf)
 		return VM_FAULT_OOM;
 	if (!PageUptodate(page)) {
 		offset = (loff_t) index << PAGE_SHIFT;
-		buf = __va((page_to_pfn(page) << PAGE_SHIFT));
-		rc = __read_vmcore(buf, PAGE_SIZE, &offset, 0);
+		kvec.iov_base = page_address(page);
+		kvec.iov_len = PAGE_SIZE;
+		iov_iter_kvec(&iter, READ, &kvec, 1, PAGE_SIZE);
+
+		rc = __read_vmcore(&iter, &offset);
 		if (rc < 0) {
 			unlock_page(page);
 			put_page(page);
@@ -722,7 +700,7 @@ static int mmap_vmcore(struct file *file, struct vm_area_struct *vma)
 
 static const struct proc_ops vmcore_proc_ops = {
 	.proc_open	= open_vmcore,
-	.proc_read	= read_vmcore,
+	.proc_read_iter	= read_vmcore,
 	.proc_lseek	= default_llseek,
 	.proc_mmap	= mmap_vmcore,
 };
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 2/3] vmcore: Convert __read_vmcore to use an iov_iter
@ 2022-04-08  9:06   ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: kexec

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>

This gets rid of copy_to() and let us use proc_read_iter() instead
of proc_read().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Baoquan He <bhe@redhat.com>
---
 fs/proc/vmcore.c | 82 ++++++++++++++++++------------------------------
 1 file changed, 30 insertions(+), 52 deletions(-)

diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 54dda2e19ed1..4a721865b5cd 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -249,22 +249,8 @@ ssize_t __weak copy_oldmem_page_encrypted(struct iov_iter *iter,
 	return copy_oldmem_page(iter, pfn, csize, offset);
 }
 
-/*
- * Copy to either kernel or user space
- */
-static int copy_to(void *target, void *src, size_t size, int userbuf)
-{
-	if (userbuf) {
-		if (copy_to_user((char __user *) target, src, size))
-			return -EFAULT;
-	} else {
-		memcpy(target, src, size);
-	}
-	return 0;
-}
-
 #ifdef CONFIG_PROC_VMCORE_DEVICE_DUMP
-static int vmcoredd_copy_dumps(void *dst, u64 start, size_t size, int userbuf)
+static int vmcoredd_copy_dumps(struct iov_iter *iter, u64 start, size_t size)
 {
 	struct vmcoredd_node *dump;
 	u64 offset = 0;
@@ -277,14 +263,13 @@ static int vmcoredd_copy_dumps(void *dst, u64 start, size_t size, int userbuf)
 		if (start < offset + dump->size) {
 			tsz = min(offset + (u64)dump->size - start, (u64)size);
 			buf = dump->buf + start - offset;
-			if (copy_to(dst, buf, tsz, userbuf)) {
+			if (copy_to_iter(buf, tsz, iter) < tsz) {
 				ret = -EFAULT;
 				goto out_unlock;
 			}
 
 			size -= tsz;
 			start += tsz;
-			dst += tsz;
 
 			/* Leave now if buffer filled already */
 			if (!size)
@@ -340,33 +325,28 @@ static int vmcoredd_mmap_dumps(struct vm_area_struct *vma, unsigned long dst,
 /* Read from the ELF header and then the crash dump. On error, negative value is
  * returned otherwise number of bytes read are returned.
  */
-static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
-			     int userbuf)
+static ssize_t __read_vmcore(struct iov_iter *iter, loff_t *fpos)
 {
 	ssize_t acc = 0, tmp;
 	size_t tsz;
 	u64 start;
 	struct vmcore *m = NULL;
 
-	if (buflen == 0 || *fpos >= vmcore_size)
+	if (!iov_iter_count(iter) || *fpos >= vmcore_size)
 		return 0;
 
-	/* trim buflen to not go beyond EOF */
-	if (buflen > vmcore_size - *fpos)
-		buflen = vmcore_size - *fpos;
+	iov_iter_truncate(iter, vmcore_size - *fpos);
 
 	/* Read ELF core header */
 	if (*fpos < elfcorebuf_sz) {
-		tsz = min(elfcorebuf_sz - (size_t)*fpos, buflen);
-		if (copy_to(buffer, elfcorebuf + *fpos, tsz, userbuf))
+		tsz = min(elfcorebuf_sz - (size_t)*fpos, iov_iter_count(iter));
+		if (copy_to_iter(elfcorebuf + *fpos, tsz, iter) < tsz)
 			return -EFAULT;
-		buflen -= tsz;
 		*fpos += tsz;
-		buffer += tsz;
 		acc += tsz;
 
 		/* leave now if filled buffer already */
-		if (buflen == 0)
+		if (!iov_iter_count(iter))
 			return acc;
 	}
 
@@ -387,35 +367,32 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
 		/* Read device dumps */
 		if (*fpos < elfcorebuf_sz + vmcoredd_orig_sz) {
 			tsz = min(elfcorebuf_sz + vmcoredd_orig_sz -
-				  (size_t)*fpos, buflen);
+				  (size_t)*fpos, iov_iter_count(iter));
 			start = *fpos - elfcorebuf_sz;
-			if (vmcoredd_copy_dumps(buffer, start, tsz, userbuf))
+			if (vmcoredd_copy_dumps(iter, start, tsz))
 				return -EFAULT;
 
-			buflen -= tsz;
 			*fpos += tsz;
-			buffer += tsz;
 			acc += tsz;
 
 			/* leave now if filled buffer already */
-			if (!buflen)
+			if (!iov_iter_count(iter))
 				return acc;
 		}
 #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */
 
 		/* Read remaining elf notes */
-		tsz = min(elfcorebuf_sz + elfnotes_sz - (size_t)*fpos, buflen);
+		tsz = min(elfcorebuf_sz + elfnotes_sz - (size_t)*fpos,
+			  iov_iter_count(iter));
 		kaddr = elfnotes_buf + *fpos - elfcorebuf_sz - vmcoredd_orig_sz;
-		if (copy_to(buffer, kaddr, tsz, userbuf))
+		if (copy_to_iter(kaddr, tsz, iter) < tsz)
 			return -EFAULT;
 
-		buflen -= tsz;
 		*fpos += tsz;
-		buffer += tsz;
 		acc += tsz;
 
 		/* leave now if filled buffer already */
-		if (buflen == 0)
+		if (!iov_iter_count(iter))
 			return acc;
 	}
 
@@ -423,19 +400,17 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
 		if (*fpos < m->offset + m->size) {
 			tsz = (size_t)min_t(unsigned long long,
 					    m->offset + m->size - *fpos,
-					    buflen);
+					    iov_iter_count(iter));
 			start = m->paddr + *fpos - m->offset;
-			tmp = read_from_oldmem(buffer, tsz, &start,
-					       userbuf, cc_platform_has(CC_ATTR_MEM_ENCRYPT));
+			tmp = read_from_oldmem_iter(iter, tsz, &start,
+					cc_platform_has(CC_ATTR_MEM_ENCRYPT));
 			if (tmp < 0)
 				return tmp;
-			buflen -= tsz;
 			*fpos += tsz;
-			buffer += tsz;
 			acc += tsz;
 
 			/* leave now if filled buffer already */
-			if (buflen == 0)
+			if (!iov_iter_count(iter))
 				return acc;
 		}
 	}
@@ -443,15 +418,14 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos,
 	return acc;
 }
 
-static ssize_t read_vmcore(struct file *file, char __user *buffer,
-			   size_t buflen, loff_t *fpos)
+static ssize_t read_vmcore(struct kiocb *iocb, struct iov_iter *iter)
 {
-	return __read_vmcore((__force char *) buffer, buflen, fpos, 1);
+	return __read_vmcore(iter, &iocb->ki_pos);
 }
 
 /*
  * The vmcore fault handler uses the page cache and fills data using the
- * standard __vmcore_read() function.
+ * standard __read_vmcore() function.
  *
  * On s390 the fault handler is used for memory regions that can't be mapped
  * directly with remap_pfn_range().
@@ -461,9 +435,10 @@ static vm_fault_t mmap_vmcore_fault(struct vm_fault *vmf)
 #ifdef CONFIG_S390
 	struct address_space *mapping = vmf->vma->vm_file->f_mapping;
 	pgoff_t index = vmf->pgoff;
+	struct iov_iter iter;
+	struct kvec kvec;
 	struct page *page;
 	loff_t offset;
-	char *buf;
 	int rc;
 
 	page = find_or_create_page(mapping, index, GFP_KERNEL);
@@ -471,8 +446,11 @@ static vm_fault_t mmap_vmcore_fault(struct vm_fault *vmf)
 		return VM_FAULT_OOM;
 	if (!PageUptodate(page)) {
 		offset = (loff_t) index << PAGE_SHIFT;
-		buf = __va((page_to_pfn(page) << PAGE_SHIFT));
-		rc = __read_vmcore(buf, PAGE_SIZE, &offset, 0);
+		kvec.iov_base = page_address(page);
+		kvec.iov_len = PAGE_SIZE;
+		iov_iter_kvec(&iter, READ, &kvec, 1, PAGE_SIZE);
+
+		rc = __read_vmcore(&iter, &offset);
 		if (rc < 0) {
 			unlock_page(page);
 			put_page(page);
@@ -722,7 +700,7 @@ static int mmap_vmcore(struct file *file, struct vm_area_struct *vma)
 
 static const struct proc_ops vmcore_proc_ops = {
 	.proc_open	= open_vmcore,
-	.proc_read	= read_vmcore,
+	.proc_read_iter	= read_vmcore,
 	.proc_lseek	= default_llseek,
 	.proc_mmap	= mmap_vmcore,
 };
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 3/3] vmcore: Convert read_from_oldmem() to take an iov_iter
  2022-04-08  9:06 ` Baoquan He
@ 2022-04-08  9:06   ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: akpm, willy
  Cc: linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro, bhe

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>

Remove the read_from_oldmem() wrapper introduced earlier and convert
all the remaining callers to pass an iov_iter.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/x86/kernel/crash_dump_64.c |  7 +++++-
 fs/proc/vmcore.c                | 40 +++++++++++++--------------------
 include/linux/crash_dump.h      | 10 ++++-----
 3 files changed, 25 insertions(+), 32 deletions(-)

diff --git a/arch/x86/kernel/crash_dump_64.c b/arch/x86/kernel/crash_dump_64.c
index f922d51c9d1f..0fa87648e55c 100644
--- a/arch/x86/kernel/crash_dump_64.c
+++ b/arch/x86/kernel/crash_dump_64.c
@@ -55,6 +55,11 @@ ssize_t copy_oldmem_page_encrypted(struct iov_iter *iter, unsigned long pfn,
 
 ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos)
 {
-	return read_from_oldmem(buf, count, ppos, 0,
+	struct kvec kvec = { .iov_base = buf, .iov_len = count };
+	struct iov_iter iter;
+
+	iov_iter_kvec(&iter, READ, &kvec, 1, count);
+
+	return read_from_oldmem(&iter, count, ppos,
 				cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT));
 }
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 4a721865b5cd..4eaeb645e759 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -129,7 +129,7 @@ static int open_vmcore(struct inode *inode, struct file *file)
 }
 
 /* Reads a page from the oldmem device from given offset. */
-static ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count,
+ssize_t read_from_oldmem(struct iov_iter *iter, size_t count,
 			 u64 *ppos, bool encrypted)
 {
 	unsigned long pfn, offset;
@@ -178,27 +178,6 @@ static ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count,
 	return read;
 }
 
-ssize_t read_from_oldmem(char *buf, size_t count,
-			 u64 *ppos, int userbuf,
-			 bool encrypted)
-{
-	struct iov_iter iter;
-	struct iovec iov;
-	struct kvec kvec;
-
-	if (userbuf) {
-		iov.iov_base = (__force void __user *)buf;
-		iov.iov_len = count;
-		iov_iter_init(&iter, READ, &iov, 1, count);
-	} else {
-		kvec.iov_base = buf;
-		kvec.iov_len = count;
-		iov_iter_kvec(&iter, READ, &kvec, 1, count);
-	}
-
-	return read_from_oldmem_iter(&iter, count, ppos, encrypted);
-}
-
 /*
  * Architectures may override this function to allocate ELF header in 2nd kernel
  */
@@ -218,7 +197,12 @@ void __weak elfcorehdr_free(unsigned long long addr)
  */
 ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos)
 {
-	return read_from_oldmem(buf, count, ppos, 0, false);
+	struct kvec kvec = { .iov_base = buf, .iov_len = count };
+	struct iov_iter iter;
+
+	iov_iter_kvec(&iter, READ, &kvec, 1, count);
+
+	return read_from_oldmem(&iter, count, ppos, false);
 }
 
 /*
@@ -226,7 +210,13 @@ ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos)
  */
 ssize_t __weak elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos)
 {
-	return read_from_oldmem(buf, count, ppos, 0, cc_platform_has(CC_ATTR_MEM_ENCRYPT));
+	struct kvec kvec = { .iov_base = buf, .iov_len = count };
+	struct iov_iter iter;
+
+	iov_iter_kvec(&iter, READ, &kvec, 1, count);
+
+	return read_from_oldmem(&iter, count, ppos,
+			cc_platform_has(CC_ATTR_MEM_ENCRYPT));
 }
 
 /*
@@ -402,7 +392,7 @@ static ssize_t __read_vmcore(struct iov_iter *iter, loff_t *fpos)
 					    m->offset + m->size - *fpos,
 					    iov_iter_count(iter));
 			start = m->paddr + *fpos - m->offset;
-			tmp = read_from_oldmem_iter(iter, tsz, &start,
+			tmp = read_from_oldmem(iter, tsz, &start,
 					cc_platform_has(CC_ATTR_MEM_ENCRYPT));
 			if (tmp < 0)
 				return tmp;
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h
index a1cf7d5c03c7..0f3a656293b0 100644
--- a/include/linux/crash_dump.h
+++ b/include/linux/crash_dump.h
@@ -134,13 +134,11 @@ static inline int vmcore_add_device_dump(struct vmcoredd_data *data)
 #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */
 
 #ifdef CONFIG_PROC_VMCORE
-ssize_t read_from_oldmem(char *buf, size_t count,
-			 u64 *ppos, int userbuf,
-			 bool encrypted);
+ssize_t read_from_oldmem(struct iov_iter *iter, size_t count,
+			 u64 *ppos, bool encrypted);
 #else
-static inline ssize_t read_from_oldmem(char *buf, size_t count,
-				       u64 *ppos, int userbuf,
-				       bool encrypted)
+static inline ssize_t read_from_oldmem(struct iov_iter *iter, size_t count,
+				       u64 *ppos, bool encrypted)
 {
 	return -EOPNOTSUPP;
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 3/3] vmcore: Convert read_from_oldmem() to take an iov_iter
@ 2022-04-08  9:06   ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:06 UTC (permalink / raw)
  To: kexec

From: "Matthew Wilcox (Oracle)" <willy@infradead.org>

Remove the read_from_oldmem() wrapper introduced earlier and convert
all the remaining callers to pass an iov_iter.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/x86/kernel/crash_dump_64.c |  7 +++++-
 fs/proc/vmcore.c                | 40 +++++++++++++--------------------
 include/linux/crash_dump.h      | 10 ++++-----
 3 files changed, 25 insertions(+), 32 deletions(-)

diff --git a/arch/x86/kernel/crash_dump_64.c b/arch/x86/kernel/crash_dump_64.c
index f922d51c9d1f..0fa87648e55c 100644
--- a/arch/x86/kernel/crash_dump_64.c
+++ b/arch/x86/kernel/crash_dump_64.c
@@ -55,6 +55,11 @@ ssize_t copy_oldmem_page_encrypted(struct iov_iter *iter, unsigned long pfn,
 
 ssize_t elfcorehdr_read(char *buf, size_t count, u64 *ppos)
 {
-	return read_from_oldmem(buf, count, ppos, 0,
+	struct kvec kvec = { .iov_base = buf, .iov_len = count };
+	struct iov_iter iter;
+
+	iov_iter_kvec(&iter, READ, &kvec, 1, count);
+
+	return read_from_oldmem(&iter, count, ppos,
 				cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT));
 }
diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 4a721865b5cd..4eaeb645e759 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -129,7 +129,7 @@ static int open_vmcore(struct inode *inode, struct file *file)
 }
 
 /* Reads a page from the oldmem device from given offset. */
-static ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count,
+ssize_t read_from_oldmem(struct iov_iter *iter, size_t count,
 			 u64 *ppos, bool encrypted)
 {
 	unsigned long pfn, offset;
@@ -178,27 +178,6 @@ static ssize_t read_from_oldmem_iter(struct iov_iter *iter, size_t count,
 	return read;
 }
 
-ssize_t read_from_oldmem(char *buf, size_t count,
-			 u64 *ppos, int userbuf,
-			 bool encrypted)
-{
-	struct iov_iter iter;
-	struct iovec iov;
-	struct kvec kvec;
-
-	if (userbuf) {
-		iov.iov_base = (__force void __user *)buf;
-		iov.iov_len = count;
-		iov_iter_init(&iter, READ, &iov, 1, count);
-	} else {
-		kvec.iov_base = buf;
-		kvec.iov_len = count;
-		iov_iter_kvec(&iter, READ, &kvec, 1, count);
-	}
-
-	return read_from_oldmem_iter(&iter, count, ppos, encrypted);
-}
-
 /*
  * Architectures may override this function to allocate ELF header in 2nd kernel
  */
@@ -218,7 +197,12 @@ void __weak elfcorehdr_free(unsigned long long addr)
  */
 ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos)
 {
-	return read_from_oldmem(buf, count, ppos, 0, false);
+	struct kvec kvec = { .iov_base = buf, .iov_len = count };
+	struct iov_iter iter;
+
+	iov_iter_kvec(&iter, READ, &kvec, 1, count);
+
+	return read_from_oldmem(&iter, count, ppos, false);
 }
 
 /*
@@ -226,7 +210,13 @@ ssize_t __weak elfcorehdr_read(char *buf, size_t count, u64 *ppos)
  */
 ssize_t __weak elfcorehdr_read_notes(char *buf, size_t count, u64 *ppos)
 {
-	return read_from_oldmem(buf, count, ppos, 0, cc_platform_has(CC_ATTR_MEM_ENCRYPT));
+	struct kvec kvec = { .iov_base = buf, .iov_len = count };
+	struct iov_iter iter;
+
+	iov_iter_kvec(&iter, READ, &kvec, 1, count);
+
+	return read_from_oldmem(&iter, count, ppos,
+			cc_platform_has(CC_ATTR_MEM_ENCRYPT));
 }
 
 /*
@@ -402,7 +392,7 @@ static ssize_t __read_vmcore(struct iov_iter *iter, loff_t *fpos)
 					    m->offset + m->size - *fpos,
 					    iov_iter_count(iter));
 			start = m->paddr + *fpos - m->offset;
-			tmp = read_from_oldmem_iter(iter, tsz, &start,
+			tmp = read_from_oldmem(iter, tsz, &start,
 					cc_platform_has(CC_ATTR_MEM_ENCRYPT));
 			if (tmp < 0)
 				return tmp;
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h
index a1cf7d5c03c7..0f3a656293b0 100644
--- a/include/linux/crash_dump.h
+++ b/include/linux/crash_dump.h
@@ -134,13 +134,11 @@ static inline int vmcore_add_device_dump(struct vmcoredd_data *data)
 #endif /* CONFIG_PROC_VMCORE_DEVICE_DUMP */
 
 #ifdef CONFIG_PROC_VMCORE
-ssize_t read_from_oldmem(char *buf, size_t count,
-			 u64 *ppos, int userbuf,
-			 bool encrypted);
+ssize_t read_from_oldmem(struct iov_iter *iter, size_t count,
+			 u64 *ppos, bool encrypted);
 #else
-static inline ssize_t read_from_oldmem(char *buf, size_t count,
-				       u64 *ppos, int userbuf,
-				       bool encrypted)
+static inline ssize_t read_from_oldmem(struct iov_iter *iter, size_t count,
+				       u64 *ppos, bool encrypted)
 {
 	return -EOPNOTSUPP;
 }
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
  2022-04-08  9:06 ` Baoquan He
@ 2022-04-08  9:24   ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:24 UTC (permalink / raw)
  To: akpm, willy, Heiko Carstens
  Cc: linux-kernel, kexec, hch, yangtiezhu, amit.kachhap, linux-fsdevel, viro

Add Heiko to CC.

On 04/08/22 at 05:06pm, Baoquan He wrote:
> Copy the description of v3 cover letter from Willy:
> ===
> For some reason several people have been sending bad patches to fix
> compiler warnings in vmcore recently.  Here's how it should be done.
> Compile-tested only on x86.  As noted in the first patch, s390 should
> take this conversion a bit further, but I'm not inclined to do that
> work myself.

Forgot adding Heiko to CC again.

Hi Heiko,

Andrew worried you may miss the note, "As noted in the first patch,
s390 should take this conversion a bit further, but I'm not inclined
to do that work myself." written in cover letter from willy.

I told him you had already known this in v1 discussion. So add you in CC
list as Andrew required. Adding words to explain, just in case confusion.

> 
> V4:
> [PATCH v4 0/3] Convert vmcore to use an iov_iter
> https://lore.kernel.org/all/20220318093706.161534-1-bhe@redhat.com/T/#u
> 
> v3:
> [PATCH v3 0/3] Convert vmcore to use an iov_iter
> https://lore.kernel.org/all/20211213143927.3069508-1-willy@infradead.org/T/#u
> 
> 
> Changelog:
> ===
> v5 RESEND:
>  - Add my own Signed-off-by, no code or log change related in this round.
> 
> v5:
>  - Rebased on Linus's latest master branch.
>  - Merge the patch 4 of v4 into patch 2.
> v4:
>  - Append one patch to replace the open code with iov_iter_count().
>    This is suggested by Al.
>  - Fix a indentation error by replacing space with tab in
>    arch/sh/kernel/crash_dump.c of patch 1 reported by checkpatch. The
>    rest of patch 1~3 are untouched.
>  - Add Christopy's Reviewed-by and my Acked-by for patch 1~3.
> v3:
>  - Send the correct patches this time
> v2:
>  - Removed unnecessary kernel-doc
>  - Included uio.h to fix compilation problems
>  - Made read_from_oldmem_iter static to avoid compile warnings during the
>    conversion
>  - Use iov_iter_truncate() (Christoph)
> 
> 
> Matthew Wilcox (Oracle) (3):
>   vmcore: Convert copy_oldmem_page() to take an iov_iter
>   vmcore: Convert __read_vmcore to use an iov_iter
>   vmcore: Convert read_from_oldmem() to take an iov_iter
> 
>  arch/arm/kernel/crash_dump.c     |  27 +------
>  arch/arm64/kernel/crash_dump.c   |  29 +------
>  arch/ia64/kernel/crash_dump.c    |  32 +-------
>  arch/mips/kernel/crash_dump.c    |  27 +------
>  arch/powerpc/kernel/crash_dump.c |  35 ++-------
>  arch/riscv/kernel/crash_dump.c   |  26 +------
>  arch/s390/kernel/crash_dump.c    |  13 ++--
>  arch/sh/kernel/crash_dump.c      |  29 ++-----
>  arch/x86/kernel/crash_dump_32.c  |  29 +------
>  arch/x86/kernel/crash_dump_64.c  |  48 ++++--------
>  fs/proc/vmcore.c                 | 130 +++++++++++++------------------
>  include/linux/crash_dump.h       |  19 ++---
>  12 files changed, 123 insertions(+), 321 deletions(-)
> 
> -- 
> 2.34.1
> 


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
@ 2022-04-08  9:24   ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-08  9:24 UTC (permalink / raw)
  To: kexec

Add Heiko to CC.

On 04/08/22 at 05:06pm, Baoquan He wrote:
> Copy the description of v3 cover letter from Willy:
> ===
> For some reason several people have been sending bad patches to fix
> compiler warnings in vmcore recently.  Here's how it should be done.
> Compile-tested only on x86.  As noted in the first patch, s390 should
> take this conversion a bit further, but I'm not inclined to do that
> work myself.

Forgot adding Heiko to CC again.

Hi Heiko,

Andrew worried you may miss the note, "As noted in the first patch,
s390 should take this conversion a bit further, but I'm not inclined
to do that work myself." written in cover letter from willy.

I told him you had already known this in v1 discussion. So add you in CC
list as Andrew required. Adding words to explain, just in case confusion.

> 
> V4:
> [PATCH v4 0/3] Convert vmcore to use an iov_iter
> https://lore.kernel.org/all/20220318093706.161534-1-bhe at redhat.com/T/#u
> 
> v3:
> [PATCH v3 0/3] Convert vmcore to use an iov_iter
> https://lore.kernel.org/all/20211213143927.3069508-1-willy at infradead.org/T/#u
> 
> 
> Changelog:
> ===
> v5 RESEND:
>  - Add my own Signed-off-by, no code or log change related in this round.
> 
> v5:
>  - Rebased on Linus's latest master branch.
>  - Merge the patch 4 of v4 into patch 2.
> v4:
>  - Append one patch to replace the open code with iov_iter_count().
>    This is suggested by Al.
>  - Fix a indentation error by replacing space with tab in
>    arch/sh/kernel/crash_dump.c of patch 1 reported by checkpatch. The
>    rest of patch 1~3 are untouched.
>  - Add Christopy's Reviewed-by and my Acked-by for patch 1~3.
> v3:
>  - Send the correct patches this time
> v2:
>  - Removed unnecessary kernel-doc
>  - Included uio.h to fix compilation problems
>  - Made read_from_oldmem_iter static to avoid compile warnings during the
>    conversion
>  - Use iov_iter_truncate() (Christoph)
> 
> 
> Matthew Wilcox (Oracle) (3):
>   vmcore: Convert copy_oldmem_page() to take an iov_iter
>   vmcore: Convert __read_vmcore to use an iov_iter
>   vmcore: Convert read_from_oldmem() to take an iov_iter
> 
>  arch/arm/kernel/crash_dump.c     |  27 +------
>  arch/arm64/kernel/crash_dump.c   |  29 +------
>  arch/ia64/kernel/crash_dump.c    |  32 +-------
>  arch/mips/kernel/crash_dump.c    |  27 +------
>  arch/powerpc/kernel/crash_dump.c |  35 ++-------
>  arch/riscv/kernel/crash_dump.c   |  26 +------
>  arch/s390/kernel/crash_dump.c    |  13 ++--
>  arch/sh/kernel/crash_dump.c      |  29 ++-----
>  arch/x86/kernel/crash_dump_32.c  |  29 +------
>  arch/x86/kernel/crash_dump_64.c  |  48 ++++--------
>  fs/proc/vmcore.c                 | 130 +++++++++++++------------------
>  include/linux/crash_dump.h       |  19 ++---
>  12 files changed, 123 insertions(+), 321 deletions(-)
> 
> -- 
> 2.34.1
> 



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-08  9:06   ` Baoquan He
@ 2022-04-08 13:17     ` kernel test robot
  -1 siblings, 0 replies; 41+ messages in thread
From: kernel test robot @ 2022-04-08 13:17 UTC (permalink / raw)
  To: Baoquan He, akpm, willy
  Cc: kbuild-all, linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro, bhe

Hi Baoquan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on powerpc/next]
[also build test WARNING on s390/features linus/master v5.18-rc1 next-20220408]
[cannot apply to tip/x86/core hnaz-mm/master arm64/for-next/core]
[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/intel-lab-lkp/linux/commits/Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: sh-randconfig-s032-20220408 (https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config)
compiler: sh4-linux-gcc (GCC) 11.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/intel-lab-lkp/linux/commit/a5e42962f5c0bea73aa382a2415094b4bd6c6c73
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
        git checkout a5e42962f5c0bea73aa382a2415094b4bd6c6c73
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/

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


sparse warnings: (new ones prefixed by >>)
>> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
   arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
   arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *

vim +23 arch/sh/kernel/crash_dump.c

    13	
    14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
    15				 size_t csize, unsigned long offset)
    16	{
    17		void  __iomem *vaddr;
    18	
    19		if (!csize)
    20			return 0;
    21	
    22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
  > 23		csize = copy_to_iter(vaddr + offset, csize, iter);

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-08 13:17     ` kernel test robot
  0 siblings, 0 replies; 41+ messages in thread
From: kernel test robot @ 2022-04-08 13:17 UTC (permalink / raw)
  To: kexec

Hi Baoquan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on powerpc/next]
[also build test WARNING on s390/features linus/master v5.18-rc1 next-20220408]
[cannot apply to tip/x86/core hnaz-mm/master arm64/for-next/core]
[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/intel-lab-lkp/linux/commits/Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: sh-randconfig-s032-20220408 (https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config)
compiler: sh4-linux-gcc (GCC) 11.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/intel-lab-lkp/linux/commit/a5e42962f5c0bea73aa382a2415094b4bd6c6c73
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
        git checkout a5e42962f5c0bea73aa382a2415094b4bd6c6c73
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/

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


sparse warnings: (new ones prefixed by >>)
>> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
   arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
   arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *

vim +23 arch/sh/kernel/crash_dump.c

    13	
    14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
    15				 size_t csize, unsigned long offset)
    16	{
    17		void  __iomem *vaddr;
    18	
    19		if (!csize)
    20			return 0;
    21	
    22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
  > 23		csize = copy_to_iter(vaddr + offset, csize, iter);

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-08 13:17     ` kernel test robot
  (?)
@ 2022-04-09  1:02       ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-09  1:02 UTC (permalink / raw)
  To: kernel test robot
  Cc: akpm, willy, kbuild-all, linux-kernel, kexec, hch, yangtiezhu,
	amit.kachhap, linux-fsdevel, viro

On 04/08/22 at 09:17pm, kernel test robot wrote:
> Hi Baoquan,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on powerpc/next]
> [also build test WARNING on s390/features linus/master v5.18-rc1 next-20220408]
> [cannot apply to tip/x86/core hnaz-mm/master arm64/for-next/core]
> [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/intel-lab-lkp/linux/commits/Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
> config: sh-randconfig-s032-20220408 (https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config)
> compiler: sh4-linux-gcc (GCC) 11.2.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross

Thanks for reporting this, do I need to try this on ppc system?

I tried on x86_64 system, for the 1st step, I got this:

[ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
/root/bin/make.cross: No such file or directory

What else should I do to proceed?

Thanks
Baoquan

>         chmod +x ~/bin/make.cross
>         # apt-get install sparse
>         # sparse version: v0.6.4-dirty
>         # https://github.com/intel-lab-lkp/linux/commit/a5e42962f5c0bea73aa382a2415094b4bd6c6c73
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
>         git checkout a5e42962f5c0bea73aa382a2415094b4bd6c6c73
>         # save the config file to linux build tree
>         mkdir build_dir
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> 
> sparse warnings: (new ones prefixed by >>)
> >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
>    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
>    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> 
> vim +23 arch/sh/kernel/crash_dump.c
> 
>     13	
>     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
>     15				 size_t csize, unsigned long offset)
>     16	{
>     17		void  __iomem *vaddr;
>     18	
>     19		if (!csize)
>     20			return 0;
>     21	
>     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
>   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://01.org/lkp
> 


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-09  1:02       ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-09  1:02 UTC (permalink / raw)
  To: kexec

On 04/08/22 at 09:17pm, kernel test robot wrote:
> Hi Baoquan,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on powerpc/next]
> [also build test WARNING on s390/features linus/master v5.18-rc1 next-20220408]
> [cannot apply to tip/x86/core hnaz-mm/master arm64/for-next/core]
> [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/intel-lab-lkp/linux/commits/Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
> config: sh-randconfig-s032-20220408 (https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config)
> compiler: sh4-linux-gcc (GCC) 11.2.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross

Thanks for reporting this, do I need to try this on ppc system?

I tried on x86_64 system, for the 1st step, I got this:

[ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
/root/bin/make.cross: No such file or directory

What else should I do to proceed?

Thanks
Baoquan

>         chmod +x ~/bin/make.cross
>         # apt-get install sparse
>         # sparse version: v0.6.4-dirty
>         # https://github.com/intel-lab-lkp/linux/commit/a5e42962f5c0bea73aa382a2415094b4bd6c6c73
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
>         git checkout a5e42962f5c0bea73aa382a2415094b4bd6c6c73
>         # save the config file to linux build tree
>         mkdir build_dir
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> 
> sparse warnings: (new ones prefixed by >>)
> >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
>    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
>    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> 
> vim +23 arch/sh/kernel/crash_dump.c
> 
>     13	
>     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
>     15				 size_t csize, unsigned long offset)
>     16	{
>     17		void  __iomem *vaddr;
>     18	
>     19		if (!csize)
>     20			return 0;
>     21	
>     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
>   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://01.org/lkp
> 



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-09  1:02       ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-09  1:02 UTC (permalink / raw)
  To: kbuild-all

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

On 04/08/22 at 09:17pm, kernel test robot wrote:
> Hi Baoquan,
> 
> Thank you for the patch! Perhaps something to improve:
> 
> [auto build test WARNING on powerpc/next]
> [also build test WARNING on s390/features linus/master v5.18-rc1 next-20220408]
> [cannot apply to tip/x86/core hnaz-mm/master arm64/for-next/core]
> [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/intel-lab-lkp/linux/commits/Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
> config: sh-randconfig-s032-20220408 (https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp(a)intel.com/config)
> compiler: sh4-linux-gcc (GCC) 11.2.0
> reproduce:
>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross

Thanks for reporting this, do I need to try this on ppc system?

I tried on x86_64 system, for the 1st step, I got this:

[ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
/root/bin/make.cross: No such file or directory

What else should I do to proceed?

Thanks
Baoquan

>         chmod +x ~/bin/make.cross
>         # apt-get install sparse
>         # sparse version: v0.6.4-dirty
>         # https://github.com/intel-lab-lkp/linux/commit/a5e42962f5c0bea73aa382a2415094b4bd6c6c73
>         git remote add linux-review https://github.com/intel-lab-lkp/linux
>         git fetch --no-tags linux-review Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
>         git checkout a5e42962f5c0bea73aa382a2415094b4bd6c6c73
>         # save the config file to linux build tree
>         mkdir build_dir
>         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> 
> sparse warnings: (new ones prefixed by >>)
> >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
>    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
>    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> 
> vim +23 arch/sh/kernel/crash_dump.c
> 
>     13	
>     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
>     15				 size_t csize, unsigned long offset)
>     16	{
>     17		void  __iomem *vaddr;
>     18	
>     19		if (!csize)
>     20			return 0;
>     21	
>     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
>   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://01.org/lkp
> 

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [kbuild-all] Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-09  1:02       ` Baoquan He
@ 2022-04-09  1:24         ` Philip Li
  -1 siblings, 0 replies; 41+ messages in thread
From: Philip Li @ 2022-04-09  1:24 UTC (permalink / raw)
  To: Baoquan He
  Cc: kernel test robot, akpm, willy, kbuild-all, linux-kernel, kexec,
	hch, yangtiezhu, amit.kachhap, linux-fsdevel, viro

On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> On 04/08/22 at 09:17pm, kernel test robot wrote:
> > Hi Baoquan,
> > 
> > Thank you for the patch! Perhaps something to improve:
> > 
> > [auto build test WARNING on powerpc/next]
> > [also build test WARNING on s390/features linus/master v5.18-rc1 next-20220408]
> > [cannot apply to tip/x86/core hnaz-mm/master arm64/for-next/core]
> > [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/intel-lab-lkp/linux/commits/Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
> > config: sh-randconfig-s032-20220408 (https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config)
> > compiler: sh4-linux-gcc (GCC) 11.2.0
> > reproduce:
> >         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> 
> Thanks for reporting this, do I need to try this on ppc system?
> 
> I tried on x86_64 system, for the 1st step, I got this:
> 
> [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> /root/bin/make.cross: No such file or directory
> 
> What else should I do to proceed?

not sure whether mkdir -p /root/bin works? I can reproduce this if i don't have ~/bin dir.

We will look into this to make reproduce step clearer.

> 
> Thanks
> Baoquan
> 
> >         chmod +x ~/bin/make.cross
> >         # apt-get install sparse
> >         # sparse version: v0.6.4-dirty
> >         # https://github.com/intel-lab-lkp/linux/commit/a5e42962f5c0bea73aa382a2415094b4bd6c6c73
> >         git remote add linux-review https://github.com/intel-lab-lkp/linux
> >         git fetch --no-tags linux-review Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
> >         git checkout a5e42962f5c0bea73aa382a2415094b4bd6c6c73
> >         # save the config file to linux build tree
> >         mkdir build_dir
> >         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > 
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <lkp@intel.com>
> > 
> > 
> > sparse warnings: (new ones prefixed by >>)
> > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > 
> > vim +23 arch/sh/kernel/crash_dump.c
> > 
> >     13	
> >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >     15				 size_t csize, unsigned long offset)
> >     16	{
> >     17		void  __iomem *vaddr;
> >     18	
> >     19		if (!csize)
> >     20			return 0;
> >     21	
> >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > 
> > -- 
> > 0-DAY CI Kernel Test Service
> > https://01.org/lkp
> > 
> _______________________________________________
> kbuild-all mailing list -- kbuild-all@lists.01.org
> To unsubscribe send an email to kbuild-all-leave@lists.01.org

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [kbuild-all] Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-09  1:24         ` Philip Li
  0 siblings, 0 replies; 41+ messages in thread
From: Philip Li @ 2022-04-09  1:24 UTC (permalink / raw)
  To: kexec

On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> On 04/08/22 at 09:17pm, kernel test robot wrote:
> > Hi Baoquan,
> > 
> > Thank you for the patch! Perhaps something to improve:
> > 
> > [auto build test WARNING on powerpc/next]
> > [also build test WARNING on s390/features linus/master v5.18-rc1 next-20220408]
> > [cannot apply to tip/x86/core hnaz-mm/master arm64/for-next/core]
> > [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/intel-lab-lkp/linux/commits/Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
> > config: sh-randconfig-s032-20220408 (https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config)
> > compiler: sh4-linux-gcc (GCC) 11.2.0
> > reproduce:
> >         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> 
> Thanks for reporting this, do I need to try this on ppc system?
> 
> I tried on x86_64 system, for the 1st step, I got this:
> 
> [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> /root/bin/make.cross: No such file or directory
> 
> What else should I do to proceed?

not sure whether mkdir -p /root/bin works? I can reproduce this if i don't have ~/bin dir.

We will look into this to make reproduce step clearer.

> 
> Thanks
> Baoquan
> 
> >         chmod +x ~/bin/make.cross
> >         # apt-get install sparse
> >         # sparse version: v0.6.4-dirty
> >         # https://github.com/intel-lab-lkp/linux/commit/a5e42962f5c0bea73aa382a2415094b4bd6c6c73
> >         git remote add linux-review https://github.com/intel-lab-lkp/linux
> >         git fetch --no-tags linux-review Baoquan-He/Convert-vmcore-to-use-an-iov_iter/20220408-170846
> >         git checkout a5e42962f5c0bea73aa382a2415094b4bd6c6c73
> >         # save the config file to linux build tree
> >         mkdir build_dir
> >         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > 
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <lkp@intel.com>
> > 
> > 
> > sparse warnings: (new ones prefixed by >>)
> > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > 
> > vim +23 arch/sh/kernel/crash_dump.c
> > 
> >     13	
> >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >     15				 size_t csize, unsigned long offset)
> >     16	{
> >     17		void  __iomem *vaddr;
> >     18	
> >     19		if (!csize)
> >     20			return 0;
> >     21	
> >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > 
> > -- 
> > 0-DAY CI Kernel Test Service
> > https://01.org/lkp
> > 
> _______________________________________________
> kbuild-all mailing list -- kbuild-all at lists.01.org
> To unsubscribe send an email to kbuild-all-leave at lists.01.org


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-09  1:02       ` Baoquan He
  (?)
@ 2022-04-09  1:44         ` Matthew Wilcox
  -1 siblings, 0 replies; 41+ messages in thread
From: Matthew Wilcox @ 2022-04-09  1:44 UTC (permalink / raw)
  To: Baoquan He
  Cc: kernel test robot, akpm, kbuild-all, linux-kernel, kexec, hch,
	yangtiezhu, amit.kachhap, linux-fsdevel, viro

On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> I tried on x86_64 system, for the 1st step, I got this:
> 
> [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> /root/bin/make.cross: No such file or directory

... I don't think we need to reproduce it to see the problem.

> > sparse warnings: (new ones prefixed by >>)
> > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > 
> > vim +23 arch/sh/kernel/crash_dump.c
> > 
> >     13	
> >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >     15				 size_t csize, unsigned long offset)
> >     16	{
> >     17		void  __iomem *vaddr;
> >     18	
> >     19		if (!csize)
> >     20			return 0;
> >     21	
> >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);

Unlike other architectures, sh4 does this by calling ioremap().
That gives us an __iomem qualified pointer, which it then warns about
passing to copy_to_iter().

There are a bunch of hacky things we could do to fix it, but for such an
unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
to break something while fixing the warning.  Someone who knows the arch
can figure out what to do properly.

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-09  1:44         ` Matthew Wilcox
  0 siblings, 0 replies; 41+ messages in thread
From: Matthew Wilcox @ 2022-04-09  1:44 UTC (permalink / raw)
  To: kexec

On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> I tried on x86_64 system, for the 1st step, I got this:
> 
> [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> /root/bin/make.cross: No such file or directory

... I don't think we need to reproduce it to see the problem.

> > sparse warnings: (new ones prefixed by >>)
> > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > 
> > vim +23 arch/sh/kernel/crash_dump.c
> > 
> >     13	
> >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >     15				 size_t csize, unsigned long offset)
> >     16	{
> >     17		void  __iomem *vaddr;
> >     18	
> >     19		if (!csize)
> >     20			return 0;
> >     21	
> >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);

Unlike other architectures, sh4 does this by calling ioremap().
That gives us an __iomem qualified pointer, which it then warns about
passing to copy_to_iter().

There are a bunch of hacky things we could do to fix it, but for such an
unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
to break something while fixing the warning.  Someone who knows the arch
can figure out what to do properly.


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-09  1:44         ` Matthew Wilcox
  0 siblings, 0 replies; 41+ messages in thread
From: Matthew Wilcox @ 2022-04-09  1:44 UTC (permalink / raw)
  To: kbuild-all

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

On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> I tried on x86_64 system, for the 1st step, I got this:
> 
> [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> /root/bin/make.cross: No such file or directory

... I don't think we need to reproduce it to see the problem.

> > sparse warnings: (new ones prefixed by >>)
> > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > 
> > vim +23 arch/sh/kernel/crash_dump.c
> > 
> >     13	
> >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >     15				 size_t csize, unsigned long offset)
> >     16	{
> >     17		void  __iomem *vaddr;
> >     18	
> >     19		if (!csize)
> >     20			return 0;
> >     21	
> >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);

Unlike other architectures, sh4 does this by calling ioremap().
That gives us an __iomem qualified pointer, which it then warns about
passing to copy_to_iter().

There are a bunch of hacky things we could do to fix it, but for such an
unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
to break something while fixing the warning.  Someone who knows the arch
can figure out what to do properly.

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-09  1:44         ` Matthew Wilcox
  (?)
@ 2022-04-11  0:32           ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-11  0:32 UTC (permalink / raw)
  To: Matthew Wilcox, philip.li
  Cc: kernel test robot, akpm, kbuild-all, linux-kernel, kexec, hch,
	yangtiezhu, amit.kachhap, linux-fsdevel, viro

On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > I tried on x86_64 system, for the 1st step, I got this:
> > 
> > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > /root/bin/make.cross: No such file or directory
> 
> ... I don't think we need to reproduce it to see the problem.
> 
> > > sparse warnings: (new ones prefixed by >>)
> > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > 
> > > vim +23 arch/sh/kernel/crash_dump.c
> > > 
> > >     13	
> > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > >     15				 size_t csize, unsigned long offset)
> > >     16	{
> > >     17		void  __iomem *vaddr;
> > >     18	
> > >     19		if (!csize)
> > >     20			return 0;
> > >     21	
> > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> 
> Unlike other architectures, sh4 does this by calling ioremap().
> That gives us an __iomem qualified pointer, which it then warns about
> passing to copy_to_iter().
> 
> There are a bunch of hacky things we could do to fix it, but for such an
> unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> to break something while fixing the warning.  Someone who knows the arch
> can figure out what to do properly.

Checked code, this can be fixed by casting away __iomem when feeding
__iomem pointer into function which doesn't expect it. While seems the
lkp failed me again.


Subject: [PATCH] sh: cast away __iomem to remove sparse warning

This warning happened when __iomem pointer is passed into fucntion which
does expect it. casting away the __iomem can fix it.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/sh/kernel/crash_dump.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
index 19ce6a950aac..b45bb0b8a182 100644
--- a/arch/sh/kernel/crash_dump.c
+++ b/arch/sh/kernel/crash_dump.c
@@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
 		return 0;
 
 	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
-	csize = copy_to_iter(vaddr + offset, csize, iter);
+	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
 	iounmap(vaddr);
 
 	return csize;
-- 
2.34.1

Hi Philipp,

I executed 'mkdir -p /root/bin', then can continue the next steps.
However, the building failed with below message. I cloned linus's tree
into the testing system. Then add remote
https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
I can test above code, I can merge it into patch in a new version.
Otherwise, I will leave it alone as willy suggested.

[root@dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
--2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 122058 (119K) [application/octet-stream]
Saving to: ‘config’

config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    

2022-04-10 19:54:16 (769 KB/s) - ‘config’ saved [122058/122058]

[root@dell-pem710-02 linux]# mv config .config
[root@dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
Compiler will be installed in /root/0day
make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
make[1]: Entering directory '/root/linux/build_dir'
  SYNC    include/config/auto.conf.cmd
***
*** The source tree is not clean, please run 'make ARCH=sh mrproper'
*** in /root/linux
***
make[2]: *** [../Makefile:574: outputmakefile] Error 1
  HOSTCC  scripts/basic/fixdep
make[2]: Target 'syncconfig' not remade because of errors.
make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
make[1]: Failed to remake makefile 'include/config/auto.conf'.
***
*** The source tree is not clean, please run 'make ARCH=sh mrproper'
*** in /root/linux
***
make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
  SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
  SYSTBL  arch/sh/include/generated/asm/syscall_table.h
Error: kernelrelease not valid - run 'make prepare' to update it
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  LEX     scripts/dtc/dtc-lexer.lex.c
  YACC    scripts/dtc/dtc-parser.tab.[ch]
  HOSTCC  scripts/dtc/libfdt/fdt.o
  HOSTCC  scripts/dtc/libfdt/fdt_ro.o
  HOSTCC  scripts/dtc/libfdt/fdt_sw.o
  HOSTCC  scripts/dtc/libfdt/fdt_wip.o
  HOSTCC  scripts/dtc/libfdt/fdt_rw.o
  HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
  HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
  HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
  HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
  HOSTCC  scripts/dtc/fdtoverlay.o
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTLD  scripts/dtc/fdtoverlay
  HOSTLD  scripts/dtc/dtc
make[1]: Target 'arch/sh/kernel/' not remade because of errors.
make[1]: Leaving directory '/root/linux/build_dir'
make: *** [Makefile:219: __sub-make] Error 2
make: Target 'arch/sh/kernel/' not remade because of errors.
[root@dell-pem710-02 linux]# 



> 


^ permalink raw reply related	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-11  0:32           ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-11  0:32 UTC (permalink / raw)
  To: kexec

On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > I tried on x86_64 system, for the 1st step, I got this:
> > 
> > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > /root/bin/make.cross: No such file or directory
> 
> ... I don't think we need to reproduce it to see the problem.
> 
> > > sparse warnings: (new ones prefixed by >>)
> > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > 
> > > vim +23 arch/sh/kernel/crash_dump.c
> > > 
> > >     13	
> > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > >     15				 size_t csize, unsigned long offset)
> > >     16	{
> > >     17		void  __iomem *vaddr;
> > >     18	
> > >     19		if (!csize)
> > >     20			return 0;
> > >     21	
> > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> 
> Unlike other architectures, sh4 does this by calling ioremap().
> That gives us an __iomem qualified pointer, which it then warns about
> passing to copy_to_iter().
> 
> There are a bunch of hacky things we could do to fix it, but for such an
> unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> to break something while fixing the warning.  Someone who knows the arch
> can figure out what to do properly.

Checked code, this can be fixed by casting away __iomem when feeding
__iomem pointer into function which doesn't expect it. While seems the
lkp failed me again.


Subject: [PATCH] sh: cast away __iomem to remove sparse warning

This warning happened when __iomem pointer is passed into fucntion which
does expect it. casting away the __iomem can fix it.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/sh/kernel/crash_dump.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
index 19ce6a950aac..b45bb0b8a182 100644
--- a/arch/sh/kernel/crash_dump.c
+++ b/arch/sh/kernel/crash_dump.c
@@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
 		return 0;
 
 	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
-	csize = copy_to_iter(vaddr + offset, csize, iter);
+	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
 	iounmap(vaddr);
 
 	return csize;
-- 
2.34.1

Hi Philipp,

I executed 'mkdir -p /root/bin', then can continue the next steps.
However, the building failed with below message. I cloned linus's tree
into the testing system. Then add remote
https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
I can test above code, I can merge it into patch in a new version.
Otherwise, I will leave it alone as willy suggested.

[root at dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config
--2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 122058 (119K) [application/octet-stream]
Saving to: ?config?

config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    

2022-04-10 19:54:16 (769 KB/s) - ?config? saved [122058/122058]

[root at dell-pem710-02 linux]# mv config .config
[root at dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
Compiler will be installed in /root/0day
make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
make[1]: Entering directory '/root/linux/build_dir'
  SYNC    include/config/auto.conf.cmd
***
*** The source tree is not clean, please run 'make ARCH=sh mrproper'
*** in /root/linux
***
make[2]: *** [../Makefile:574: outputmakefile] Error 1
  HOSTCC  scripts/basic/fixdep
make[2]: Target 'syncconfig' not remade because of errors.
make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
make[1]: Failed to remake makefile 'include/config/auto.conf'.
***
*** The source tree is not clean, please run 'make ARCH=sh mrproper'
*** in /root/linux
***
make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
  SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
  SYSTBL  arch/sh/include/generated/asm/syscall_table.h
Error: kernelrelease not valid - run 'make prepare' to update it
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  LEX     scripts/dtc/dtc-lexer.lex.c
  YACC    scripts/dtc/dtc-parser.tab.[ch]
  HOSTCC  scripts/dtc/libfdt/fdt.o
  HOSTCC  scripts/dtc/libfdt/fdt_ro.o
  HOSTCC  scripts/dtc/libfdt/fdt_sw.o
  HOSTCC  scripts/dtc/libfdt/fdt_wip.o
  HOSTCC  scripts/dtc/libfdt/fdt_rw.o
  HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
  HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
  HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
  HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
  HOSTCC  scripts/dtc/fdtoverlay.o
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTLD  scripts/dtc/fdtoverlay
  HOSTLD  scripts/dtc/dtc
make[1]: Target 'arch/sh/kernel/' not remade because of errors.
make[1]: Leaving directory '/root/linux/build_dir'
make: *** [Makefile:219: __sub-make] Error 2
make: Target 'arch/sh/kernel/' not remade because of errors.
[root at dell-pem710-02 linux]# 



> 



^ permalink raw reply related	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-11  0:32           ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-11  0:32 UTC (permalink / raw)
  To: kbuild-all

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

On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > I tried on x86_64 system, for the 1st step, I got this:
> > 
> > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > /root/bin/make.cross: No such file or directory
> 
> ... I don't think we need to reproduce it to see the problem.
> 
> > > sparse warnings: (new ones prefixed by >>)
> > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > 
> > > vim +23 arch/sh/kernel/crash_dump.c
> > > 
> > >     13	
> > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > >     15				 size_t csize, unsigned long offset)
> > >     16	{
> > >     17		void  __iomem *vaddr;
> > >     18	
> > >     19		if (!csize)
> > >     20			return 0;
> > >     21	
> > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> 
> Unlike other architectures, sh4 does this by calling ioremap().
> That gives us an __iomem qualified pointer, which it then warns about
> passing to copy_to_iter().
> 
> There are a bunch of hacky things we could do to fix it, but for such an
> unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> to break something while fixing the warning.  Someone who knows the arch
> can figure out what to do properly.

Checked code, this can be fixed by casting away __iomem when feeding
__iomem pointer into function which doesn't expect it. While seems the
lkp failed me again.


Subject: [PATCH] sh: cast away __iomem to remove sparse warning

This warning happened when __iomem pointer is passed into fucntion which
does expect it. casting away the __iomem can fix it.

Signed-off-by: Baoquan He <bhe@redhat.com>
---
 arch/sh/kernel/crash_dump.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
index 19ce6a950aac..b45bb0b8a182 100644
--- a/arch/sh/kernel/crash_dump.c
+++ b/arch/sh/kernel/crash_dump.c
@@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
 		return 0;
 
 	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
-	csize = copy_to_iter(vaddr + offset, csize, iter);
+	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
 	iounmap(vaddr);
 
 	return csize;
-- 
2.34.1

Hi Philipp,

I executed 'mkdir -p /root/bin', then can continue the next steps.
However, the building failed with below message. I cloned linus's tree
into the testing system. Then add remote
https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
I can test above code, I can merge it into patch in a new version.
Otherwise, I will leave it alone as willy suggested.

[root(a)dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp(a)intel.com/config
--2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 122058 (119K) [application/octet-stream]
Saving to: ‘config’

config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    

2022-04-10 19:54:16 (769 KB/s) - ‘config’ saved [122058/122058]

[root(a)dell-pem710-02 linux]# mv config .config
[root(a)dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
Compiler will be installed in /root/0day
make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
make[1]: Entering directory '/root/linux/build_dir'
  SYNC    include/config/auto.conf.cmd
***
*** The source tree is not clean, please run 'make ARCH=sh mrproper'
*** in /root/linux
***
make[2]: *** [../Makefile:574: outputmakefile] Error 1
  HOSTCC  scripts/basic/fixdep
make[2]: Target 'syncconfig' not remade because of errors.
make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
make[1]: Failed to remake makefile 'include/config/auto.conf'.
***
*** The source tree is not clean, please run 'make ARCH=sh mrproper'
*** in /root/linux
***
make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
  SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
  SYSTBL  arch/sh/include/generated/asm/syscall_table.h
Error: kernelrelease not valid - run 'make prepare' to update it
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  LEX     scripts/dtc/dtc-lexer.lex.c
  YACC    scripts/dtc/dtc-parser.tab.[ch]
  HOSTCC  scripts/dtc/libfdt/fdt.o
  HOSTCC  scripts/dtc/libfdt/fdt_ro.o
  HOSTCC  scripts/dtc/libfdt/fdt_sw.o
  HOSTCC  scripts/dtc/libfdt/fdt_wip.o
  HOSTCC  scripts/dtc/libfdt/fdt_rw.o
  HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
  HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
  HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
  HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
  HOSTCC  scripts/dtc/fdtoverlay.o
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTLD  scripts/dtc/fdtoverlay
  HOSTLD  scripts/dtc/dtc
make[1]: Target 'arch/sh/kernel/' not remade because of errors.
make[1]: Leaving directory '/root/linux/build_dir'
make: *** [Makefile:219: __sub-make] Error 2
make: Target 'arch/sh/kernel/' not remade because of errors.
[root(a)dell-pem710-02 linux]# 



> 

^ permalink raw reply related	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-11  0:32           ` Baoquan He
  (?)
@ 2022-04-11  1:32             ` Matthew Wilcox
  -1 siblings, 0 replies; 41+ messages in thread
From: Matthew Wilcox @ 2022-04-11  1:32 UTC (permalink / raw)
  To: Baoquan He
  Cc: philip.li, kernel test robot, akpm, kbuild-all, linux-kernel,
	kexec, hch, yangtiezhu, amit.kachhap, linux-fsdevel, viro

On Mon, Apr 11, 2022 at 08:32:26AM +0800, Baoquan He wrote:
> On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> > On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > > I tried on x86_64 system, for the 1st step, I got this:
> > > 
> > > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > > /root/bin/make.cross: No such file or directory
> > 
> > ... I don't think we need to reproduce it to see the problem.
> > 
> > > > sparse warnings: (new ones prefixed by >>)
> > > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > > 
> > > > vim +23 arch/sh/kernel/crash_dump.c
> > > > 
> > > >     13	
> > > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > > >     15				 size_t csize, unsigned long offset)
> > > >     16	{
> > > >     17		void  __iomem *vaddr;
> > > >     18	
> > > >     19		if (!csize)
> > > >     20			return 0;
> > > >     21	
> > > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > 
> > Unlike other architectures, sh4 does this by calling ioremap().
> > That gives us an __iomem qualified pointer, which it then warns about
> > passing to copy_to_iter().
> > 
> > There are a bunch of hacky things we could do to fix it, but for such an
> > unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> > to break something while fixing the warning.  Someone who knows the arch
> > can figure out what to do properly.
> 
> Checked code, this can be fixed by casting away __iomem when feeding
> __iomem pointer into function which doesn't expect it. While seems the
> lkp failed me again.

Sure, that's one of the hacky ways.  But the important thing is that
the _current_ code has a warning.  LKP only sends a nastygram because
we changed the line.  If the current maintainers of the SH architecture
haven't been bothered to fix it, I don't see why we should.

> Subject: [PATCH] sh: cast away __iomem to remove sparse warning
> 
> This warning happened when __iomem pointer is passed into fucntion which
> does expect it. casting away the __iomem can fix it.
> 
> Signed-off-by: Baoquan He <bhe@redhat.com>
> ---
>  arch/sh/kernel/crash_dump.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
> index 19ce6a950aac..b45bb0b8a182 100644
> --- a/arch/sh/kernel/crash_dump.c
> +++ b/arch/sh/kernel/crash_dump.c
> @@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
>  		return 0;
>  
>  	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> -	csize = copy_to_iter(vaddr + offset, csize, iter);
> +	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
>  	iounmap(vaddr);
>  
>  	return csize;
> -- 
> 2.34.1
> 
> Hi Philipp,
> 
> I executed 'mkdir -p /root/bin', then can continue the next steps.
> However, the building failed with below message. I cloned linus's tree
> into the testing system. Then add remote
> https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
> I can test above code, I can merge it into patch in a new version.
> Otherwise, I will leave it alone as willy suggested.
> 
> [root@dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
> --2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
> Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
> Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
> Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
> Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 122058 (119K) [application/octet-stream]
> Saving to: ‘config’
> 
> config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    
> 
> 2022-04-10 19:54:16 (769 KB/s) - ‘config’ saved [122058/122058]
> 
> [root@dell-pem710-02 linux]# mv config .config
> [root@dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> Compiler will be installed in /root/0day
> make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> make[1]: Entering directory '/root/linux/build_dir'
>   SYNC    include/config/auto.conf.cmd
> ***
> *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> *** in /root/linux
> ***
> make[2]: *** [../Makefile:574: outputmakefile] Error 1
>   HOSTCC  scripts/basic/fixdep
> make[2]: Target 'syncconfig' not remade because of errors.
> make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
> make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
> make[1]: Failed to remake makefile 'include/config/auto.conf'.
> ***
> *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> *** in /root/linux
> ***
> make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
>   SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
>   SYSTBL  arch/sh/include/generated/asm/syscall_table.h
> Error: kernelrelease not valid - run 'make prepare' to update it
>   HOSTCC  scripts/dtc/dtc.o
>   HOSTCC  scripts/dtc/flattree.o
>   HOSTCC  scripts/dtc/fstree.o
>   HOSTCC  scripts/dtc/data.o
>   HOSTCC  scripts/dtc/treesource.o
>   HOSTCC  scripts/dtc/livetree.o
>   HOSTCC  scripts/dtc/srcpos.o
>   HOSTCC  scripts/dtc/checks.o
>   HOSTCC  scripts/dtc/util.o
>   LEX     scripts/dtc/dtc-lexer.lex.c
>   YACC    scripts/dtc/dtc-parser.tab.[ch]
>   HOSTCC  scripts/dtc/libfdt/fdt.o
>   HOSTCC  scripts/dtc/libfdt/fdt_ro.o
>   HOSTCC  scripts/dtc/libfdt/fdt_sw.o
>   HOSTCC  scripts/dtc/libfdt/fdt_wip.o
>   HOSTCC  scripts/dtc/libfdt/fdt_rw.o
>   HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
>   HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
>   HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
>   HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
>   HOSTCC  scripts/dtc/fdtoverlay.o
>   HOSTCC  scripts/dtc/dtc-lexer.lex.o
>   HOSTCC  scripts/dtc/dtc-parser.tab.o
>   HOSTLD  scripts/dtc/fdtoverlay
>   HOSTLD  scripts/dtc/dtc
> make[1]: Target 'arch/sh/kernel/' not remade because of errors.
> make[1]: Leaving directory '/root/linux/build_dir'
> make: *** [Makefile:219: __sub-make] Error 2
> make: Target 'arch/sh/kernel/' not remade because of errors.
> [root@dell-pem710-02 linux]# 
> 
> 
> 
> > 
> 

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-11  1:32             ` Matthew Wilcox
  0 siblings, 0 replies; 41+ messages in thread
From: Matthew Wilcox @ 2022-04-11  1:32 UTC (permalink / raw)
  To: kexec

On Mon, Apr 11, 2022 at 08:32:26AM +0800, Baoquan He wrote:
> On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> > On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > > I tried on x86_64 system, for the 1st step, I got this:
> > > 
> > > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > > /root/bin/make.cross: No such file or directory
> > 
> > ... I don't think we need to reproduce it to see the problem.
> > 
> > > > sparse warnings: (new ones prefixed by >>)
> > > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > > 
> > > > vim +23 arch/sh/kernel/crash_dump.c
> > > > 
> > > >     13	
> > > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > > >     15				 size_t csize, unsigned long offset)
> > > >     16	{
> > > >     17		void  __iomem *vaddr;
> > > >     18	
> > > >     19		if (!csize)
> > > >     20			return 0;
> > > >     21	
> > > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > 
> > Unlike other architectures, sh4 does this by calling ioremap().
> > That gives us an __iomem qualified pointer, which it then warns about
> > passing to copy_to_iter().
> > 
> > There are a bunch of hacky things we could do to fix it, but for such an
> > unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> > to break something while fixing the warning.  Someone who knows the arch
> > can figure out what to do properly.
> 
> Checked code, this can be fixed by casting away __iomem when feeding
> __iomem pointer into function which doesn't expect it. While seems the
> lkp failed me again.

Sure, that's one of the hacky ways.  But the important thing is that
the _current_ code has a warning.  LKP only sends a nastygram because
we changed the line.  If the current maintainers of the SH architecture
haven't been bothered to fix it, I don't see why we should.

> Subject: [PATCH] sh: cast away __iomem to remove sparse warning
> 
> This warning happened when __iomem pointer is passed into fucntion which
> does expect it. casting away the __iomem can fix it.
> 
> Signed-off-by: Baoquan He <bhe@redhat.com>
> ---
>  arch/sh/kernel/crash_dump.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
> index 19ce6a950aac..b45bb0b8a182 100644
> --- a/arch/sh/kernel/crash_dump.c
> +++ b/arch/sh/kernel/crash_dump.c
> @@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
>  		return 0;
>  
>  	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> -	csize = copy_to_iter(vaddr + offset, csize, iter);
> +	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
>  	iounmap(vaddr);
>  
>  	return csize;
> -- 
> 2.34.1
> 
> Hi Philipp,
> 
> I executed 'mkdir -p /root/bin', then can continue the next steps.
> However, the building failed with below message. I cloned linus's tree
> into the testing system. Then add remote
> https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
> I can test above code, I can merge it into patch in a new version.
> Otherwise, I will leave it alone as willy suggested.
> 
> [root at dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config
> --2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config
> Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
> Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
> Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
> Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 122058 (119K) [application/octet-stream]
> Saving to: ?config?
> 
> config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    
> 
> 2022-04-10 19:54:16 (769 KB/s) - ?config? saved [122058/122058]
> 
> [root at dell-pem710-02 linux]# mv config .config
> [root at dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> Compiler will be installed in /root/0day
> make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> make[1]: Entering directory '/root/linux/build_dir'
>   SYNC    include/config/auto.conf.cmd
> ***
> *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> *** in /root/linux
> ***
> make[2]: *** [../Makefile:574: outputmakefile] Error 1
>   HOSTCC  scripts/basic/fixdep
> make[2]: Target 'syncconfig' not remade because of errors.
> make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
> make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
> make[1]: Failed to remake makefile 'include/config/auto.conf'.
> ***
> *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> *** in /root/linux
> ***
> make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
>   SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
>   SYSTBL  arch/sh/include/generated/asm/syscall_table.h
> Error: kernelrelease not valid - run 'make prepare' to update it
>   HOSTCC  scripts/dtc/dtc.o
>   HOSTCC  scripts/dtc/flattree.o
>   HOSTCC  scripts/dtc/fstree.o
>   HOSTCC  scripts/dtc/data.o
>   HOSTCC  scripts/dtc/treesource.o
>   HOSTCC  scripts/dtc/livetree.o
>   HOSTCC  scripts/dtc/srcpos.o
>   HOSTCC  scripts/dtc/checks.o
>   HOSTCC  scripts/dtc/util.o
>   LEX     scripts/dtc/dtc-lexer.lex.c
>   YACC    scripts/dtc/dtc-parser.tab.[ch]
>   HOSTCC  scripts/dtc/libfdt/fdt.o
>   HOSTCC  scripts/dtc/libfdt/fdt_ro.o
>   HOSTCC  scripts/dtc/libfdt/fdt_sw.o
>   HOSTCC  scripts/dtc/libfdt/fdt_wip.o
>   HOSTCC  scripts/dtc/libfdt/fdt_rw.o
>   HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
>   HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
>   HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
>   HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
>   HOSTCC  scripts/dtc/fdtoverlay.o
>   HOSTCC  scripts/dtc/dtc-lexer.lex.o
>   HOSTCC  scripts/dtc/dtc-parser.tab.o
>   HOSTLD  scripts/dtc/fdtoverlay
>   HOSTLD  scripts/dtc/dtc
> make[1]: Target 'arch/sh/kernel/' not remade because of errors.
> make[1]: Leaving directory '/root/linux/build_dir'
> make: *** [Makefile:219: __sub-make] Error 2
> make: Target 'arch/sh/kernel/' not remade because of errors.
> [root at dell-pem710-02 linux]# 
> 
> 
> 
> > 
> 


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-11  1:32             ` Matthew Wilcox
  0 siblings, 0 replies; 41+ messages in thread
From: Matthew Wilcox @ 2022-04-11  1:32 UTC (permalink / raw)
  To: kbuild-all

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

On Mon, Apr 11, 2022 at 08:32:26AM +0800, Baoquan He wrote:
> On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> > On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > > I tried on x86_64 system, for the 1st step, I got this:
> > > 
> > > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > > /root/bin/make.cross: No such file or directory
> > 
> > ... I don't think we need to reproduce it to see the problem.
> > 
> > > > sparse warnings: (new ones prefixed by >>)
> > > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > > 
> > > > vim +23 arch/sh/kernel/crash_dump.c
> > > > 
> > > >     13	
> > > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > > >     15				 size_t csize, unsigned long offset)
> > > >     16	{
> > > >     17		void  __iomem *vaddr;
> > > >     18	
> > > >     19		if (!csize)
> > > >     20			return 0;
> > > >     21	
> > > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > 
> > Unlike other architectures, sh4 does this by calling ioremap().
> > That gives us an __iomem qualified pointer, which it then warns about
> > passing to copy_to_iter().
> > 
> > There are a bunch of hacky things we could do to fix it, but for such an
> > unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> > to break something while fixing the warning.  Someone who knows the arch
> > can figure out what to do properly.
> 
> Checked code, this can be fixed by casting away __iomem when feeding
> __iomem pointer into function which doesn't expect it. While seems the
> lkp failed me again.

Sure, that's one of the hacky ways.  But the important thing is that
the _current_ code has a warning.  LKP only sends a nastygram because
we changed the line.  If the current maintainers of the SH architecture
haven't been bothered to fix it, I don't see why we should.

> Subject: [PATCH] sh: cast away __iomem to remove sparse warning
> 
> This warning happened when __iomem pointer is passed into fucntion which
> does expect it. casting away the __iomem can fix it.
> 
> Signed-off-by: Baoquan He <bhe@redhat.com>
> ---
>  arch/sh/kernel/crash_dump.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
> index 19ce6a950aac..b45bb0b8a182 100644
> --- a/arch/sh/kernel/crash_dump.c
> +++ b/arch/sh/kernel/crash_dump.c
> @@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
>  		return 0;
>  
>  	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> -	csize = copy_to_iter(vaddr + offset, csize, iter);
> +	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
>  	iounmap(vaddr);
>  
>  	return csize;
> -- 
> 2.34.1
> 
> Hi Philipp,
> 
> I executed 'mkdir -p /root/bin', then can continue the next steps.
> However, the building failed with below message. I cloned linus's tree
> into the testing system. Then add remote
> https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
> I can test above code, I can merge it into patch in a new version.
> Otherwise, I will leave it alone as willy suggested.
> 
> [root(a)dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp(a)intel.com/config
> --2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp(a)intel.com/config
> Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
> Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
> Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
> Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
> HTTP request sent, awaiting response... 200 OK
> Length: 122058 (119K) [application/octet-stream]
> Saving to: ‘config’
> 
> config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    
> 
> 2022-04-10 19:54:16 (769 KB/s) - ‘config’ saved [122058/122058]
> 
> [root(a)dell-pem710-02 linux]# mv config .config
> [root(a)dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> Compiler will be installed in /root/0day
> make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> make[1]: Entering directory '/root/linux/build_dir'
>   SYNC    include/config/auto.conf.cmd
> ***
> *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> *** in /root/linux
> ***
> make[2]: *** [../Makefile:574: outputmakefile] Error 1
>   HOSTCC  scripts/basic/fixdep
> make[2]: Target 'syncconfig' not remade because of errors.
> make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
> make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
> make[1]: Failed to remake makefile 'include/config/auto.conf'.
> ***
> *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> *** in /root/linux
> ***
> make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
>   SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
>   SYSTBL  arch/sh/include/generated/asm/syscall_table.h
> Error: kernelrelease not valid - run 'make prepare' to update it
>   HOSTCC  scripts/dtc/dtc.o
>   HOSTCC  scripts/dtc/flattree.o
>   HOSTCC  scripts/dtc/fstree.o
>   HOSTCC  scripts/dtc/data.o
>   HOSTCC  scripts/dtc/treesource.o
>   HOSTCC  scripts/dtc/livetree.o
>   HOSTCC  scripts/dtc/srcpos.o
>   HOSTCC  scripts/dtc/checks.o
>   HOSTCC  scripts/dtc/util.o
>   LEX     scripts/dtc/dtc-lexer.lex.c
>   YACC    scripts/dtc/dtc-parser.tab.[ch]
>   HOSTCC  scripts/dtc/libfdt/fdt.o
>   HOSTCC  scripts/dtc/libfdt/fdt_ro.o
>   HOSTCC  scripts/dtc/libfdt/fdt_sw.o
>   HOSTCC  scripts/dtc/libfdt/fdt_wip.o
>   HOSTCC  scripts/dtc/libfdt/fdt_rw.o
>   HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
>   HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
>   HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
>   HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
>   HOSTCC  scripts/dtc/fdtoverlay.o
>   HOSTCC  scripts/dtc/dtc-lexer.lex.o
>   HOSTCC  scripts/dtc/dtc-parser.tab.o
>   HOSTLD  scripts/dtc/fdtoverlay
>   HOSTLD  scripts/dtc/dtc
> make[1]: Target 'arch/sh/kernel/' not remade because of errors.
> make[1]: Leaving directory '/root/linux/build_dir'
> make: *** [Makefile:219: __sub-make] Error 2
> make: Target 'arch/sh/kernel/' not remade because of errors.
> [root(a)dell-pem710-02 linux]# 
> 
> 
> 
> > 
> 

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-11  1:32             ` Matthew Wilcox
  (?)
@ 2022-04-11  1:58               ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-11  1:58 UTC (permalink / raw)
  To: Matthew Wilcox
  Cc: philip.li, kernel test robot, akpm, kbuild-all, linux-kernel,
	kexec, hch, yangtiezhu, amit.kachhap, linux-fsdevel, viro

On 04/11/22 at 02:32am, Matthew Wilcox wrote:
> On Mon, Apr 11, 2022 at 08:32:26AM +0800, Baoquan He wrote:
> > On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> > > On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > > > I tried on x86_64 system, for the 1st step, I got this:
> > > > 
> > > > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > > > /root/bin/make.cross: No such file or directory
> > > 
> > > ... I don't think we need to reproduce it to see the problem.
> > > 
> > > > > sparse warnings: (new ones prefixed by >>)
> > > > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > > > 
> > > > > vim +23 arch/sh/kernel/crash_dump.c
> > > > > 
> > > > >     13	
> > > > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > > > >     15				 size_t csize, unsigned long offset)
> > > > >     16	{
> > > > >     17		void  __iomem *vaddr;
> > > > >     18	
> > > > >     19		if (!csize)
> > > > >     20			return 0;
> > > > >     21	
> > > > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > > > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > > 
> > > Unlike other architectures, sh4 does this by calling ioremap().
> > > That gives us an __iomem qualified pointer, which it then warns about
> > > passing to copy_to_iter().
> > > 
> > > There are a bunch of hacky things we could do to fix it, but for such an
> > > unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> > > to break something while fixing the warning.  Someone who knows the arch
> > > can figure out what to do properly.
> > 
> > Checked code, this can be fixed by casting away __iomem when feeding
> > __iomem pointer into function which doesn't expect it. While seems the
> > lkp failed me again.
> 
> Sure, that's one of the hacky ways.  But the important thing is that
> the _current_ code has a warning.  LKP only sends a nastygram because
> we changed the line.  If the current maintainers of the SH architecture
> haven't been bothered to fix it, I don't see why we should.

Agree, it's an already existed drawback. Then I will leave it as is.

> 
> > Subject: [PATCH] sh: cast away __iomem to remove sparse warning
> > 
> > This warning happened when __iomem pointer is passed into fucntion which
> > does expect it. casting away the __iomem can fix it.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> >  arch/sh/kernel/crash_dump.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
> > index 19ce6a950aac..b45bb0b8a182 100644
> > --- a/arch/sh/kernel/crash_dump.c
> > +++ b/arch/sh/kernel/crash_dump.c
> > @@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >  		return 0;
> >  
> >  	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > -	csize = copy_to_iter(vaddr + offset, csize, iter);
> > +	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
> >  	iounmap(vaddr);
> >  
> >  	return csize;
> > -- 
> > 2.34.1
> > 
> > Hi Philipp,
> > 
> > I executed 'mkdir -p /root/bin', then can continue the next steps.
> > However, the building failed with below message. I cloned linus's tree
> > into the testing system. Then add remote
> > https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
> > I can test above code, I can merge it into patch in a new version.
> > Otherwise, I will leave it alone as willy suggested.
> > 
> > [root@dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
> > --2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp@intel.com/config
> > Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
> > Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
> > Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
> > Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
> > HTTP request sent, awaiting response... 200 OK
> > Length: 122058 (119K) [application/octet-stream]
> > Saving to: ‘config’
> > 
> > config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    
> > 
> > 2022-04-10 19:54:16 (769 KB/s) - ‘config’ saved [122058/122058]
> > 
> > [root@dell-pem710-02 linux]# mv config .config
> > [root@dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > Compiler will be installed in /root/0day
> > make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > make[1]: Entering directory '/root/linux/build_dir'
> >   SYNC    include/config/auto.conf.cmd
> > ***
> > *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> > *** in /root/linux
> > ***
> > make[2]: *** [../Makefile:574: outputmakefile] Error 1
> >   HOSTCC  scripts/basic/fixdep
> > make[2]: Target 'syncconfig' not remade because of errors.
> > make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
> > make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
> > make[1]: Failed to remake makefile 'include/config/auto.conf'.
> > ***
> > *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> > *** in /root/linux
> > ***
> > make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
> >   SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
> >   SYSTBL  arch/sh/include/generated/asm/syscall_table.h
> > Error: kernelrelease not valid - run 'make prepare' to update it
> >   HOSTCC  scripts/dtc/dtc.o
> >   HOSTCC  scripts/dtc/flattree.o
> >   HOSTCC  scripts/dtc/fstree.o
> >   HOSTCC  scripts/dtc/data.o
> >   HOSTCC  scripts/dtc/treesource.o
> >   HOSTCC  scripts/dtc/livetree.o
> >   HOSTCC  scripts/dtc/srcpos.o
> >   HOSTCC  scripts/dtc/checks.o
> >   HOSTCC  scripts/dtc/util.o
> >   LEX     scripts/dtc/dtc-lexer.lex.c
> >   YACC    scripts/dtc/dtc-parser.tab.[ch]
> >   HOSTCC  scripts/dtc/libfdt/fdt.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_ro.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_sw.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_wip.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_rw.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
> >   HOSTCC  scripts/dtc/fdtoverlay.o
> >   HOSTCC  scripts/dtc/dtc-lexer.lex.o
> >   HOSTCC  scripts/dtc/dtc-parser.tab.o
> >   HOSTLD  scripts/dtc/fdtoverlay
> >   HOSTLD  scripts/dtc/dtc
> > make[1]: Target 'arch/sh/kernel/' not remade because of errors.
> > make[1]: Leaving directory '/root/linux/build_dir'
> > make: *** [Makefile:219: __sub-make] Error 2
> > make: Target 'arch/sh/kernel/' not remade because of errors.
> > [root@dell-pem710-02 linux]# 
> > 
> > 
> > 
> > > 
> > 
> 


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-11  1:58               ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-11  1:58 UTC (permalink / raw)
  To: kexec

On 04/11/22 at 02:32am, Matthew Wilcox wrote:
> On Mon, Apr 11, 2022 at 08:32:26AM +0800, Baoquan He wrote:
> > On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> > > On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > > > I tried on x86_64 system, for the 1st step, I got this:
> > > > 
> > > > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > > > /root/bin/make.cross: No such file or directory
> > > 
> > > ... I don't think we need to reproduce it to see the problem.
> > > 
> > > > > sparse warnings: (new ones prefixed by >>)
> > > > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > > > 
> > > > > vim +23 arch/sh/kernel/crash_dump.c
> > > > > 
> > > > >     13	
> > > > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > > > >     15				 size_t csize, unsigned long offset)
> > > > >     16	{
> > > > >     17		void  __iomem *vaddr;
> > > > >     18	
> > > > >     19		if (!csize)
> > > > >     20			return 0;
> > > > >     21	
> > > > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > > > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > > 
> > > Unlike other architectures, sh4 does this by calling ioremap().
> > > That gives us an __iomem qualified pointer, which it then warns about
> > > passing to copy_to_iter().
> > > 
> > > There are a bunch of hacky things we could do to fix it, but for such an
> > > unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> > > to break something while fixing the warning.  Someone who knows the arch
> > > can figure out what to do properly.
> > 
> > Checked code, this can be fixed by casting away __iomem when feeding
> > __iomem pointer into function which doesn't expect it. While seems the
> > lkp failed me again.
> 
> Sure, that's one of the hacky ways.  But the important thing is that
> the _current_ code has a warning.  LKP only sends a nastygram because
> we changed the line.  If the current maintainers of the SH architecture
> haven't been bothered to fix it, I don't see why we should.

Agree, it's an already existed drawback. Then I will leave it as is.

> 
> > Subject: [PATCH] sh: cast away __iomem to remove sparse warning
> > 
> > This warning happened when __iomem pointer is passed into fucntion which
> > does expect it. casting away the __iomem can fix it.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> >  arch/sh/kernel/crash_dump.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
> > index 19ce6a950aac..b45bb0b8a182 100644
> > --- a/arch/sh/kernel/crash_dump.c
> > +++ b/arch/sh/kernel/crash_dump.c
> > @@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >  		return 0;
> >  
> >  	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > -	csize = copy_to_iter(vaddr + offset, csize, iter);
> > +	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
> >  	iounmap(vaddr);
> >  
> >  	return csize;
> > -- 
> > 2.34.1
> > 
> > Hi Philipp,
> > 
> > I executed 'mkdir -p /root/bin', then can continue the next steps.
> > However, the building failed with below message. I cloned linus's tree
> > into the testing system. Then add remote
> > https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
> > I can test above code, I can merge it into patch in a new version.
> > Otherwise, I will leave it alone as willy suggested.
> > 
> > [root at dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config
> > --2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp at intel.com/config
> > Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
> > Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
> > Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
> > Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
> > HTTP request sent, awaiting response... 200 OK
> > Length: 122058 (119K) [application/octet-stream]
> > Saving to: ?config?
> > 
> > config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    
> > 
> > 2022-04-10 19:54:16 (769 KB/s) - ?config? saved [122058/122058]
> > 
> > [root at dell-pem710-02 linux]# mv config .config
> > [root at dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > Compiler will be installed in /root/0day
> > make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > make[1]: Entering directory '/root/linux/build_dir'
> >   SYNC    include/config/auto.conf.cmd
> > ***
> > *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> > *** in /root/linux
> > ***
> > make[2]: *** [../Makefile:574: outputmakefile] Error 1
> >   HOSTCC  scripts/basic/fixdep
> > make[2]: Target 'syncconfig' not remade because of errors.
> > make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
> > make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
> > make[1]: Failed to remake makefile 'include/config/auto.conf'.
> > ***
> > *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> > *** in /root/linux
> > ***
> > make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
> >   SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
> >   SYSTBL  arch/sh/include/generated/asm/syscall_table.h
> > Error: kernelrelease not valid - run 'make prepare' to update it
> >   HOSTCC  scripts/dtc/dtc.o
> >   HOSTCC  scripts/dtc/flattree.o
> >   HOSTCC  scripts/dtc/fstree.o
> >   HOSTCC  scripts/dtc/data.o
> >   HOSTCC  scripts/dtc/treesource.o
> >   HOSTCC  scripts/dtc/livetree.o
> >   HOSTCC  scripts/dtc/srcpos.o
> >   HOSTCC  scripts/dtc/checks.o
> >   HOSTCC  scripts/dtc/util.o
> >   LEX     scripts/dtc/dtc-lexer.lex.c
> >   YACC    scripts/dtc/dtc-parser.tab.[ch]
> >   HOSTCC  scripts/dtc/libfdt/fdt.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_ro.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_sw.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_wip.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_rw.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
> >   HOSTCC  scripts/dtc/fdtoverlay.o
> >   HOSTCC  scripts/dtc/dtc-lexer.lex.o
> >   HOSTCC  scripts/dtc/dtc-parser.tab.o
> >   HOSTLD  scripts/dtc/fdtoverlay
> >   HOSTLD  scripts/dtc/dtc
> > make[1]: Target 'arch/sh/kernel/' not remade because of errors.
> > make[1]: Leaving directory '/root/linux/build_dir'
> > make: *** [Makefile:219: __sub-make] Error 2
> > make: Target 'arch/sh/kernel/' not remade because of errors.
> > [root at dell-pem710-02 linux]# 
> > 
> > 
> > 
> > > 
> > 
> 



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-11  1:58               ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-11  1:58 UTC (permalink / raw)
  To: kbuild-all

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

On 04/11/22 at 02:32am, Matthew Wilcox wrote:
> On Mon, Apr 11, 2022 at 08:32:26AM +0800, Baoquan He wrote:
> > On 04/09/22 at 02:44am, Matthew Wilcox wrote:
> > > On Sat, Apr 09, 2022 at 09:02:29AM +0800, Baoquan He wrote:
> > > > I tried on x86_64 system, for the 1st step, I got this:
> > > > 
> > > > [ ~]# wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> > > > /root/bin/make.cross: No such file or directory
> > > 
> > > ... I don't think we need to reproduce it to see the problem.
> > > 
> > > > > sparse warnings: (new ones prefixed by >>)
> > > > > >> arch/sh/kernel/crash_dump.c:23:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const *addr @@     got void [noderef] __iomem * @@
> > > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     expected void const *addr
> > > > >    arch/sh/kernel/crash_dump.c:23:36: sparse:     got void [noderef] __iomem *
> > > > > 
> > > > > vim +23 arch/sh/kernel/crash_dump.c
> > > > > 
> > > > >     13	
> > > > >     14	ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> > > > >     15				 size_t csize, unsigned long offset)
> > > > >     16	{
> > > > >     17		void  __iomem *vaddr;
> > > > >     18	
> > > > >     19		if (!csize)
> > > > >     20			return 0;
> > > > >     21	
> > > > >     22		vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > > > >   > 23		csize = copy_to_iter(vaddr + offset, csize, iter);
> > > 
> > > Unlike other architectures, sh4 does this by calling ioremap().
> > > That gives us an __iomem qualified pointer, which it then warns about
> > > passing to copy_to_iter().
> > > 
> > > There are a bunch of hacky things we could do to fix it, but for such an
> > > unmaintained arch as sh, I'm inclined to do nothing.  We're more likely
> > > to break something while fixing the warning.  Someone who knows the arch
> > > can figure out what to do properly.
> > 
> > Checked code, this can be fixed by casting away __iomem when feeding
> > __iomem pointer into function which doesn't expect it. While seems the
> > lkp failed me again.
> 
> Sure, that's one of the hacky ways.  But the important thing is that
> the _current_ code has a warning.  LKP only sends a nastygram because
> we changed the line.  If the current maintainers of the SH architecture
> haven't been bothered to fix it, I don't see why we should.

Agree, it's an already existed drawback. Then I will leave it as is.

> 
> > Subject: [PATCH] sh: cast away __iomem to remove sparse warning
> > 
> > This warning happened when __iomem pointer is passed into fucntion which
> > does expect it. casting away the __iomem can fix it.
> > 
> > Signed-off-by: Baoquan He <bhe@redhat.com>
> > ---
> >  arch/sh/kernel/crash_dump.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/arch/sh/kernel/crash_dump.c b/arch/sh/kernel/crash_dump.c
> > index 19ce6a950aac..b45bb0b8a182 100644
> > --- a/arch/sh/kernel/crash_dump.c
> > +++ b/arch/sh/kernel/crash_dump.c
> > @@ -20,7 +20,7 @@ ssize_t copy_oldmem_page(struct iov_iter *iter, unsigned long pfn,
> >  		return 0;
> >  
> >  	vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
> > -	csize = copy_to_iter(vaddr + offset, csize, iter);
> > +	csize = copy_to_iter((void __force *)vaddr + offset, csize, iter);
> >  	iounmap(vaddr);
> >  
> >  	return csize;
> > -- 
> > 2.34.1
> > 
> > Hi Philipp,
> > 
> > I executed 'mkdir -p /root/bin', then can continue the next steps.
> > However, the building failed with below message. I cloned linus's tree
> > into the testing system. Then add remote
> > https://github.com/intel-lab-lkp/linux. Forgive my stupidity on this. If
> > I can test above code, I can merge it into patch in a new version.
> > Otherwise, I will leave it alone as willy suggested.
> > 
> > [root(a)dell-pem710-02 linux]# wget https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp(a)intel.com/config
> > --2022-04-10 19:54:15--  https://download.01.org/0day-ci/archive/20220408/202204082128.JKXXDGpa-lkp(a)intel.com/config
> > Resolving download.01.org (download.01.org)... 2600:1408:20:c90::4b21, 2600:1408:20:c9b::4b21, 23.208.55.108
> > Connecting to download.01.org (download.01.org)|2600:1408:20:c90::4b21|:443... failed: Network is unreachable.
> > Connecting to download.01.org (download.01.org)|2600:1408:20:c9b::4b21|:443... failed: Network is unreachable.
> > Connecting to download.01.org (download.01.org)|23.208.55.108|:443... connected.
> > HTTP request sent, awaiting response... 200 OK
> > Length: 122058 (119K) [application/octet-stream]
> > Saving to: ‘config’
> > 
> > config                            100%[============================================================>] 119.20K   769KB/s    in 0.2s    
> > 
> > 2022-04-10 19:54:16 (769 KB/s) - ‘config’ saved [122058/122058]
> > 
> > [root(a)dell-pem710-02 linux]# mv config .config
> > [root(a)dell-pem710-02 linux]# COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > Compiler will be installed in /root/0day
> > make --keep-going CONFIG_OF_ALL_DTBS=y CONFIG_DTC=y CROSS_COMPILE=/root/0day/gcc-9.3.0-nolibc/sh4-linux/bin/sh4-linux- --jobs=32 C=1 CF=-fdiagnostic-prefix -D__CHECK_ENDIAN__ O=build_dir ARCH=sh SHELL=/bin/bash arch/sh/kernel/
> > make[1]: Entering directory '/root/linux/build_dir'
> >   SYNC    include/config/auto.conf.cmd
> > ***
> > *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> > *** in /root/linux
> > ***
> > make[2]: *** [../Makefile:574: outputmakefile] Error 1
> >   HOSTCC  scripts/basic/fixdep
> > make[2]: Target 'syncconfig' not remade because of errors.
> > make[1]: *** [/root/linux/Makefile:722: include/config/auto.conf.cmd] Error 2
> > make[1]: Failed to remake makefile 'include/config/auto.conf.cmd'.
> > make[1]: Failed to remake makefile 'include/config/auto.conf'.
> > ***
> > *** The source tree is not clean, please run 'make ARCH=sh mrproper'
> > *** in /root/linux
> > ***
> > make[1]: *** [/root/linux/Makefile:574: outputmakefile] Error 1
> >   SYSHDR  arch/sh/include/generated/uapi/asm/unistd_32.h
> >   SYSTBL  arch/sh/include/generated/asm/syscall_table.h
> > Error: kernelrelease not valid - run 'make prepare' to update it
> >   HOSTCC  scripts/dtc/dtc.o
> >   HOSTCC  scripts/dtc/flattree.o
> >   HOSTCC  scripts/dtc/fstree.o
> >   HOSTCC  scripts/dtc/data.o
> >   HOSTCC  scripts/dtc/treesource.o
> >   HOSTCC  scripts/dtc/livetree.o
> >   HOSTCC  scripts/dtc/srcpos.o
> >   HOSTCC  scripts/dtc/checks.o
> >   HOSTCC  scripts/dtc/util.o
> >   LEX     scripts/dtc/dtc-lexer.lex.c
> >   YACC    scripts/dtc/dtc-parser.tab.[ch]
> >   HOSTCC  scripts/dtc/libfdt/fdt.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_ro.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_sw.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_wip.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_rw.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_strerror.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_empty_tree.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_addresses.o
> >   HOSTCC  scripts/dtc/libfdt/fdt_overlay.o
> >   HOSTCC  scripts/dtc/fdtoverlay.o
> >   HOSTCC  scripts/dtc/dtc-lexer.lex.o
> >   HOSTCC  scripts/dtc/dtc-parser.tab.o
> >   HOSTLD  scripts/dtc/fdtoverlay
> >   HOSTLD  scripts/dtc/dtc
> > make[1]: Target 'arch/sh/kernel/' not remade because of errors.
> > make[1]: Leaving directory '/root/linux/build_dir'
> > make: *** [Makefile:219: __sub-make] Error 2
> > make: Target 'arch/sh/kernel/' not remade because of errors.
> > [root(a)dell-pem710-02 linux]# 
> > 
> > 
> > 
> > > 
> > 
> 

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
  2022-04-08  9:24   ` Baoquan He
@ 2022-04-11  8:59     ` Heiko Carstens
  -1 siblings, 0 replies; 41+ messages in thread
From: Heiko Carstens @ 2022-04-11  8:59 UTC (permalink / raw)
  To: Baoquan He
  Cc: akpm, willy, linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro

On Fri, Apr 08, 2022 at 05:24:28PM +0800, Baoquan He wrote:
> Add Heiko to CC.
> 
> On 04/08/22 at 05:06pm, Baoquan He wrote:
> > Copy the description of v3 cover letter from Willy:
> > ===
> > For some reason several people have been sending bad patches to fix
> > compiler warnings in vmcore recently.  Here's how it should be done.
> > Compile-tested only on x86.  As noted in the first patch, s390 should
> > take this conversion a bit further, but I'm not inclined to do that
> > work myself.
> 
> Forgot adding Heiko to CC again.
> 
> Hi Heiko,
> 
> Andrew worried you may miss the note, "As noted in the first patch,
> s390 should take this conversion a bit further, but I'm not inclined
> to do that work myself." written in cover letter from willy.
> 
> I told him you had already known this in v1 discussion. So add you in CC
> list as Andrew required. Adding words to explain, just in case confusion.

Thanks for letting me know again. I'm still aware of this, but would
appreciate if I could be added to cc in the first patch of this
series, so I get notified when Andrew sends this Linus.

Thanks a lot!

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
@ 2022-04-11  8:59     ` Heiko Carstens
  0 siblings, 0 replies; 41+ messages in thread
From: Heiko Carstens @ 2022-04-11  8:59 UTC (permalink / raw)
  To: kexec

On Fri, Apr 08, 2022 at 05:24:28PM +0800, Baoquan He wrote:
> Add Heiko to CC.
> 
> On 04/08/22 at 05:06pm, Baoquan He wrote:
> > Copy the description of v3 cover letter from Willy:
> > ===
> > For some reason several people have been sending bad patches to fix
> > compiler warnings in vmcore recently.  Here's how it should be done.
> > Compile-tested only on x86.  As noted in the first patch, s390 should
> > take this conversion a bit further, but I'm not inclined to do that
> > work myself.
> 
> Forgot adding Heiko to CC again.
> 
> Hi Heiko,
> 
> Andrew worried you may miss the note, "As noted in the first patch,
> s390 should take this conversion a bit further, but I'm not inclined
> to do that work myself." written in cover letter from willy.
> 
> I told him you had already known this in v1 discussion. So add you in CC
> list as Andrew required. Adding words to explain, just in case confusion.

Thanks for letting me know again. I'm still aware of this, but would
appreciate if I could be added to cc in the first patch of this
series, so I get notified when Andrew sends this Linus.

Thanks a lot!


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
  2022-04-11  8:59     ` Heiko Carstens
@ 2022-04-13  9:29       ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-13  9:29 UTC (permalink / raw)
  To: Heiko Carstens, hch
  Cc: akpm, willy, linux-kernel, kexec, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro

On 04/11/22 at 10:59am, Heiko Carstens wrote:
> On Fri, Apr 08, 2022 at 05:24:28PM +0800, Baoquan He wrote:
> > Add Heiko to CC.
> > 
> > On 04/08/22 at 05:06pm, Baoquan He wrote:
> > > Copy the description of v3 cover letter from Willy:
> > > ===
> > > For some reason several people have been sending bad patches to fix
> > > compiler warnings in vmcore recently.  Here's how it should be done.
> > > Compile-tested only on x86.  As noted in the first patch, s390 should
> > > take this conversion a bit further, but I'm not inclined to do that
> > > work myself.
> > 
> > Forgot adding Heiko to CC again.
> > 
> > Hi Heiko,
> > 
> > Andrew worried you may miss the note, "As noted in the first patch,
> > s390 should take this conversion a bit further, but I'm not inclined
> > to do that work myself." written in cover letter from willy.
> > 
> > I told him you had already known this in v1 discussion. So add you in CC
> > list as Andrew required. Adding words to explain, just in case confusion.
> 
> Thanks for letting me know again. I'm still aware of this, but would
> appreciate if I could be added to cc in the first patch of this
> series, so I get notified when Andrew sends this Linus.

Right, it's my neglect. I should CC all involved during the discussion.

By the way, could both of you, Heiko, Christoph, help check this
patchset and offer your ack again if it's OK to you? I removed
Christoph's Reviewed-by because there's some change as per Al's 
comment, and replace my own 'Acked-by' with 'Signed-off-by' according to
our posting rule.


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
@ 2022-04-13  9:29       ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-13  9:29 UTC (permalink / raw)
  To: kexec

On 04/11/22 at 10:59am, Heiko Carstens wrote:
> On Fri, Apr 08, 2022 at 05:24:28PM +0800, Baoquan He wrote:
> > Add Heiko to CC.
> > 
> > On 04/08/22 at 05:06pm, Baoquan He wrote:
> > > Copy the description of v3 cover letter from Willy:
> > > ===
> > > For some reason several people have been sending bad patches to fix
> > > compiler warnings in vmcore recently.  Here's how it should be done.
> > > Compile-tested only on x86.  As noted in the first patch, s390 should
> > > take this conversion a bit further, but I'm not inclined to do that
> > > work myself.
> > 
> > Forgot adding Heiko to CC again.
> > 
> > Hi Heiko,
> > 
> > Andrew worried you may miss the note, "As noted in the first patch,
> > s390 should take this conversion a bit further, but I'm not inclined
> > to do that work myself." written in cover letter from willy.
> > 
> > I told him you had already known this in v1 discussion. So add you in CC
> > list as Andrew required. Adding words to explain, just in case confusion.
> 
> Thanks for letting me know again. I'm still aware of this, but would
> appreciate if I could be added to cc in the first patch of this
> series, so I get notified when Andrew sends this Linus.

Right, it's my neglect. I should CC all involved during the discussion.

By the way, could both of you, Heiko, Christoph, help check this
patchset and offer your ack again if it's OK to you? I removed
Christoph's Reviewed-by because there's some change as per Al's 
comment, and replace my own 'Acked-by' with 'Signed-off-by' according to
our posting rule.



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
  2022-04-08  9:06   ` Baoquan He
@ 2022-04-13 16:40     ` Christoph Hellwig
  -1 siblings, 0 replies; 41+ messages in thread
From: Christoph Hellwig @ 2022-04-13 16:40 UTC (permalink / raw)
  To: Baoquan He
  Cc: akpm, willy, linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take an iov_iter
@ 2022-04-13 16:40     ` Christoph Hellwig
  0 siblings, 0 replies; 41+ messages in thread
From: Christoph Hellwig @ 2022-04-13 16:40 UTC (permalink / raw)
  To: kexec

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 2/3] vmcore: Convert __read_vmcore to use an iov_iter
  2022-04-08  9:06   ` Baoquan He
@ 2022-04-13 16:40     ` Christoph Hellwig
  -1 siblings, 0 replies; 41+ messages in thread
From: Christoph Hellwig @ 2022-04-13 16:40 UTC (permalink / raw)
  To: Baoquan He
  Cc: akpm, willy, linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro

On Fri, Apr 08, 2022 at 05:06:35PM +0800, Baoquan He wrote:
> From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
> 
> This gets rid of copy_to() and let us use proc_read_iter() instead
> of proc_read().
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Signed-off-by: Baoquan He <bhe@redhat.com>

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 2/3] vmcore: Convert __read_vmcore to use an iov_iter
@ 2022-04-13 16:40     ` Christoph Hellwig
  0 siblings, 0 replies; 41+ messages in thread
From: Christoph Hellwig @ 2022-04-13 16:40 UTC (permalink / raw)
  To: kexec

On Fri, Apr 08, 2022 at 05:06:35PM +0800, Baoquan He wrote:
> From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
> 
> This gets rid of copy_to() and let us use proc_read_iter() instead
> of proc_read().
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Signed-off-by: Baoquan He <bhe@redhat.com>

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 3/3] vmcore: Convert read_from_oldmem() to take an iov_iter
  2022-04-08  9:06   ` Baoquan He
@ 2022-04-13 16:41     ` Christoph Hellwig
  -1 siblings, 0 replies; 41+ messages in thread
From: Christoph Hellwig @ 2022-04-13 16:41 UTC (permalink / raw)
  To: Baoquan He
  Cc: akpm, willy, linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro

On Fri, Apr 08, 2022 at 05:06:36PM +0800, Baoquan He wrote:
> From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
> 
> Remove the read_from_oldmem() wrapper introduced earlier and convert
> all the remaining callers to pass an iov_iter.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Signed-off-by: Baoquan He <bhe@redhat.com>

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>

^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 3/3] vmcore: Convert read_from_oldmem() to take an iov_iter
@ 2022-04-13 16:41     ` Christoph Hellwig
  0 siblings, 0 replies; 41+ messages in thread
From: Christoph Hellwig @ 2022-04-13 16:41 UTC (permalink / raw)
  To: kexec

On Fri, Apr 08, 2022 at 05:06:36PM +0800, Baoquan He wrote:
> From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
> 
> Remove the read_from_oldmem() wrapper introduced earlier and convert
> all the remaining callers to pass an iov_iter.
> 
> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
> Signed-off-by: Baoquan He <bhe@redhat.com>

Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
  2022-04-08  9:06 ` Baoquan He
@ 2022-04-25  3:40   ` Baoquan He
  -1 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-25  3:40 UTC (permalink / raw)
  To: akpm
  Cc: linux-kernel, kexec, hch, yangtiezhu, amit.kachhap,
	linux-fsdevel, viro, willy

Hi Andrew,

On 04/08/22 at 05:06pm, Baoquan He wrote:
> Copy the description of v3 cover letter from Willy:
> ===
> For some reason several people have been sending bad patches to fix
> compiler warnings in vmcore recently.  Here's how it should be done.
> Compile-tested only on x86.  As noted in the first patch, s390 should
> take this conversion a bit further, but I'm not inclined to do that
> work myself.

Ping!

This patchset has got one ack, can we merge it now?

The lkp reported issue is not related to this patchset, but an existed
one. We can fix it in another patch.

Thanks
Baoquan


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter
@ 2022-04-25  3:40   ` Baoquan He
  0 siblings, 0 replies; 41+ messages in thread
From: Baoquan He @ 2022-04-25  3:40 UTC (permalink / raw)
  To: kexec

Hi Andrew,

On 04/08/22 at 05:06pm, Baoquan He wrote:
> Copy the description of v3 cover letter from Willy:
> ===
> For some reason several people have been sending bad patches to fix
> compiler warnings in vmcore recently.  Here's how it should be done.
> Compile-tested only on x86.  As noted in the first patch, s390 should
> take this conversion a bit further, but I'm not inclined to do that
> work myself.

Ping!

This patchset has got one ack, can we merge it now?

The lkp reported issue is not related to this patchset, but an existed
one. We can fix it in another patch.

Thanks
Baoquan



^ permalink raw reply	[flat|nested] 41+ messages in thread

end of thread, other threads:[~2022-04-25  3:42 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-08  9:06 [PATCH v5 RESEND 0/3] Convert vmcore to use an iov_iter Baoquan He
2022-04-08  9:06 ` Baoquan He
2022-04-08  9:06 ` [PATCH v5 RESEND 1/3] vmcore: Convert copy_oldmem_page() to take " Baoquan He
2022-04-08  9:06   ` Baoquan He
2022-04-08 13:17   ` kernel test robot
2022-04-08 13:17     ` kernel test robot
2022-04-09  1:02     ` Baoquan He
2022-04-09  1:02       ` Baoquan He
2022-04-09  1:02       ` Baoquan He
2022-04-09  1:24       ` [kbuild-all] " Philip Li
2022-04-09  1:24         ` Philip Li
2022-04-09  1:44       ` Matthew Wilcox
2022-04-09  1:44         ` Matthew Wilcox
2022-04-09  1:44         ` Matthew Wilcox
2022-04-11  0:32         ` Baoquan He
2022-04-11  0:32           ` Baoquan He
2022-04-11  0:32           ` Baoquan He
2022-04-11  1:32           ` Matthew Wilcox
2022-04-11  1:32             ` Matthew Wilcox
2022-04-11  1:32             ` Matthew Wilcox
2022-04-11  1:58             ` Baoquan He
2022-04-11  1:58               ` Baoquan He
2022-04-11  1:58               ` Baoquan He
2022-04-13 16:40   ` Christoph Hellwig
2022-04-13 16:40     ` Christoph Hellwig
2022-04-08  9:06 ` [PATCH v5 RESEND 2/3] vmcore: Convert __read_vmcore to use " Baoquan He
2022-04-08  9:06   ` Baoquan He
2022-04-13 16:40   ` Christoph Hellwig
2022-04-13 16:40     ` Christoph Hellwig
2022-04-08  9:06 ` [PATCH v5 RESEND 3/3] vmcore: Convert read_from_oldmem() to take " Baoquan He
2022-04-08  9:06   ` Baoquan He
2022-04-13 16:41   ` Christoph Hellwig
2022-04-13 16:41     ` Christoph Hellwig
2022-04-08  9:24 ` [PATCH v5 RESEND 0/3] Convert vmcore to use " Baoquan He
2022-04-08  9:24   ` Baoquan He
2022-04-11  8:59   ` Heiko Carstens
2022-04-11  8:59     ` Heiko Carstens
2022-04-13  9:29     ` Baoquan He
2022-04-13  9:29       ` Baoquan He
2022-04-25  3:40 ` Baoquan He
2022-04-25  3:40   ` Baoquan He

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.