Re: [PATCH v3 08/10] KVM: s390: Free the mmu cache when kvm_arch_vcpu_create() fails

From: Steffen Eiden

Date: Tue Jul 28 2026 - 08:38:37 EST


On Mon, Jul 27, 2026 at 05:02:52PM +0200, Claudio Imbrenda wrote:
> The mmu cache is the first thing that is allocated in
> kvm_arch_vcpu_create(), but in case of failure it was not freed.
>
> Fix by freeing the mmu cache in case of failure.
>
> Signed-off-by: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>
> Fixes: e38c884df921 ("KVM: s390: Switch to new gmap")
> ---
> arch/s390/kvm/kvm-s390.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
> index 69c9027c42bf..8afb88a2b73d 100644
> --- a/arch/s390/kvm/kvm-s390.c
> +++ b/arch/s390/kvm/kvm-s390.c
> @@ -3796,19 +3796,17 @@ int kvm_arch_vcpu_precreate(struct kvm *kvm, unsigned int id)
>
> int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
> {
> + struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) = NULL;
> struct sie_page *sie_page;
> int rc;
>
> BUILD_BUG_ON(sizeof(struct sie_page) != 4096);
> - vcpu->arch.mc = kvm_s390_new_mmu_cache();
> - if (!vcpu->arch.mc)
> + mc = kvm_s390_new_mmu_cache();
> + if (!mc)
> return -ENOMEM;
> sie_page = (struct sie_page *) get_zeroed_page(GFP_KERNEL_ACCOUNT);
> - if (!sie_page) {
> - kvm_s390_free_mmu_cache(vcpu->arch.mc);
> - vcpu->arch.mc = NULL;
> + if (!sie_page)
> return -ENOMEM;
> - }
>
> vcpu->arch.sie_block = &sie_page->sie_block;
> vcpu->arch.sie_block->itdba = virt_to_phys(&sie_page->itdb);
> @@ -3864,6 +3862,8 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)
> if (rc)
> goto out_ucontrol_uninit;
>
> + vcpu->arch.mc = mc;
> + mc = NULL;
use

vcpu->arch.mc = no_free_ptr(mc);

instead of those two lines.

rest LGTM.

Steffen