s390: fix DAT off memory access, e.g. on kdump
authorChristian Borntraeger <borntraeger@de.ibm.com>
Tue, 9 Feb 2016 15:23:39 +0000 (16:23 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Thu, 11 Feb 2016 12:05:51 +0000 (13:05 +0100)
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>
arch/s390/mm/maccess.c

index fec59c0..350b0ac 100644 (file)
@@ -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;
 }