On Wed, 14 May 2025 18:34:51 +0200 Christoph Schlameuss <schlameuss@xxxxxxxxxxxxx> wrote: > We are no longer referencing a bsca_block in kvm->arch.sca. This will > always be esca_block instead. > By specifying the type of the sca as esca_block we can simplify access > to the sca and get rid of some helpers while making the code clearer. > > Signed-off-by: Christoph Schlameuss <schlameuss@xxxxxxxxxxxxx> Reviewed-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx> > --- > arch/s390/include/asm/kvm_host.h | 4 ++-- > arch/s390/kvm/gaccess.c | 10 +++++----- > arch/s390/kvm/kvm-s390.c | 4 ++-- > arch/s390/kvm/kvm-s390.h | 7 ------- > 4 files changed, 9 insertions(+), 16 deletions(-) > > diff --git a/arch/s390/include/asm/kvm_host.h b/arch/s390/include/asm/kvm_host.h > index d03e354a63d9c931522c1a1607eba8685c24527f..2a2b557357c8e40c82022eb338c3e98aa8f03a2b 100644 > --- a/arch/s390/include/asm/kvm_host.h > +++ b/arch/s390/include/asm/kvm_host.h > @@ -629,8 +629,8 @@ struct kvm_s390_pv { > struct mmu_notifier mmu_notifier; > }; > > -struct kvm_arch{ > - void *sca; > +struct kvm_arch { > + struct esca_block *sca; > rwlock_t sca_lock; > debug_info_t *dbf; > struct kvm_s390_float_interrupt float_int; > diff --git a/arch/s390/kvm/gaccess.c b/arch/s390/kvm/gaccess.c > index f6fded15633ad87f6b02c2c42aea35a3c9164253..ee37d397d9218a4d33c7a33bd877d0b974ca9003 100644 > --- a/arch/s390/kvm/gaccess.c > +++ b/arch/s390/kvm/gaccess.c > @@ -112,7 +112,7 @@ int ipte_lock_held(struct kvm *kvm) > int rc; > > read_lock(&kvm->arch.sca_lock); > - rc = kvm_s390_get_ipte_control(kvm)->kh != 0; > + rc = kvm->arch.sca->ipte_control.kh != 0; > read_unlock(&kvm->arch.sca_lock); > return rc; > } > @@ -129,7 +129,7 @@ static void ipte_lock_simple(struct kvm *kvm) > goto out; > retry: > read_lock(&kvm->arch.sca_lock); > - ic = kvm_s390_get_ipte_control(kvm); > + ic = &kvm->arch.sca->ipte_control; > old = READ_ONCE(*ic); > do { > if (old.k) { > @@ -154,7 +154,7 @@ static void ipte_unlock_simple(struct kvm *kvm) > if (kvm->arch.ipte_lock_count) > goto out; > read_lock(&kvm->arch.sca_lock); > - ic = kvm_s390_get_ipte_control(kvm); > + ic = &kvm->arch.sca->ipte_control; > old = READ_ONCE(*ic); > do { > new = old; > @@ -172,7 +172,7 @@ static void ipte_lock_siif(struct kvm *kvm) > > retry: > read_lock(&kvm->arch.sca_lock); > - ic = kvm_s390_get_ipte_control(kvm); > + ic = &kvm->arch.sca->ipte_control; > old = READ_ONCE(*ic); > do { > if (old.kg) { > @@ -192,7 +192,7 @@ static void ipte_unlock_siif(struct kvm *kvm) > union ipte_control old, new, *ic; > > read_lock(&kvm->arch.sca_lock); > - ic = kvm_s390_get_ipte_control(kvm); > + ic = &kvm->arch.sca->ipte_control; > old = READ_ONCE(*ic); > do { > new = old; > diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c > index d610447dbf2c1caa084bd98eabf19c4ca8f1e972..9af8fe93ed3f093f4cce16771d095c08f770d44d 100644 > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -1964,7 +1964,7 @@ static int kvm_s390_get_topo_change_indication(struct kvm *kvm, > return -ENXIO; > > read_lock(&kvm->arch.sca_lock); > - topo = ((struct esca_block *)kvm->arch.sca)->utility.mtcr; > + topo = kvm->arch.sca->utility.mtcr; > read_unlock(&kvm->arch.sca_lock); > > return put_user(topo, (u8 __user *)attr->addr); > @@ -3303,7 +3303,7 @@ static void kvm_s390_crypto_init(struct kvm *kvm) > > static void sca_dispose(struct kvm *kvm) > { > - free_pages_exact(kvm->arch.sca, sizeof(struct esca_block)); > + free_pages_exact(kvm->arch.sca, sizeof(*kvm->arch.sca)); > kvm->arch.sca = NULL; > } > > diff --git a/arch/s390/kvm/kvm-s390.h b/arch/s390/kvm/kvm-s390.h > index 2c8e177e4af8f2dab07fd42a904cefdea80f6855..0c5e8ae07b77648d554668cc0536607545636a68 100644 > --- a/arch/s390/kvm/kvm-s390.h > +++ b/arch/s390/kvm/kvm-s390.h > @@ -528,13 +528,6 @@ void kvm_s390_prepare_debug_exit(struct kvm_vcpu *vcpu); > int kvm_s390_handle_per_ifetch_icpt(struct kvm_vcpu *vcpu); > int kvm_s390_handle_per_event(struct kvm_vcpu *vcpu); > > -/* support for Basic/Extended SCA handling */ > -static inline union ipte_control *kvm_s390_get_ipte_control(struct kvm *kvm) > -{ > - struct esca_block *sca = kvm->arch.sca; /* SCA version doesn't matter */ > - > - return &sca->ipte_control; > -} > static inline int kvm_s390_use_sca_entries(void) > { > /* >