]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
s390/kvm: Convert MACHINE_HAS_ESOP to machine_has_esop()
authorHeiko Carstens <hca@linux.ibm.com>
Fri, 7 Feb 2025 14:49:02 +0000 (15:49 +0100)
committerVasily Gorbik <gor@linux.ibm.com>
Tue, 4 Mar 2025 16:18:06 +0000 (17:18 +0100)
Use static branch(es) to implement and use machine_has_esop() instead
of a runtime check via MACHINE_HAS_ESOP.

Reviewed-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
arch/s390/include/asm/machine.h
arch/s390/include/asm/setup.h
arch/s390/kvm/kvm-s390.c
arch/s390/mm/pgtable.c
drivers/s390/char/sclp_early.c
drivers/s390/char/sclp_early_core.c

index c31682d6c35d393aaf7450558b79a173632a4169..dd61146d0a8d039cc79bcddf976011bdf494eacd 100644 (file)
@@ -13,6 +13,7 @@
 #define MFEATURE_SCC           2
 #define MFEATURE_TLB_GUEST     3
 #define MFEATURE_TX            4
+#define MFEATURE_ESOP          5
 
 #ifndef __ASSEMBLY__
 
@@ -84,6 +85,7 @@ DEFINE_MACHINE_HAS_FEATURE(relocated_lowcore, MFEATURE_LOWCORE)
 DEFINE_MACHINE_HAS_FEATURE(scc, MFEATURE_SCC)
 DEFINE_MACHINE_HAS_FEATURE(tlb_guest, MFEATURE_TLB_GUEST)
 DEFINE_MACHINE_HAS_FEATURE(tx, MFEATURE_TX)
+DEFINE_MACHINE_HAS_FEATURE(esop, MFEATURE_ESOP)
 
 #endif /* __ASSEMBLY__ */
 #endif /* __ASM_S390_MACHINE_H */
index 7762fb342c396a47ce87791ad050105375c52a44..a90260f80f6209c10527c9ecfa531b097ab72225 100644 (file)
@@ -21,7 +21,6 @@
 #define MACHINE_FLAG_KVM       BIT(1)
 #define MACHINE_FLAG_LPAR      BIT(2)
 #define MACHINE_FLAG_DIAG9C    BIT(3)
-#define MACHINE_FLAG_ESOP      BIT(4)
 
 #define LPP_MAGIC              BIT(31)
 #define LPP_PID_MASK           _AC(0xffffffff, UL)
@@ -70,7 +69,6 @@ extern unsigned long mio_wb_bit_mask;
 #define MACHINE_IS_LPAR                (get_lowcore()->machine_flags & MACHINE_FLAG_LPAR)
 
 #define MACHINE_HAS_DIAG9C     (get_lowcore()->machine_flags & MACHINE_FLAG_DIAG9C)
-#define MACHINE_HAS_ESOP       (get_lowcore()->machine_flags & MACHINE_FLAG_ESOP)
 
 /*
  * Console mode. Override with conmode=
index df21ea6fbd598df92fb987e156cadf7c5da152ef..2bba097f7cb0179b8beb6fd73ef21ce15ad6d898 100644 (file)
@@ -445,13 +445,13 @@ static void __init kvm_s390_cpu_feat_init(void)
        if (test_facility(201)) /* PFCR */
                pfcr_query(&kvm_s390_available_subfunc.pfcr);
 
-       if (MACHINE_HAS_ESOP)
+       if (machine_has_esop())
                allow_cpu_feat(KVM_S390_VM_CPU_FEAT_ESOP);
        /*
         * We need SIE support, ESOP (PROT_READ protection for gmap_shadow),
         * 64bit SCAO (SCA passthrough) and IDTE (for gmap_shadow unshadowing).
         */
-       if (!sclp.has_sief2 || !MACHINE_HAS_ESOP || !sclp.has_64bscao ||
+       if (!sclp.has_sief2 || !machine_has_esop() || !sclp.has_64bscao ||
            !test_facility(3) || !nested)
                return;
        allow_cpu_feat(KVM_S390_VM_CPU_FEAT_SIEF2);
@@ -640,7 +640,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
                        r = min_t(unsigned int, num_online_cpus(), r);
                break;
        case KVM_CAP_S390_COW:
-               r = MACHINE_HAS_ESOP;
+               r = machine_has_esop();
                break;
        case KVM_CAP_S390_VECTOR_REGISTERS:
                r = test_facility(129);
@@ -3894,8 +3894,8 @@ static int kvm_s390_vcpu_setup(struct kvm_vcpu *vcpu)
 
        kvm_s390_vcpu_setup_model(vcpu);
 
-       /* pgste_set_pte has special handling for !MACHINE_HAS_ESOP */
-       if (MACHINE_HAS_ESOP)
+       /* pgste_set_pte has special handling for !machine_has_esop() */
+       if (machine_has_esop())
                vcpu->arch.sie_block->ecb |= ECB_HOSTPROTINT;
        if (test_kvm_facility(vcpu->kvm, 9))
                vcpu->arch.sie_block->ecb |= ECB_SRSI;
index f6712781d8a1addb73643ec9f86e2482af53ccc5..e20fd4c14562cd9f5893d66ad00b84df536d8726 100644 (file)
@@ -212,7 +212,7 @@ static inline pgste_t pgste_set_pte(pte_t *ptep, pgste_t pgste, pte_t entry)
        if ((pte_val(entry) & _PAGE_PRESENT) &&
            (pte_val(entry) & _PAGE_WRITE) &&
            !(pte_val(entry) & _PAGE_INVALID)) {
-               if (!MACHINE_HAS_ESOP) {
+               if (!machine_has_esop()) {
                        /*
                         * Without enhanced suppression-on-protection force
                         * the dirty bit on for all writable ptes.
@@ -788,7 +788,7 @@ bool ptep_test_and_clear_uc(struct mm_struct *mm, unsigned long addr,
                pgste = pgste_pte_notify(mm, addr, ptep, pgste);
                nodat = !!(pgste_val(pgste) & _PGSTE_GPS_NODAT);
                ptep_ipte_global(mm, addr, ptep, nodat);
-               if (MACHINE_HAS_ESOP || !(pte_val(pte) & _PAGE_WRITE))
+               if (machine_has_esop() || !(pte_val(pte) & _PAGE_WRITE))
                        pte = set_pte_bit(pte, __pgprot(_PAGE_PROTECT));
                else
                        pte = set_pte_bit(pte, __pgprot(_PAGE_INVALID));
index fc83f157c4e45c1d40e5cb370cb931c923857e03..e58a1f8fc673666f7e5cb5ea1cecb1a532b24fd7 100644 (file)
@@ -50,8 +50,6 @@ static void __init sclp_early_facilities_detect(void)
        sclp.has_aeni = !!(sccb->fac118 & 0x20);
        sclp.has_aisi = !!(sccb->fac118 & 0x10);
        sclp.has_zpci_lsi = !!(sccb->fac118 & 0x01);
-       if (sccb->fac85 & 0x02)
-               get_lowcore()->machine_flags |= MACHINE_FLAG_ESOP;
        sclp.has_diag204_bif = !!(sccb->fac98 & 0x80);
        sclp.has_diag310 = !!(sccb->fac91 & 0x80);
        if (sccb->cpuoff > 134) {
index d03ad01082d091d6fac7d15758612a8a0beb12fd..b5bd40f13c7552b297ad369e853890496bbcd781 100644 (file)
@@ -342,6 +342,8 @@ void __init sclp_early_detect_machine_features(void)
 
        if (!sclp_info_sccb_valid)
                return;
+       if (sccb->fac85 & 0x02)
+               set_machine_feature(MFEATURE_ESOP);
        if (sccb->fac91 & 0x40)
                set_machine_feature(MFEATURE_TLB_GUEST);
 }