diff options
author | Christian Borntraeger <borntraeger@de.ibm.com> | 2016-02-09 16:23:39 +0100 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2016-02-11 13:05:51 +0100 |
commit | 0986d97741150b307775d56f587a73ea873a4f4d (patch) | |
tree | 2a25bb5e191a1ba24b950fe716cd1ed950e8b9a5 /arch/s390/mm/maccess.c | |
parent | s390/oprofile: fix address range for asynchronous stack (diff) | |
download | linux-0986d97741150b307775d56f587a73ea873a4f4d.tar.xz linux-0986d97741150b307775d56f587a73ea873a4f4d.zip |
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/s390/mm/maccess.c')
-rw-r--r-- | arch/s390/mm/maccess.c | 4 |
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; } |