From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E92CA3ED3B2 for ; Wed, 19 Aug 2026 22:43:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179389; cv=none; b=RCvXafj0jbfWT08e6HPSojYgO0oWySdHHweqFasyVTeVFAEApgMYgtmkdoTTqADfVjOFkbuZSgZ7gC5mJ8ccNuSgvV2p+EhA5O6YFhaDGgIFb60VALIhjbPGC+lVxwwiQAXkh6MZAIFEU6uFUoiDZZeUC8Rx8FHKktGXZ7ff3YA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179389; c=relaxed/simple; bh=97Q0jynUUZzSZ55O7Qyxq5A1GqvKcQd4O682s26kE50=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=i4ZovvsPQfrKxgPn0mP+nkGb52cZS0taXa5rQmEbYPofrA4Bg4bBIqpdE4pRCNdMA1w0pbK8PTodXnzmh9cT+T3eXMpBtySBCVlUpCeXb4ttY0N4uXNlsizxL68qXFzsiHDhs1Q94Kj/MvnWKKTehvJ3YpIcL+yJoq28S9qAQGU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mn3LzKOa; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mn3LzKOa" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-47f7027ca11so924325f8f.3 for ; Wed, 19 Aug 2026 15:43:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787179386; x=1787784186; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ls308eL6NV0loSgiW60lY9W5Z4q6fPeju3Nkz+urIAI=; b=mn3LzKOazkHsvtD55nIv7kiQFGVFOXM4FsnqnduVSAn6hO1h1hH33p9wHwQsbz5qho K+iY5zYS34aLxhYkQy28W/a3mmQ+SGGhVFOb0C51tLcdpHGU9AdcgrtIdM68pJSxviQy CfGpYqts8wdMTkIRVSAkOy2kCCOdY3wa/u+0oFh2NTt4M8qZbZzdUFnOOHAdS1pjskWH xZL1A1rL/EZCVuXBk9A0Ej1yf9VTeVgypVB27lnHE97BJfJSIyMGpmgXZlXrePO42G7A kTt1+p9SvNjFlkAATNQ3e+h2pf2MaAVVfJV7ImCQEqJs6+ENU9TIxFKcD5ThfFXljgYm tUJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787179386; x=1787784186; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ls308eL6NV0loSgiW60lY9W5Z4q6fPeju3Nkz+urIAI=; b=XsQUI7qvhV5qlWimnc72UcP2blOl+rcAJhUCAGmsolmb5fDE5spoQgRc4wmmTezlaT 7SHwS2gV6y9bx4Debq0W1UuqX9JaFe2MxzavJrAxOkhTLf9J3JVVFjFOKoph3SmX+Nz4 YNmI0wdp+m9178P1Ma4FqHdfJ2NMIep31SUFY+0kS2V8GJvZtLp4ewl8BQyJMZUav+O3 rO0Ntd+QGWbD4vZFoH85a5q6a5mVDmmZ0aRKhLfLmCYBSc9QozWuIYevGbsOSZIrv/y/ P7UXDA3ZyYEKWTEWqqlkutWk+Q7yzBs+kgKF2Id5N311t01bvYhOQAKJkgjVOaPfyoBG yXPw== X-Forwarded-Encrypted: i=1; AHgh+RrEzMkxJOHOADbJtEERIky5TvBu/MtybAyP888VwjoJ7Ya+GN3x+s0gQRDwAJ2B/Xxi2/1aqI19yi3yO2M=@vger.kernel.org X-Gm-Message-State: AFuF++l93GdsgoMzCrnaX1lyMu8J1G9c1RmQgybQJ8672VmKVOt57uth XfFbNloVTo2KCbiBnG0WXtIC3bsWFD6xBI8nl3b7AI70YlJIblYv/NfB X-Gm-Gg: AR+sD13d0b9rhwXr+lvAolpWXmhhOcgkkHkeeARQOpKtHRICjxTQaPmQLdpofU74Axi lBk4sr9RXfeag3v45XR3zjX7pAqhYA6ikdD4hegDkZb0dbk2Y2LIjDeyL2XrSBJF1n2Olw34mBR phATqjl0y5F/8B185Z8bFBZExLI0Z+XdHf+KJqdQxAhjIQ/G6jeCYrCRuM9H4lKTksQV3kiYHNw nd1UyPAi/DoMieZmD9aeBbyx1kJf7g5PKGxRyDzLYNiughnz/tCfOdcn8vYG1fPAMmM8kYio/p/ mfvh6NlrQuchN1AYUY/kmOg82uK8OgbUEUyrl/pQQ5cyr6JjvnKWmA6MlKWQVU0rwxnD1fzRvQh ycCP7YDBNFmsnWmr9zvCV2za2OROMcbbhJlq9ZSQMhTaky5eHtEqPOiHERr4s11kTfo+j9S7v5M 1Fq7XYLAZIP8mWBHdMOdHD2A9clvS+uRNjGlTn+cwawEHQBhW4MZF2zAwkXhbffWj10RPJN2Blv AzGvOARVPp/+erkM3huYoW10UtQ0Ty+i8mOUISxd+kGOQdsjUBeGaD1LmNEZvW/d42AUoTKrSMr sS5w9VJOhT2cQACvvol5Lgj9cwsDWhpiH/B8CHmJx1z2G6IKYKvCqTcl1dX+eToDkOo= X-Received: by 2002:a05:6000:4619:b0:47f:5b52:5579 with SMTP id ffacd0b85a97d-482b1fe8a4bmr14986627f8f.18.1787179386081; Wed, 19 Aug 2026 15:43:06 -0700 (PDT) Received: from localhost.localdomain (dynamic-2a02-3100-ae9e-1d01-58d3-443d-4fa6-01cd.310.pool.telefonica.de. [2a02:3100:ae9e:1d01:58d3:443d:4fa6:1cd]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b1450e61sm8553317f8f.13.2026.08.19.15.43.04 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 19 Aug 2026 15:43:05 -0700 (PDT) From: Karl Mehltretter To: Marc Zyngier , Oliver Upton , kvmarm@lists.linux.dev Cc: Karl Mehltretter , Fuad Tabba , Joey Gouly , Steffen Eiden , Suzuki K Poulose , Zenghui Yu , Catalin Marinas , Will Deacon , Paolo Bonzini , Shuah Khan , Eric Auger , Christoffer Dall , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, linux-kselftest@vger.kernel.org Subject: [PATCH v2 3/5] KVM: arm64: vgic-v3: Unregister redistributors before freeing regions Date: Thu, 20 Aug 2026 00:42:27 +0200 Message-Id: <20260819224229.82948-4-kmehltretter@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20260819224229.82948-1-kmehltretter@gmail.com> References: <20260819224229.82948-1-kmehltretter@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit vgic_unregister_redist_iodev() uses rdreg to return its region slot. During VM teardown, kvm_vgic_destroy() frees the regions before unregistering their iodevs, so vgic_v3_free_redist_region() must first clear every rdreg pointer. Unregister the iodevs before kvm_vgic_dist_destroy(), while the regions are still alive. Temporarily drop config_lock because vgic_unregister_redist_iodev() takes it; slots_lock remains held for the MMIO bus updates. The region destructor no longer needs the vCPU scan. Suggested-by: Marc Zyngier Assisted-by: Codex:gpt-5.6-sol Signed-off-by: Karl Mehltretter --- arch/arm64/kvm/vgic/vgic-init.c | 11 +++++++---- arch/arm64/kvm/vgic/vgic-mmio-v3.c | 9 --------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c index 0a3df6d3a691..df6d0bdda4a9 100644 --- a/arch/arm64/kvm/vgic/vgic-init.c +++ b/arch/arm64/kvm/vgic/vgic-init.c @@ -570,14 +570,17 @@ void kvm_vgic_destroy(struct kvm *kvm) kvm_for_each_vcpu(i, vcpu, kvm) __kvm_vgic_vcpu_destroy(vcpu); + if (kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { + mutex_unlock(&kvm->arch.config_lock); + kvm_for_each_vcpu(i, vcpu, kvm) + vgic_unregister_redist_iodev(vcpu); + mutex_lock(&kvm->arch.config_lock); + } + kvm_vgic_dist_destroy(kvm); mutex_unlock(&kvm->arch.config_lock); - if (kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) - kvm_for_each_vcpu(i, vcpu, kvm) - vgic_unregister_redist_iodev(vcpu); - mutex_unlock(&kvm->slots_lock); } diff --git a/arch/arm64/kvm/vgic/vgic-mmio-v3.c b/arch/arm64/kvm/vgic/vgic-mmio-v3.c index 331d203acb43..77a611564f8e 100644 --- a/arch/arm64/kvm/vgic/vgic-mmio-v3.c +++ b/arch/arm64/kvm/vgic/vgic-mmio-v3.c @@ -967,17 +967,8 @@ static int vgic_v3_alloc_redist_region(struct kvm *kvm, uint32_t index, void vgic_v3_free_redist_region(struct kvm *kvm, struct vgic_redist_region *rdreg) { - struct kvm_vcpu *vcpu; - unsigned long c; - lockdep_assert_held(&kvm->arch.config_lock); - /* Garbage collect the region */ - kvm_for_each_vcpu(c, vcpu, kvm) { - if (vcpu->arch.vgic_cpu.rdreg == rdreg) - vcpu->arch.vgic_cpu.rdreg = NULL; - } - list_del(&rdreg->list); kfree(rdreg); } -- 2.39.5 (Apple Git-154)