summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2016-02-09 16:23:39 +0100
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2016-02-11 13:05:51 +0100
commit0986d97741150b307775d56f587a73ea873a4f4d (patch)
tree2a25bb5e191a1ba24b950fe716cd1ed950e8b9a5 /arch
parent232f5dd78586a684a7364a486b934e19384189dc (diff)
s390: fix DAT off memory access, e.g. on kdump
commit 204ee2c56431 ("s390/irqflags: optimize irq restore") optimized irqrestore to really only care about interrupts and adapted the remaining low level users. One spot (memcpy_real) was not touched, though - fix it. Otherwise a kdump kernel will fail while reading the old kernel. As we re-enable irqs with a non-standard function we have to tell lockdep about that. Fixes: 204ee2c56431 ("s390/irqflags: optimize irq restore") Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/s390/mm/maccess.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
index fec59c067d0d..350b0acd7f52 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
@@ -101,7 +101,9 @@ int memcpy_real(void *dest, void *src, size_t count)
local_irq_save(flags);
__arch_local_irq_stnsm(0xfbUL);
rc = __memcpy_real(dest, src, count);
- local_irq_restore(flags);
+ if (!arch_irqs_disabled_flags(flags))
+ trace_hardirqs_on();
+ __arch_local_irq_ssm(flags);
return rc;
}