From: Palmer Dabbelt <palmer@dabbelt.com>
To: mick@ics.forth.gr
Cc: linux@armlinux.org.uk, catalin.marinas@arm.com, will@kernel.org,
Arnd Bergmann <arnd@arndb.de>,
rppt@linux.ibm.com, akpm@linux-foundation.org,
linus.walleij@linaro.org, mchehab+samsung@kernel.org,
gregory.0xf0@gmail.com, masahiroy@kernel.org,
Nick Desaulniers <ndesaulniers@google.com>,
bgolaszewski@baylibre.com,
Palmer Dabbelt <palmerdabbelt@google.com>,
mingo@kernel.org, ben-linux@fluff.org, peterz@infradead.org,
broonie@kernel.org, davem@davemloft.net, rdunlap@infradead.org,
uwe@kleine-koenig.org, dan.j.williams@intel.com,
mhiramat@kernel.org, matti.vaittinen@fi.rohmeurope.com,
zaslonko@linux.ibm.com, willy@infradead.org, krzk@kernel.org,
paulmck@kernel.org, pmladek@suse.com, brendanhiggins@google.com,
keescook@chromium.org, glider@google.com, elver@google.com,
davidgow@google.com, mark.rutland@arm.com, ardb@kernel.org,
takahiro.akashi@linaro.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, kernel-team@android.com
Subject: [PATCH 1/3] lib: Add a generic copy_oldmem_page()
Date: Fri, 10 Jul 2020 20:55:42 -0700 [thread overview]
Message-ID: <20200711035544.2832154-2-palmer@dabbelt.com> (raw)
In-Reply-To: <20200711035544.2832154-1-palmer@dabbelt.com>
From: Palmer Dabbelt <palmerdabbelt@google.com>
A version of this that is identical to the arm64 version was recently
copied into the RISC-V port while adding kexec() support. Instead I'd
like to put a shared copy in lib/ and use it from the various ports.
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
---
lib/Kconfig | 3 +++
lib/Makefile | 2 ++
lib/copy_oldmem_page.c | 51 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 56 insertions(+)
create mode 100644 lib/copy_oldmem_page.c
diff --git a/lib/Kconfig b/lib/Kconfig
index df3f3da95990..25544abc9547 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -676,3 +676,6 @@ config GENERIC_LIB_CMPDI2
config GENERIC_LIB_UCMPDI2
bool
+
+config GENERIC_LIB_COPY_OLDMEM_PAGE
+ bool
diff --git a/lib/Makefile b/lib/Makefile
index b1c42c10073b..30d57d8b32b1 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -318,3 +318,5 @@ obj-$(CONFIG_OBJAGG) += objagg.o
# KUnit tests
obj-$(CONFIG_LIST_KUNIT_TEST) += list-test.o
obj-$(CONFIG_LINEAR_RANGES_TEST) += test_linear_ranges.o
+
+obj-$(CONFIG_GENERIC_LIB_COPY_OLDMEM_PAGE) += copy_oldmem_page.o
diff --git a/lib/copy_oldmem_page.c b/lib/copy_oldmem_page.c
new file mode 100644
index 000000000000..f0090027218a
--- /dev/null
+++ b/lib/copy_oldmem_page.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Routines for doing kexec-based kdump
+ *
+ * Originally part of arch/arm64/kernel/crash_dump.c
+ * Copyright (C) 2017 Linaro Limited
+ * Author: AKASHI Takahiro <takahiro.akashi@linaro.org>
+ */
+
+#include <linux/io.h>
+#include <linux/types.h>
+#include <linux/uaccess.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)
+{
+ void *vaddr;
+
+ if (!csize)
+ return 0;
+
+ vaddr = memremap(__pfn_to_phys(pfn), PAGE_SIZE, MEMREMAP_WB);
+ 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);
+ }
+
+ memunmap(vaddr);
+
+ return csize;
+}
--
2.27.0.383.g050319c2ae-goog
next prev parent reply other threads:[~2020-07-11 3:59 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-11 3:55 Add and use " Palmer Dabbelt
2020-07-11 3:55 ` Palmer Dabbelt [this message]
2020-07-13 13:06 ` [PATCH 1/3] lib: Add " Christoph Hellwig
2020-07-13 13:39 ` Arnd Bergmann
2020-07-14 11:05 ` Christoph Hellwig
2020-07-14 11:38 ` Arnd Bergmann
2020-07-15 7:03 ` Ard Biesheuvel
2020-07-11 3:55 ` [PATCH 2/3] arm: Use the new " Palmer Dabbelt
2020-07-16 12:54 ` Linus Walleij
2020-07-11 3:55 ` [PATCH 3/3] arm64: " Palmer Dabbelt
2020-07-14 20:37 ` Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200711035544.2832154-2-palmer@dabbelt.com \
--to=palmer@dabbelt.com \
--cc=akpm@linux-foundation.org \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=ben-linux@fluff.org \
--cc=bgolaszewski@baylibre.com \
--cc=brendanhiggins@google.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=dan.j.williams@intel.com \
--cc=davem@davemloft.net \
--cc=davidgow@google.com \
--cc=elver@google.com \
--cc=glider@google.com \
--cc=gregory.0xf0@gmail.com \
--cc=keescook@chromium.org \
--cc=kernel-team@android.com \
--cc=krzk@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mark.rutland@arm.com \
--cc=masahiroy@kernel.org \
--cc=matti.vaittinen@fi.rohmeurope.com \
--cc=mchehab+samsung@kernel.org \
--cc=mhiramat@kernel.org \
--cc=mick@ics.forth.gr \
--cc=mingo@kernel.org \
--cc=ndesaulniers@google.com \
--cc=palmerdabbelt@google.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=rdunlap@infradead.org \
--cc=rppt@linux.ibm.com \
--cc=takahiro.akashi@linaro.org \
--cc=uwe@kleine-koenig.org \
--cc=will@kernel.org \
--cc=willy@infradead.org \
--cc=zaslonko@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®