]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 20 May 2018 07:56:51 +0000 (09:56 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 20 May 2018 07:56:51 +0000 (09:56 +0200)
added patches:
powerpc-powernv-fix-nvram-sleep-in-invalid-context-when-crashing.patch

queue-4.4/powerpc-powernv-fix-nvram-sleep-in-invalid-context-when-crashing.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/powerpc-powernv-fix-nvram-sleep-in-invalid-context-when-crashing.patch b/queue-4.4/powerpc-powernv-fix-nvram-sleep-in-invalid-context-when-crashing.patch
new file mode 100644 (file)
index 0000000..caaba25
--- /dev/null
@@ -0,0 +1,55 @@
+From c1d2a31397ec51f0370f6bd17b19b39152c263cb Mon Sep 17 00:00:00 2001
+From: Nicholas Piggin <npiggin@gmail.com>
+Date: Tue, 15 May 2018 01:59:47 +1000
+Subject: powerpc/powernv: Fix NVRAM sleep in invalid context when crashing
+
+From: Nicholas Piggin <npiggin@gmail.com>
+
+commit c1d2a31397ec51f0370f6bd17b19b39152c263cb upstream.
+
+Similarly to opal_event_shutdown, opal_nvram_write can be called in
+the crash path with irqs disabled. Special case the delay to avoid
+sleeping in invalid context.
+
+Fixes: 3b8070335f75 ("powerpc/powernv: Fix OPAL NVRAM driver OPAL_BUSY loops")
+Cc: stable@vger.kernel.org # v3.2
+Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/platforms/powernv/opal-nvram.c |   14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+--- a/arch/powerpc/platforms/powernv/opal-nvram.c
++++ b/arch/powerpc/platforms/powernv/opal-nvram.c
+@@ -44,6 +44,10 @@ static ssize_t opal_nvram_read(char *buf
+       return count;
+ }
++/*
++ * This can be called in the panic path with interrupts off, so use
++ * mdelay in that case.
++ */
+ static ssize_t opal_nvram_write(char *buf, size_t count, loff_t *index)
+ {
+       s64 rc = OPAL_BUSY;
+@@ -58,10 +62,16 @@ static ssize_t opal_nvram_write(char *bu
+       while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) {
+               rc = opal_write_nvram(__pa(buf), count, off);
+               if (rc == OPAL_BUSY_EVENT) {
+-                      msleep(OPAL_BUSY_DELAY_MS);
++                      if (in_interrupt() || irqs_disabled())
++                              mdelay(OPAL_BUSY_DELAY_MS);
++                      else
++                              msleep(OPAL_BUSY_DELAY_MS);
+                       opal_poll_events(NULL);
+               } else if (rc == OPAL_BUSY) {
+-                      msleep(OPAL_BUSY_DELAY_MS);
++                      if (in_interrupt() || irqs_disabled())
++                              mdelay(OPAL_BUSY_DELAY_MS);
++                      else
++                              msleep(OPAL_BUSY_DELAY_MS);
+               }
+       }
index 456f57c347cb4c823f75514db406a6dbf63791b8..ca99b1202059d9f495feda59ca6f58e7b1422db0 100644 (file)
@@ -53,3 +53,4 @@ cpufreq-intel_pstate-enable-hwp-by-default.patch
 tracing-x86-xen-remove-zero-data-size-trace-events-trace_xen_mmu_flush_tlb-_all.patch
 proc-read-mm-s-arg-env-_-start-end-with-mmap-semaphore-taken.patch
 procfs-fix-pthread-cross-thread-naming-if-pr_dumpable.patch
+powerpc-powernv-fix-nvram-sleep-in-invalid-context-when-crashing.patch