mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
s390/kvm: Convert MACHINE_HAS_ESOP to machine_has_esop()
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>
This commit is contained in:
committed by
Vasily Gorbik
parent
e82462fbb2
commit
aaab4a4ff3
@@ -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 */
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user