s390: fix setting of mio addressing control
authorSebastian Ott <sebott@linux.ibm.com>
Wed, 10 Jul 2019 11:08:06 +0000 (13:08 +0200)
committerVasily Gorbik <gor@linux.ibm.com>
Thu, 11 Jul 2019 18:40:02 +0000 (20:40 +0200)
Move enablement of mio addressing control from detect_machine_facilities
to pci_base_init. detect_machine_facilities runs so early that the
static branches have not been toggled yet, thus mio addressing control
was always off. In pci_base_init we have to use the SMP aware
ctl_set_bit though.

Fixes: 833b441ec0f6 ("s390: enable processes for mio instructions")
Signed-off-by: Sebastian Ott <sebott@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/pci_insn.h
arch/s390/kernel/early.c
arch/s390/pci/pci.c

index ff81ed1..61cf953 100644 (file)
@@ -143,14 +143,4 @@ static inline int zpci_set_irq_ctrl(u16 ctl, u8 isc)
        return __zpci_set_irq_ctrl(ctl, isc, &iib);
 }
 
-#ifdef CONFIG_PCI
-static inline void enable_mio_ctl(void)
-{
-       if (static_branch_likely(&have_mio))
-               __ctl_set_bit(2, 5);
-}
-#else /* CONFIG_PCI */
-static inline void enable_mio_ctl(void) {}
-#endif /* CONFIG_PCI */
-
 #endif
index 629f173..6312fed 100644 (file)
@@ -30,7 +30,6 @@
 #include <asm/sclp.h>
 #include <asm/facility.h>
 #include <asm/boot_data.h>
-#include <asm/pci_insn.h>
 #include "entry.h"
 
 /*
@@ -236,7 +235,6 @@ static __init void detect_machine_facilities(void)
                clock_comparator_max = -1ULL >> 1;
                __ctl_set_bit(0, 53);
        }
-       enable_mio_ctl();
 }
 
 static inline void save_vector_registers(void)
index b8a64cb..b0e3b9a 100644 (file)
@@ -890,8 +890,10 @@ static int __init pci_base_init(void)
        if (!test_facility(69) || !test_facility(71))
                return 0;
 
-       if (test_facility(153) && !s390_pci_no_mio)
+       if (test_facility(153) && !s390_pci_no_mio) {
                static_branch_enable(&have_mio);
+               ctl_set_bit(2, 5);
+       }
 
        rc = zpci_debug_init();
        if (rc)