s390/mm: use correct address space when enabling DAT
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Thu, 1 Jun 2017 09:04:04 +0000 (11:04 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 12 Jun 2017 14:26:02 +0000 (16:26 +0200)
Right now the kernel uses the primary address space until finally the
switch to the correct home address space will be done when the idle
PSW will be loaded within psw_idle().

Correct this and simply use the home address space when DAT is enabled
for the first time.

This doesn't really fix a bug, but fixes odd behavior.

Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/mm/init.c

index ee6a1d3d4983bc3cf65c9de4a901528b2c77e0ee..0352f9f88c73275c69b416e5bbf1597732899f3d 100644 (file)
@@ -81,6 +81,7 @@ void __init paging_init(void)
 {
        unsigned long max_zone_pfns[MAX_NR_ZONES];
        unsigned long pgd_type, asce_bits;
+       psw_t psw;
 
        init_mm.pgd = swapper_pg_dir;
        if (VMALLOC_END > (1UL << 42)) {
@@ -100,7 +101,10 @@ void __init paging_init(void)
        __ctl_load(S390_lowcore.kernel_asce, 1, 1);
        __ctl_load(S390_lowcore.kernel_asce, 7, 7);
        __ctl_load(S390_lowcore.kernel_asce, 13, 13);
-       __arch_local_irq_stosm(0x04);
+       psw.mask = __extract_psw();
+       psw_bits(psw).t = 1;
+       psw_bits(psw).as = PSW_AS_HOME;
+       __load_psw_mask(psw.mask);
 
        sparse_memory_present_with_active_regions(MAX_NUMNODES);
        sparse_init();