summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Gortmaker <paul.gortmaker@windriver.com>2019-09-11 15:44:10 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2019-09-11 15:46:01 -0400
commiteb1123a93d662a658eb3dd85edd247c3ec4c46d8 (patch)
tree34b696e267476da1225b745baa10f4fe22e9b397
parent8f1e71c1e27a65493db6999015065ec1715b3f98 (diff)
downloadlongterm-queue-4.18-eb1123a93d662a658eb3dd85edd247c3ec4c46d8.tar.gz
pstore: drop already applied patches
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
-rw-r--r--queue/pstore-Convert-buf_lock-to-semaphore.patch245
-rw-r--r--queue/pstore-Remove-needless-lock-during-console-writes.patch59
-rw-r--r--queue/series2
3 files changed, 0 insertions, 306 deletions
diff --git a/queue/pstore-Convert-buf_lock-to-semaphore.patch b/queue/pstore-Convert-buf_lock-to-semaphore.patch
deleted file mode 100644
index 6d2915e..0000000
--- a/queue/pstore-Convert-buf_lock-to-semaphore.patch
+++ /dev/null
@@ -1,245 +0,0 @@
-From ea84b580b95521644429cc6748b6c2bf27c8b0f3 Mon Sep 17 00:00:00 2001
-From: Kees Cook <keescook@chromium.org>
-Date: Fri, 30 Nov 2018 14:36:58 -0800
-Subject: [PATCH] pstore: Convert buf_lock to semaphore
-
-commit ea84b580b95521644429cc6748b6c2bf27c8b0f3 upstream.
-
-Instead of running with interrupts disabled, use a semaphore. This should
-make it easier for backends that may need to sleep (e.g. EFI) when
-performing a write:
-
-|BUG: sleeping function called from invalid context at kernel/sched/completion.c:99
-|in_atomic(): 1, irqs_disabled(): 1, pid: 2236, name: sig-xstate-bum
-|Preemption disabled at:
-|[<ffffffff99d60512>] pstore_dump+0x72/0x330
-|CPU: 26 PID: 2236 Comm: sig-xstate-bum Tainted: G D 4.20.0-rc3 #45
-|Call Trace:
-| dump_stack+0x4f/0x6a
-| ___might_sleep.cold.91+0xd3/0xe4
-| __might_sleep+0x50/0x90
-| wait_for_completion+0x32/0x130
-| virt_efi_query_variable_info+0x14e/0x160
-| efi_query_variable_store+0x51/0x1a0
-| efivar_entry_set_safe+0xa3/0x1b0
-| efi_pstore_write+0x109/0x140
-| pstore_dump+0x11c/0x330
-| kmsg_dump+0xa4/0xd0
-| oops_exit+0x22/0x30
-...
-
-Reported-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
-Fixes: 21b3ddd39fee ("efi: Don't use spinlocks for efi vars")
-Signed-off-by: Kees Cook <keescook@chromium.org>
-
-diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
-index 22e9d281324d..e7d4ce6964ae 100644
---- a/arch/powerpc/kernel/nvram_64.c
-+++ b/arch/powerpc/kernel/nvram_64.c
-@@ -563,8 +563,6 @@ static int nvram_pstore_init(void)
- nvram_pstore_info.buf = oops_data;
- nvram_pstore_info.bufsize = oops_data_sz;
-
-- spin_lock_init(&nvram_pstore_info.buf_lock);
--
- rc = pstore_register(&nvram_pstore_info);
- if (rc && (rc != -EPERM))
- /* Print error only when pstore.backend == nvram */
-diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c
-index a5e1d963208e..9953e50667ec 100644
---- a/drivers/acpi/apei/erst.c
-+++ b/drivers/acpi/apei/erst.c
-@@ -1176,7 +1176,6 @@ static int __init erst_init(void)
- "Error Record Serialization Table (ERST) support is initialized.\n");
-
- buf = kmalloc(erst_erange.size, GFP_KERNEL);
-- spin_lock_init(&erst_info.buf_lock);
- if (buf) {
- erst_info.buf = buf + sizeof(struct cper_pstore_record);
- erst_info.bufsize = erst_erange.size -
-diff --git a/drivers/firmware/efi/efi-pstore.c b/drivers/firmware/efi/efi-pstore.c
-index cfe87b465819..0f7d97917197 100644
---- a/drivers/firmware/efi/efi-pstore.c
-+++ b/drivers/firmware/efi/efi-pstore.c
-@@ -259,8 +259,7 @@ static int efi_pstore_write(struct pstore_record *record)
- efi_name[i] = name[i];
-
- ret = efivar_entry_set_safe(efi_name, vendor, PSTORE_EFI_ATTRIBUTES,
-- !pstore_cannot_block_path(record->reason),
-- record->size, record->psi->buf);
-+ preemptible(), record->size, record->psi->buf);
-
- if (record->reason == KMSG_DUMP_OOPS)
- efivar_run_worker();
-@@ -369,7 +368,6 @@ static __init int efivars_pstore_init(void)
- return -ENOMEM;
-
- efi_pstore_info.bufsize = 1024;
-- spin_lock_init(&efi_pstore_info.buf_lock);
-
- if (pstore_register(&efi_pstore_info)) {
- kfree(efi_pstore_info.buf);
-diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
-index 2387cb74f729..2d1066ed3c28 100644
---- a/fs/pstore/platform.c
-+++ b/fs/pstore/platform.c
-@@ -161,26 +161,27 @@ static const char *get_reason_str(enum kmsg_dump_reason reason)
- }
- }
-
--bool pstore_cannot_block_path(enum kmsg_dump_reason reason)
-+/*
-+ * Should pstore_dump() wait for a concurrent pstore_dump()? If
-+ * not, the current pstore_dump() will report a failure to dump
-+ * and return.
-+ */
-+static bool pstore_cannot_wait(enum kmsg_dump_reason reason)
- {
-- /*
-- * In case of NMI path, pstore shouldn't be blocked
-- * regardless of reason.
-- */
-+ /* In NMI path, pstore shouldn't block regardless of reason. */
- if (in_nmi())
- return true;
-
- switch (reason) {
- /* In panic case, other cpus are stopped by smp_send_stop(). */
- case KMSG_DUMP_PANIC:
-- /* Emergency restart shouldn't be blocked by spin lock. */
-+ /* Emergency restart shouldn't be blocked. */
- case KMSG_DUMP_EMERG:
- return true;
- default:
- return false;
- }
- }
--EXPORT_SYMBOL_GPL(pstore_cannot_block_path);
-
- #if IS_ENABLED(CONFIG_PSTORE_DEFLATE_COMPRESS)
- static int zbufsize_deflate(size_t size)
-@@ -400,23 +401,23 @@ static void pstore_dump(struct kmsg_dumper *dumper,
- unsigned long total = 0;
- const char *why;
- unsigned int part = 1;
-- unsigned long flags = 0;
-- int is_locked;
- int ret;
-
- why = get_reason_str(reason);
-
-- if (pstore_cannot_block_path(reason)) {
-- is_locked = spin_trylock_irqsave(&psinfo->buf_lock, flags);
-- if (!is_locked) {
-- pr_err("pstore dump routine blocked in %s path, may corrupt error record\n"
-- , in_nmi() ? "NMI" : why);
-+ if (down_trylock(&psinfo->buf_lock)) {
-+ /* Failed to acquire lock: give up if we cannot wait. */
-+ if (pstore_cannot_wait(reason)) {
-+ pr_err("dump skipped in %s path: may corrupt error record\n",
-+ in_nmi() ? "NMI" : why);
-+ return;
-+ }
-+ if (down_interruptible(&psinfo->buf_lock)) {
-+ pr_err("could not grab semaphore?!\n");
- return;
- }
-- } else {
-- spin_lock_irqsave(&psinfo->buf_lock, flags);
-- is_locked = 1;
- }
-+
- oopscount++;
- while (total < kmsg_bytes) {
- char *dst;
-@@ -433,7 +434,7 @@ static void pstore_dump(struct kmsg_dumper *dumper,
- record.part = part;
- record.buf = psinfo->buf;
-
-- if (big_oops_buf && is_locked) {
-+ if (big_oops_buf) {
- dst = big_oops_buf;
- dst_size = big_oops_buf_sz;
- } else {
-@@ -451,7 +452,7 @@ static void pstore_dump(struct kmsg_dumper *dumper,
- dst_size, &dump_size))
- break;
-
-- if (big_oops_buf && is_locked) {
-+ if (big_oops_buf) {
- zipped_len = pstore_compress(dst, psinfo->buf,
- header_size + dump_size,
- psinfo->bufsize);
-@@ -474,8 +475,8 @@ static void pstore_dump(struct kmsg_dumper *dumper,
- total += record.size;
- part++;
- }
-- if (is_locked)
-- spin_unlock_irqrestore(&psinfo->buf_lock, flags);
-+
-+ up(&psinfo->buf_lock);
- }
-
- static struct kmsg_dumper pstore_dumper = {
-@@ -594,6 +595,7 @@ int pstore_register(struct pstore_info *psi)
- psi->write_user = pstore_write_user_compat;
- psinfo = psi;
- mutex_init(&psinfo->read_mutex);
-+ sema_init(&psinfo->buf_lock, 1);
- spin_unlock(&pstore_lock);
-
- if (owner && !try_module_get(owner)) {
-diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
-index 202eaa82bcc6..e6d9560ea455 100644
---- a/fs/pstore/ram.c
-+++ b/fs/pstore/ram.c
-@@ -815,7 +815,6 @@ static int ramoops_probe(struct platform_device *pdev)
- err = -ENOMEM;
- goto fail_clear;
- }
-- spin_lock_init(&cxt->pstore.buf_lock);
-
- cxt->pstore.flags = PSTORE_FLAGS_DMESG;
- if (cxt->console_size)
-diff --git a/include/linux/pstore.h b/include/linux/pstore.h
-index a9ec285d85d1..b146181e8709 100644
---- a/include/linux/pstore.h
-+++ b/include/linux/pstore.h
-@@ -26,7 +26,7 @@
- #include <linux/errno.h>
- #include <linux/kmsg_dump.h>
- #include <linux/mutex.h>
--#include <linux/spinlock.h>
-+#include <linux/semaphore.h>
- #include <linux/time.h>
- #include <linux/types.h>
-
-@@ -99,7 +99,7 @@ struct pstore_record {
- * @owner: module which is responsible for this backend driver
- * @name: name of the backend driver
- *
-- * @buf_lock: spinlock to serialize access to @buf
-+ * @buf_lock: semaphore to serialize access to @buf
- * @buf: preallocated crash dump buffer
- * @bufsize: size of @buf available for crash dump bytes (must match
- * smallest number of bytes available for writing to a
-@@ -184,7 +184,7 @@ struct pstore_info {
- struct module *owner;
- char *name;
-
-- spinlock_t buf_lock;
-+ struct semaphore buf_lock;
- char *buf;
- size_t bufsize;
-
-@@ -210,7 +210,6 @@ struct pstore_info {
-
- extern int pstore_register(struct pstore_info *);
- extern void pstore_unregister(struct pstore_info *);
--extern bool pstore_cannot_block_path(enum kmsg_dump_reason reason);
-
- struct pstore_ftrace_record {
- unsigned long ip;
---
-2.9.5
-
diff --git a/queue/pstore-Remove-needless-lock-during-console-writes.patch b/queue/pstore-Remove-needless-lock-during-console-writes.patch
deleted file mode 100644
index fc13263..0000000
--- a/queue/pstore-Remove-needless-lock-during-console-writes.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From b77fa617a2ff4d6beccad3d3d4b3a1f2d10368aa Mon Sep 17 00:00:00 2001
-From: Kees Cook <keescook@chromium.org>
-Date: Thu, 1 Nov 2018 14:08:07 -0700
-Subject: [PATCH] pstore: Remove needless lock during console writes
-
-commit b77fa617a2ff4d6beccad3d3d4b3a1f2d10368aa upstream.
-
-Since the console writer does not use the preallocated crash dump buffer
-any more, there is no reason to perform locking around it.
-
-Fixes: 70ad35db3321 ("pstore: Convert console write to use ->write_buf")
-Signed-off-by: Kees Cook <keescook@chromium.org>
-Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org>
-
-diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
-index 8b6028948cf3..a75756c48e10 100644
---- a/fs/pstore/platform.c
-+++ b/fs/pstore/platform.c
-@@ -462,31 +462,14 @@ static void pstore_unregister_kmsg(void)
- #ifdef CONFIG_PSTORE_CONSOLE
- static void pstore_console_write(struct console *con, const char *s, unsigned c)
- {
-- const char *e = s + c;
-+ struct pstore_record record;
-
-- while (s < e) {
-- struct pstore_record record;
-- unsigned long flags;
--
-- pstore_record_init(&record, psinfo);
-- record.type = PSTORE_TYPE_CONSOLE;
--
-- if (c > psinfo->bufsize)
-- c = psinfo->bufsize;
-+ pstore_record_init(&record, psinfo);
-+ record.type = PSTORE_TYPE_CONSOLE;
-
-- if (oops_in_progress) {
-- if (!spin_trylock_irqsave(&psinfo->buf_lock, flags))
-- break;
-- } else {
-- spin_lock_irqsave(&psinfo->buf_lock, flags);
-- }
-- record.buf = (char *)s;
-- record.size = c;
-- psinfo->write(&record);
-- spin_unlock_irqrestore(&psinfo->buf_lock, flags);
-- s += c;
-- c = e - s;
-- }
-+ record.buf = (char *)s;
-+ record.size = c;
-+ psinfo->write(&record);
- }
-
- static struct console pstore_console = {
---
-2.9.5
-
diff --git a/queue/series b/queue/series
index d81d55d..42beede 100644
--- a/queue/series
+++ b/queue/series
@@ -100,8 +100,6 @@ rcu-locking-and-unlocking-need-to-always-be-at-least.patch
parisc-Use-implicit-space-register-selection-for-loa.patch
NFSv4.1-Again-fix-a-race-where-CB_NOTIFY_LOCK-fails-.patch
NFSv4.1-Fix-bug-only-first-CB_NOTIFY_LOCK-is-handled.patch
-pstore-Remove-needless-lock-during-console-writes.patch
-pstore-Convert-buf_lock-to-semaphore.patch
pstore-Set-tfm-to-NULL-on-free_buf_for_compression.patch
pstore-ram-Run-without-kernel-crash-dump-region.patch
x86-power-Fix-nosmt-vs-hibernation-triple-fault-duri.patch