summaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/mm/mem_detect.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/s390/mm/mem_detect.c b/arch/s390/mm/mem_detect.c
index 22d502e885ed..fb216e11c25d 100644
--- a/arch/s390/mm/mem_detect.c
+++ b/arch/s390/mm/mem_detect.c
@@ -47,19 +47,21 @@ static void find_memory_chunks(struct mem_chunk chunk[])
void detect_memory_layout(struct mem_chunk chunk[])
{
- unsigned long flags, cr0;
+ unsigned long flags, flags_dat, cr0;
memset(chunk, 0, MEMORY_CHUNKS * sizeof(struct mem_chunk));
/* Disable IRQs, DAT and low address protection so tprot does the
* right thing and we don't get scheduled away with low address
* protection disabled.
*/
- flags = __arch_local_irq_stnsm(0xf8);
+ local_irq_save(flags);
+ flags_dat = __arch_local_irq_stnsm(0xfb);
__ctl_store(cr0, 0, 0);
__ctl_clear_bit(0, 28);
find_memory_chunks(chunk);
__ctl_load(cr0, 0, 0);
- arch_local_irq_restore(flags);
+ __arch_local_irq_ssm(flags_dat);
+ local_irq_restore(flags);
}
EXPORT_SYMBOL(detect_memory_layout);