Create a helper method release_gmap_shadow_safe() to simplify releasing the gmap shadow of a vsie_page. Will be called from multiple places in upcoming patches. Signed-off-by: Christoph Schlameuss --- arch/s390/kvm/vsie.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/arch/s390/kvm/vsie.c b/arch/s390/kvm/vsie.c index 569054552b83..d2582519b3ec 100644 --- a/arch/s390/kvm/vsie.c +++ b/arch/s390/kvm/vsie.c @@ -165,6 +165,15 @@ static void release_gmap_shadow(struct vsie_page *vsie_page) } } +static void release_gmap_shadow_safe(struct kvm *kvm, struct vsie_page *vsie_page) +{ + if (vsie_page->gmap_cache.gmap) { + guard(spinlock)(&kvm->arch.gmap->children_lock); + if (vsie_page->gmap_cache.gmap) + release_gmap_shadow(vsie_page); + } +} + static struct gmap *acquire_gmap_shadow(struct kvm_vcpu *vcpu, struct vsie_page *vsie_page) { union ctlreg0 cr0; @@ -1586,11 +1595,7 @@ static struct vsie_page *get_vsie_page(struct kvm *kvm, unsigned long addr) mutex_unlock(&kvm->arch.vsie.mutex); memset(&vsie_page->scb_s, 0, sizeof(struct kvm_s390_sie_block)); - if (vsie_page->gmap_cache.gmap) { - scoped_guard(spinlock, &kvm->arch.gmap->children_lock) - if (vsie_page->gmap_cache.gmap) - release_gmap_shadow(vsie_page); - } + release_gmap_shadow_safe(kvm, vsie_page); prefix_unmapped(vsie_page); vsie_page->fault_addr = 0; vsie_page->scb_s.ihcpu = 0xffffU; -- 2.55.0