summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/powernv/opal-nvram.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-05-21 08:27:15 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-05-21 08:27:15 +0200
commitc049ffb35ac4a393919a001f8f468c43cb185a34 (patch)
tree3d8835848724bebf6326aaed3ae5e4dd8d302057 /arch/powerpc/platforms/powernv/opal-nvram.c
parentbaf12d6ddeae74dfcfd5d19fce86260a2e1e44f2 (diff)
parent771c577c23bac90597c685971d7297ea00f99d11 (diff)
downloadop-kernel-dev-c049ffb35ac4a393919a001f8f468c43cb185a34.zip
op-kernel-dev-c049ffb35ac4a393919a001f8f468c43cb185a34.tar.gz
Merge 4.17-rc6 into usb-next
We want the bug fixes and this resolves the merge issues with the usbip driver. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/powerpc/platforms/powernv/opal-nvram.c')
-rw-r--r--arch/powerpc/platforms/powernv/opal-nvram.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/powernv/opal-nvram.c b/arch/powerpc/platforms/powernv/opal-nvram.c
index 1bceb95..5584247 100644
--- 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, size_t count, loff_t *index)
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 *buf, size_t count, loff_t *index)
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);
}
}
OpenPOWER on IntegriCloud