From nobody Mon Sep 28 17:48:46 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (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 D20423E49D6 for ; Wed, 19 Aug 2026 22:43:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179384; cv=none; b=prqsQsD+hxKiHo4M/Wnrg7iZi/ZImb8LlnIbM3uX7rzveJALrO5mrBfbTj0WayYVXyqr/uSiN8xP/zZH/I47dBlALIxa5+XjwhEzdo1J1tWC0m7FZydCXBQLPHMlUuf08XNVjysKaW1oz9qy1XqvQ7xrWoPfbWyrZ8AFeJcTBDU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179384; c=relaxed/simple; bh=QtGuQD6Y9WhA9fpXpeTIYaXrx/WTjnsW3HXx6vlkPTo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=EIyhsvCSNVqZn1UrTVBAQt9vcsJZasQ8bvDFj8JN65KKnJiefrfMPR01sRgsC/NNAdt5A5HoiBvaeKEuaa7dtdUGvZ0hNKI3hV+OQpMm75nDUaDvr+tHB4+4yhrOeCN1s1surFOaY6pingzh+MMrFeGjveuyol1aj67H0Z3C+NE= 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=Am3jUH3Q; arc=none smtp.client-ip=209.85.221.42 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="Am3jUH3Q" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-47f703a9e5dso643861f8f.0 for ; Wed, 19 Aug 2026 15:43:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787179380; x=1787784180; 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=spw3TDdOtLdIsF7CwDxVZdY48WpWL2JF0u4UNC1DfkY=; b=Am3jUH3Q7uX+XXOvvOpJzN6Ns7bzhlhjo7G0CR4+5JhsgXdIdkrBQonQEwO5UAzHGX 5GO91JIC8KmHVPTOaK3dJscLj3UlAo/HFuUpr0qSxjGwfJvNwic0FbTc63JsCRozLri+ TamJiPy3qkH7UaWNdkO8fXzwfyrBT3Y7eX2C2Lvp0csvN8utyDgjeNEh5iFdE3+18T7J V5w6A3/HiXUgEWkDzkU2VjJx3MmhvdVI7wzCs/usNXeGinZmcOujhMUn3XlFC7n/cvxl sO3JbGUnJLJpo+bsg0IFLsxNhNh0MPfkn8SL7q0obM/K3jTyQXfBkVl5RKxhZEjkVaB9 K1lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787179380; x=1787784180; 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=spw3TDdOtLdIsF7CwDxVZdY48WpWL2JF0u4UNC1DfkY=; b=fdbA0Pn7PrhEJr1pqUZ5Lt+pcok3U5gFUPsIuMivQuJqbGnUSrQ9KtaxeGMK+D6IIf 0bYaMsPdrZyeN7Mpd6fu/aPzMGmy80pQgkVmYtIa096ygiY6LmXETQOQXL4x5wsfBoDI srm0Hpcmw5r2IRxT0ODy+0Oe+Gi043fjVmQwKYDn6cXn5qDxweKcDiSPibJi2b76CNqR +BZyjkdRixXOMUJz7zEoP8IdVqRjGrdGRc3v22odLZUtvktxRWhQjuCprHzM4iI6jO4m 2H3s/iK/gf2q9LGv1FF2uq8cYnxxJUXVzik04NuY8z+DPpBcAQy7wjEm9pV04c/ojxdK cQbQ== X-Forwarded-Encrypted: i=1; AHgh+RrG0qEpsxNXgGw5wW4u80FYG0Orqf6G+p7KNpcpupXxuxMMD4yOcBNX+L6BPfrIhb0cnt66DG1eX6W3xx4=@vger.kernel.org X-Gm-Message-State: AFuF++mmm2CK80tOqNKRnJEQjQgVuuHQ6pLVCANHfBdTlIOWErDQFPY3 6DlTHtEhGtQCsF4rxTxsuqPkHrnpMp642V//fdOVbOOBbaOVFtcsIwsW X-Gm-Gg: AR+sD1014leDvy8X6DBtGS0bXmJfSv6z477GfMDU737L2fFxNrDDiJ04Mhw+IxWe9Mi c4TBo5XQoi7lPyvDSjL6kdcAj7cYlN0v2RddTuhT7/v8fT9jAessQkVnv9Pw437LdOJPelGVHCN JHLoajlyCJwhzuflemPTPHvSTs5G6/4QGqnANZ38FfK5jWkWwlapN6F3/KTNAm4+87KfoD3PiGw LY76Pt1EtCpfeBFSWJpu5u+/vGs2RTEtnFY8uzkFbHzufHhHwew4uLv0DkoLdEhtVqzpwjcQV1n JBAd6DcEGoCV8bI/RPrAxDaOp0v6O6Du3uiEmTI3lFtVHTuYZwoTJfoS/8xsBgEJ9rusTpHLA12 zvRWVGbTxNMH6ZywH1lcY/JR+z6vKn0gM+3ANmJS4xfEwUhWusG6EbKWNt3t3tznxiQCNtM+Lqm twT+glCtF5FJ61t722YcM+ezUdSpQuK7odb/uzupKMjZeiEdy8n/xIfWA0kjmbsaPmD0BNXGm8Z uZnGc2b4XvEy+pHOlYT0usOWM2lnCLoqd3vJAsZRFkl6HK79j8wkOLDIF4wz8aJACEyxjbBjAA3 tIJfYQfUngzbW3vRjWU/BBNkb0Y0QqsPyWE5+bJi9/lqApOE+dfxeRSecTf9Rkm+oEw= X-Received: by 2002:a05:6000:27cc:20b0:482:bb55:8bdc with SMTP id ffacd0b85a97d-482bb558d7fmr23879f8f.1.1787179380523; Wed, 19 Aug 2026 15:43:00 -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.42.59 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 19 Aug 2026 15:43:00 -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, stable@vger.kernel.org Subject: [PATCH v2 1/5] KVM: arm64: vgic-v3: Undo assignment on iodev registration failure Date: Thu, 20 Aug 2026 00:42:25 +0200 Message-Id: <20260819224229.82948-2-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: quoted-printable Content-Type: text/plain; charset="utf-8" vgic_register_redist_iodev() assigns a redistributor region and base address to the vCPU before adding its iodev to the MMIO bus. However, the region's free_index is advanced only after registration succeeds. If kvm_io_bus_register_dev() fails, the vCPU retains the assignment while free_index still identifies the same slot as free. A later registration can therefore reuse a slot that remains assigned to the vCPU. Advance free_index when assigning the slot. On registration failure, return the slot and clear rdreg and base_addr. Fixes: dbd9733ab674 ("KVM: arm/arm64: Replace the single rdist region by a = list") Cc: stable@vger.kernel.org Assisted-by: Codex:gpt-5.6-sol Signed-off-by: Karl Mehltretter --- arch/arm64/kvm/vgic/vgic-mmio-v3.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kvm/vgic/vgic-mmio-v3.c b/arch/arm64/kvm/vgic/vgic-= mmio-v3.c index 5913a20d8301..c75caadbd1d3 100644 --- a/arch/arm64/kvm/vgic/vgic-mmio-v3.c +++ b/arch/arm64/kvm/vgic/vgic-mmio-v3.c @@ -766,6 +766,18 @@ unsigned int vgic_v3_init_dist_iodev(struct vgic_io_de= vice *dev) return SZ_64K; } =20 +static void vgic_unassign_redist_iodev(struct kvm_vcpu *vcpu) +{ + struct vgic_cpu *vgic_cpu =3D &vcpu->arch.vgic_cpu; + + guard(mutex)(&vcpu->kvm->arch.config_lock); + if (vgic_cpu->rdreg) { + vgic_cpu->rdreg->free_index--; + vgic_cpu->rdreg =3D NULL; + } + vgic_cpu->rd_iodev.base_addr =3D VGIC_ADDR_UNDEF; +} + /** * vgic_register_redist_iodev - register a single redist iodev * @vcpu: The VCPU to which the redistributor belongs @@ -818,16 +830,17 @@ int vgic_register_redist_iodev(struct kvm_vcpu *vcpu) rd_dev->nr_regions =3D ARRAY_SIZE(vgic_v3_rd_registers); rd_dev->redist_vcpu =3D vcpu; =20 + /* Protected by slots_lock */ + rdreg->free_index++; + mutex_unlock(&kvm->arch.config_lock); =20 ret =3D kvm_io_bus_register_dev(kvm, KVM_MMIO_BUS, rd_base, 2 * SZ_64K, &rd_dev->dev); if (ret) - return ret; + vgic_unassign_redist_iodev(vcpu); =20 - /* Protected by slots_lock */ - rdreg->free_index++; - return 0; + return ret; =20 out_unlock: mutex_unlock(&kvm->arch.config_lock); --=20 2.39.5 (Apple Git-154) From nobody Mon Sep 28 17:48:46 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 17E5F3E9C0D for ; Wed, 19 Aug 2026 22:43:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179386; cv=none; b=aMlS6rSjYKkmcO4y7kJPDrbDtE+uq/ogtqpi9inAxyNPKzDGQnulOUR6Tl+qVDiA0mQ5U+qNpzHxpo5EX1+m8io1aISUi0lUxpG+Pd6lcnrgo+y1yV0K3ufGbFr5Pgst8ppa1rdLTWIN09+HRQZY5aLRi1T+edzybpGclOXWs2E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179386; c=relaxed/simple; bh=2UF/dpEtNwUpXIy2/lsLjKtKkOc89V1LHpzMmRW/PXY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SQwXlLrm4FcJhHkXIPqSq66zDGi+Un0rs5C83WK8pKx5j/bUknFzYWcGCsPySVMb8fqDgxDC4QEoCpjZRyKj3PX7InDuvBwEV3qyYhpwG4GQv98lBbnllxToRuziHx3KY3rahjzioagu01O8h0Qf6XFh/1e/PArYeiyB9QxOo+c= 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=IiRnFXjl; arc=none smtp.client-ip=209.85.128.44 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="IiRnFXjl" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-4954a9e8490so2326315e9.1 for ; Wed, 19 Aug 2026 15:43:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787179383; x=1787784183; 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=3M8fODVTfcIR6x1BvOAoZIGong7qKVQ1WDu7Gk51RQs=; b=IiRnFXjlT192IJiaPsi5tX4fJIV/6L+/EPA9rxNKGssq2Fn90xYVETYiSjlnejToBX 1Jt0I06KbYthVi2fyC9cDrqHz0Df/XXRU9+3kEhqRnykbwLsZxAgsvpK6Tp/ojR+63gL yWVvJPVmos3AFpQAPOX23NNUjMfh9SEUDuG/XHHj5wc5AH8C26k/sP56kY7PxsZmruhe MeF2aZ7QT11Sk0Mq9K49V+RxVX6dlLfFxo5lB+RqUdHu2pEGoTS6frCFA27pZHipDNvu E3JAs3n5tsL02KrKwvNBxLJDIvhXwzXd0U1mfU9AyhptLAkcFncozyXFo17/BqsvMQZd t+7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787179383; x=1787784183; 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=3M8fODVTfcIR6x1BvOAoZIGong7qKVQ1WDu7Gk51RQs=; b=Se2PYaGVPaosauuMiGWo/X4I22/sHwG8xsKOimLoJdAm753mJTwDaGJ9Twz/kMgvYU +Bz0Aw8cNjJpfW7OShP7oRJzMG1CLgdvAOI9PDuHLtlbKN0TwMr0caYiVF8eUcpblGu/ ISWHMRzlyCZJAnNZt+9DYgvKdCe++IN5JEgGIEIl90unRUp595p4fGzy7QUoAhHYQ4iG FcPZoBQVhZELhAO1wDbKe7FLNbf8QhoNnBxLAxu6o0lc83KKD6bMm7u/hpViQgo6LCIb 0mqRaokBEg0eiLu6u5IUBRCt7sFUkiFZkYgOZ2VDJAeJIlSCzyaf6h4SbKVAtmHSYkbE 2vSA== X-Forwarded-Encrypted: i=1; AHgh+RqRg9PBFUb2NsEIxgUhH5QPst35++pp/cvdKVO86u4qSMSk2mpNqc1utHMuNhLjga74RpENQIu9OqZuWYM=@vger.kernel.org X-Gm-Message-State: AOJu0YzRT/84rPZn/lQ74J5FtJwkqK0V1SjTY/+qFaQDy/letic16iKy 50IGDa38yBPGtTXyr/+OSeFoXVA/Lyydo7dd9n94JtlTySH45cikOMhV X-Gm-Gg: AR+sD13LSdJAlaIx/1Ky63vsKUEw/ABd9WkXXiiXk3zz2ptl9VrQeuphbmVcQHXIJo9 dVvpMdhuE+wPh4CK+r72xrn0NZyPX7wpCUFaNzg2luSgpq/b4E1218vi4wGo0Dgic0iT7Ql57vA uhdwpYcbNmGRB57+1XbiZN2aayV2AKBS/XO/HWZd9sVCTuftm3G/TM7ndhnOJyHwafEQRAaKrEa RgXCT1lLN6TMq14yUn2ylRqfXjVIDIGWW6Cs/jGYBOjlkZKZNReJDaytoFtt4N/5eWQhNlfMtHP h0OAEwSKaPp6FT3MalFui1/GVG2on9bsf/iV2owYWeXXAKTfvLndoAqv/oR/FNIKgVQ9PEqN4De z05snfW0D1vAjoy0Vjs0J6yD+qPnow4fEX8LtjeQW2h1CE/QcNEfrxNOJyyRtvrps0E+3mZtVb4 4B+SZt1I6n51t1sZnHGv4TsIsJXghb/4275OQsUbNEGttZycAh2ecMGqZbCrRqLqc51unYSLMU+ LlgtHRE9L9PJJQb2zL6+ypxzTzFyXQEDb5/8lzLB1OBWtZohfsNf3KtW07CD5MAcHUdreEyoxM5 +mKH3VaDyUbQl7jggbnxWt6/QDWRi2177Hf2rB98NQWO0XnLUmLV6Dmepl9cJ/FkYOE= X-Received: by 2002:a05:600c:4309:b0:499:60e5:248a with SMTP id 5b1f17b1804b1-499b06ea247mr24837485e9.4.1787179383250; Wed, 19 Aug 2026 15:43:03 -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.01 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 19 Aug 2026 15:43:02 -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, stable@vger.kernel.org Subject: [PATCH v2 2/5] KVM: arm64: vgic-v3: Reset assignments after failed region setup Date: Thu, 20 Aug 2026 00:42:26 +0200 Message-Id: <20260819224229.82948-3-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: quoted-printable Content-Type: text/plain; charset="utf-8" A REDIST_REGION write can fail after redistributors from earlier regions have been registered. The rollback removes their iodevs from the MMIO bus but leaves rdreg and base_addr set. It also leaves free_index unchanged. A retry sees base_addr set and skips registration, leaving the redistributors absent from the MMIO bus. Make redistributor unregistration clear the cached assignment and return the region slot. The failing vCPU already unassigns itself, so the existing rollback resets the vCPUs processed before the failure. A retry can then assign and register all redistributors again. Fixes: c011f4ea106b ("KVM: arm/arm64: Check vcpu redist base before registe= ring an iodev") Suggested-by: Marc Zyngier Cc: stable@vger.kernel.org Assisted-by: Codex:gpt-5.6-sol Signed-off-by: Karl Mehltretter --- arch/arm64/kvm/vgic/vgic-mmio-v3.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/vgic/vgic-mmio-v3.c b/arch/arm64/kvm/vgic/vgic-= mmio-v3.c index c75caadbd1d3..331d203acb43 100644 --- a/arch/arm64/kvm/vgic/vgic-mmio-v3.c +++ b/arch/arm64/kvm/vgic/vgic-mmio-v3.c @@ -852,6 +852,7 @@ void vgic_unregister_redist_iodev(struct kvm_vcpu *vcpu) struct vgic_io_device *rd_dev =3D &vcpu->arch.vgic_cpu.rd_iodev; =20 kvm_io_bus_unregister_dev(vcpu->kvm, KVM_MMIO_BUS, &rd_dev->dev); + vgic_unassign_redist_iodev(vcpu); } =20 static int vgic_register_all_redist_iodevs(struct kvm *kvm) @@ -869,7 +870,7 @@ static int vgic_register_all_redist_iodevs(struct kvm *= kvm) } =20 if (ret) { - /* The current c failed, so iterate over the previous ones. */ + /* The failing vCPU has no assignment to undo. */ int i; =20 for (i =3D 0; i < c; i++) { --=20 2.39.5 (Apple Git-154) From nobody Mon Sep 28 17:48:46 2026 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: quoted-printable Content-Type: text/plain; charset="utf-8" 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-ini= t.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); =20 + if (kvm->arch.vgic.vgic_model =3D=3D 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); =20 mutex_unlock(&kvm->arch.config_lock); =20 - if (kvm->arch.vgic.vgic_model =3D=3D KVM_DEV_TYPE_ARM_VGIC_V3) - kvm_for_each_vcpu(i, vcpu, kvm) - vgic_unregister_redist_iodev(vcpu); - mutex_unlock(&kvm->slots_lock); } =20 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, =20 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); =20 - /* Garbage collect the region */ - kvm_for_each_vcpu(c, vcpu, kvm) { - if (vcpu->arch.vgic_cpu.rdreg =3D=3D rdreg) - vcpu->arch.vgic_cpu.rdreg =3D NULL; - } - list_del(&rdreg->list); kfree(rdreg); } --=20 2.39.5 (Apple Git-154) From nobody Mon Sep 28 17:48:46 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 7865E3E833E for ; Wed, 19 Aug 2026 22:43:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179392; cv=none; b=YT6grFRQ+syx+aTDsgSsMM+58dtEunp5moajM2+xfjX4jDfEUDNV5yotIPPoVc+S3FlotGw9YWuNap/jyjUXqsC3eqXwgDkDpB03S0rYQVoRAKl00Zvw6Zg5kIUTwinHeku0EuKLYyWZM9mRuq7jnG/2TEpqGW613SzliNDu7FM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179392; c=relaxed/simple; bh=5J3mZ5DG3X89coFj1lOxV+K0e69xR0vmOMWNHwJ/u4M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=t3UGbk91YRnaS61oqDSUOWWbeYdHx3gzRfY4E/rj3mM7rtWt9B4SWdKqt6eZ6MSYtWJx1KHd/T11DjmtVUkC+mzDg/GNsEWB4bRmYDKF7UnmpMTeUh4foWQ/iHv/lRPbEhV8/RHYwKJMhqV+KNiSIIzedE9CXYCzegjHvWVJ39A= 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=O+wI+Vaz; arc=none smtp.client-ip=209.85.128.50 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="O+wI+Vaz" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4953de5be0aso13080135e9.0 for ; Wed, 19 Aug 2026 15:43:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787179389; x=1787784189; 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=N7MrJ4egxCjisuoRkHErVFW1wlw+AkBqP17Bfxm8jyA=; b=O+wI+VazHsiKvrVGcPSmAPPManrbglxbsp2hoHGmn7m/s0yodOMlroHGrY/sCcY4Ke aKa+A11H+K3wotN9eWOZGUmZOwY9aJ/MII2Yo4FFfgZlvIe4kYJYb1CJz7pAr0/V7Ueh RehR7R1R2TvcP0m7m97tdcmSYPHr6HqaJmcuV3CSS1EBBUH3TSYXBtv+WA6zEeyylPus gw0Ha1OYn8YLu2HeM46yijtEIMtq5RIAB3hh51dGuLA4kMgeyL5j31GYmEu8XTxR9h59 cF2brqF21HNnnFbQxNEmlh0XP8T8YhFMqF0twK3BwY4/X/VzNu8ffjVGpPeic6Hr348R RsKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787179389; x=1787784189; 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=N7MrJ4egxCjisuoRkHErVFW1wlw+AkBqP17Bfxm8jyA=; b=lgnlMCkUhYkpsCgUN13pHZil7dbPKLB2v9ylsB0CnCxJ/XzJ+GnwUFseye/jwdTGLq QpiV9O/5NO3bZcZy7jFcd+Lp2DT+Joh79xf4BpMgOkIAmHSDxvi7NT5Iv5tIDYl01Y+9 e3Ceq8ZO4KUiQoJViGBcgpFOelgRfnD90lKcSU++Huzuyso+LVwfzbqKXA3V5NQTc3qS 7LHoIsdX/6t21Y8HqMqp4lBUFJbfd+L6A5+IZwZ7U0LlxoOTvaQCkrshhCgO8/8IV8R2 4phPEb3u6DPPw39wUu9bvdQ34XK107fqIFyK/BGcJQGRbR85xtujCsv0wUQAZt3OXAQN Vt4A== X-Forwarded-Encrypted: i=1; AHgh+RrkQmiqx2vnKPMAD8v6kK3qd8Xbj/h9RaaOJ0oJBFjPvdmgR9bzPE7IXX4x5Pgta8E8jSUtvjZswO3DvuY=@vger.kernel.org X-Gm-Message-State: AOJu0YxWnmLegEgIrQCwRFRfonrowQrHWlyZp3O+KL/FOa11hnv2Bh/q J6Ta71Xu78jlQVPeMTe29AbpsRbhw0jVmd+LSdoLQUT0c9b+Fo2JhThU X-Gm-Gg: AR+sD104gYkKAjPqMRhNg1jMCR1c5pEp+EGYl+SLYeUI8jSe45Wk90QMeIdJd54d0Wj 2SVK7X4hANj1sdJ5P6ZE7eJhyLkh6GGajG0ZSQO2SbS2o6GhsXztVrIG46i1TJX/oeGYtm6ylda R06cgM7Cz/6fVOFC13vyJuPhKkpsQ+9ibpoSEsCmp4+v+3MKcpJY2G/4osDRYXj5ljOtHRrgkBk uqkp9WzXamo8+Ix4ozo2n1EaGkUJEoy1IC8FAgJ98UyEd9i6fVfFdGCmL20flKpVHaDW1z8fDUx mNMA5sJKFnfKFr0/luU6LyZJxJNDt/YOMFAdszWJmGG6MsKtncn7iXVe5p0ZDby2EFPWTy8Crxm J24oJjndPnEr95FbxcSx6pF7VJa+8eFa9PBXtPUBPq1v6YWppDJIEEOEgUnPaQ9ZGG+FNgwBh+H kHLsfQvzl3eXyVGo34BsxnxFjYbVJkNDByp/HfjYnWnj21HUliqCPueNJDNDoaSiVHUTPuVWZg4 djsn3BzbEwvpCRWhcheH754SfTyfF8FK2/urhRcUG7s5E8/YZly4IbWTmB3BrKUg9xckUMBRfAZ KaXHAk8F2J8d35/eK7xkSBLs/xzG9SPvXixO8HzI0dbQOE6BRtJdYaZoJDHwT8tts6rhty/pnYl feg== X-Received: by 2002:a05:600c:a00f:b0:499:9069:c2c9 with SMTP id 5b1f17b1804b1-499aa1b6c8dmr158647395e9.11.1787179388687; Wed, 19 Aug 2026 15:43:08 -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.07 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 19 Aug 2026 15:43:08 -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 4/5] KVM: arm64: selftests: Pass guest code to vm_gic_create_with_vcpus() Date: Thu, 20 Aug 2026 00:42:28 +0200 Message-Id: <20260819224229.82948-5-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: quoted-printable Content-Type: text/plain; charset="utf-8" Pass the guest entry point to vm_gic_create_with_vcpus(), and use guest_code at the existing call sites. This lets tests with different guest code reuse the common VM and VGIC setup. Assisted-by: Codex:gpt-5.6-sol Signed-off-by: Karl Mehltretter --- tools/testing/selftests/kvm/arm64/vgic_init.c | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/kvm/arm64/vgic_init.c b/tools/testing/= selftests/kvm/arm64/vgic_init.c index 47e34b43afb2..91484fd4f786 100644 --- a/tools/testing/selftests/kvm/arm64/vgic_init.c +++ b/tools/testing/selftests/kvm/arm64/vgic_init.c @@ -73,12 +73,13 @@ static int run_vcpu(struct kvm_vcpu *vcpu) =20 static struct vm_gic vm_gic_create_with_vcpus(u32 gic_dev_type, u32 nr_vcpus, + void (*guest_fn)(void), struct kvm_vcpu *vcpus[]) { struct vm_gic v; =20 v.gic_dev_type =3D gic_dev_type; - v.vm =3D vm_create_with_vcpus(nr_vcpus, guest_code, vcpus); + v.vm =3D vm_create_with_vcpus(nr_vcpus, guest_fn, vcpus); v.gic_fd =3D kvm_create_device(v.vm, gic_dev_type); =20 return v; @@ -338,7 +339,7 @@ static void test_vgic_then_vcpus(u32 gic_dev_type) struct vm_gic v; int ret, i; =20 - v =3D vm_gic_create_with_vcpus(gic_dev_type, 1, vcpus); + v =3D vm_gic_create_with_vcpus(gic_dev_type, 1, guest_code, vcpus); =20 subtest_dist_rdist(&v); =20 @@ -359,7 +360,8 @@ static void test_vcpus_then_vgic(u32 gic_dev_type) struct vm_gic v; int ret; =20 - v =3D vm_gic_create_with_vcpus(gic_dev_type, NR_VCPUS, vcpus); + v =3D vm_gic_create_with_vcpus(gic_dev_type, NR_VCPUS, guest_code, + vcpus); =20 subtest_dist_rdist(&v); =20 @@ -411,7 +413,8 @@ static void test_v3_new_redist_regions(void) u64 addr; int ret; =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, + guest_code, vcpus); subtest_v3_redist_regions(&v); kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); @@ -422,7 +425,8 @@ static void test_v3_new_redist_regions(void) =20 /* step2 */ =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, + guest_code, vcpus); subtest_v3_redist_regions(&v); =20 addr =3D REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2); @@ -436,7 +440,8 @@ static void test_v3_new_redist_regions(void) =20 /* step 3 */ =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, + guest_code, vcpus); subtest_v3_redist_regions(&v); =20 ret =3D __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, @@ -608,7 +613,8 @@ static void test_v3_redist_ipa_range_check_at_vcpu_run(= void) int ret, i; u64 addr; =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, 1, vcpus); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, 1, guest_code, + vcpus); =20 /* Set space for 3 redists, we have 1 vcpu, so this succeeds. */ addr =3D max_phys_size - (3 * 2 * 0x10000); @@ -641,7 +647,8 @@ static void test_v3_its_region(void) u64 addr; int its_fd, ret; =20 - v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus); + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, + guest_code, vcpus); its_fd =3D kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_ITS); =20 addr =3D 0x401000; @@ -684,7 +691,8 @@ static void test_v3_nassgicap(void) u32 typer2; int ret; =20 - vm =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, vcpus= ); + vm =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, + guest_code, vcpus); kvm_device_attr_get(vm.gic_fd, KVM_DEV_ARM_VGIC_GRP_DIST_REGS, GICD_TYPER2, &typer2); has_nassgicap =3D typer2 & GICD_TYPER2_nASSGIcap; --=20 2.39.5 (Apple Git-154) From nobody Mon Sep 28 17:48:46 2026 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 126C33E9C12 for ; Wed, 19 Aug 2026 22:43:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179395; cv=none; b=EfHaoV3lbQ7pVSEDaF6E9iF4K58JLVSCJOD3BkmF5nc6/EO1i+YaqqWS71uSBkuNGiPOtTYg63RL6oAG934pUkD62E4CDbgFnJFENhqlWka6Bfcx1cQx3sG8EfRWGunvbW/2+hkxLhcmR7WKvmASGsFGfAvuSefvKlSZoXrIW80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787179395; c=relaxed/simple; bh=JsaezUgZuqyAGhX1M6QEu1MJ3MJycvUa7dNttqCPacs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IpCR3WU7WLqZSbsaR4nvKocjxbYmH4CdClgkkb41zJtOwCGZhbM9uFtyMI/G5G3zMwTA4tEONvJ3yIfvxVGKZ5QlG4fekfAyL5QkeGXUci8HRjeO4FrgD7DraC8VXziWpE3ehQlVWvXYbajPRSLiYIOBokMIm4gui3BVw4UxSqk= 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=ROCtQTT5; arc=none smtp.client-ip=209.85.221.43 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="ROCtQTT5" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-47fd66a094eso569755f8f.3 for ; Wed, 19 Aug 2026 15:43:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787179391; x=1787784191; 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=8yRbZXjon4rpFYxflr/N9botiLzLz0TZjPgpbneMm6g=; b=ROCtQTT5E04Gnh9WmnvRfdm2VDKKKaF+HR1l2u38PcaoqeHWwh8W2pAtsHFLGdctiL 2ob8siHIYz2RX1DqFZTiHVbdiztKSL47wIuLIW9LA7mpcUZb1kqaQToXOUqRTp6IRQgZ 8hXB8PHEecmG+NaKBEUOSKy3rzabjsQYVhE1nTrT0chjor66in0H0/JxnqzXVW8F1MFU 8AXi1pY5o7Lisf6VFQSmKe3a5oqsqxwaRRgZJ+tT3ASNspSRBiHqPFgrvHWSjvakAtId 2SRvjG5GYNIthXqDZBJOnHl8hufFRjcz/UJkWYj0InnZ2YDgl+Yv7h0Izpg2/duEbS67 lGaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787179391; x=1787784191; 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=8yRbZXjon4rpFYxflr/N9botiLzLz0TZjPgpbneMm6g=; b=qDXBDOCfN7bE2I4r9ohPk0rt3Ai/iA52APMO+/FoajBmW1pNoGifGWynnLsL2oQzbx sPIS86n0zKaA1jPdnnVFAILyLU8nL7/O1/XSGZ3akKBLu5JKnqXn1Ew7pQCD/SOVb6nF KgTlEBmxhIJK+/eMmS+JZ/czT5h4kXrG9PzochU4iOW7G91KduOn248FMRNPPUzxHf72 fr0OdHBkFdsiPDh7GC8JLdt2iWKs99+CSdV5c4P0IaR0+xwVm7NbGdJ7jwcu3x/mvBtw M/Wb1DDSvQQ16w5oG3aSI7jIjQZWZodFMV0qL0XTNDf+qb5JmfMuRldatDgO9GIyhYxy qWvw== X-Forwarded-Encrypted: i=1; AHgh+Rrn7Jc9OWcKU0lLIDJr1IDBfUCOXTF86jFXbG5NzKUJCUuAIvv2tVLfsKJEeVbqUiFlKHY9m0w3XYAF+8I=@vger.kernel.org X-Gm-Message-State: AFuF++kKRU5SVfiEmf/UxG+EgI1vcAHVPBwQGGpE/a8VGjWSKXyhW3tT W/AtmS+HSuctx+tmhrpcPIu18sS8oNsjtEgI8DrR5cPVD0gyG2HVuULo X-Gm-Gg: AR+sD11dqpwjMoAZDhgA0eNQ8cyBL4MnLxpprjooECkakn9G26qiN7ZFYyTtuzysTOy JJZ/hR8B3Mt+mUC5qMh6InFsB739irZWy6Ied4kkHR36J4VWCq/nZQoSmusme+zifbjxWxULnYZ OeFWsSwyktZROEky+z3MNw+tB+gdSobdYZZ27kFXnzDv4Oe4SXpXA9OAtu3BKRd+/h2wGtvniyK 5dQ+R+S6Hp2S11S+adXCR5TDF0t8FKOnLmEP4l8SucjndD7E7kcPKr1bknfLSjAYlfS0XrTFLDS j/MySv+P6Bw7fB+2thxODPhNb7CyfXNv2fDZa+MzA0sJwKeGuijDb+MYdmbe/jvfIz+LigYo01F bIPiBo3f+2dKn0O4uisqGBUW+U0eqhEuyXfv3F3GItl/HfBnV7duza/5ctHvPD2LoaRYllIgwYT vzzcBHAhXBsJGQCYpbPCMRntBJTcCXMFjh8f3lnty1rEHiUSVLKuHKVgSobclGPbWxQMxbG410q 0FDhDUnV/JU6lG2+E4TPts9FTg99BMSBpqO/KCEkKv6FSWiwPKXOX0Ux4Krsf+4ZdjBkysZYjGD qvBapWBHcUvJWaR6WJbv8sKeVH4Zwe2/E7jkc4VBge/fYQhCUj5QUTRjrzDWeDqZVrY= X-Received: by 2002:a05:6000:715:b0:47f:86d5:d1d7 with SMTP id ffacd0b85a97d-482b1e957b9mr16809030f8f.6.1787179391108; Wed, 19 Aug 2026 15:43:11 -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.09 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Wed, 19 Aug 2026 15:43:10 -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 5/5] KVM: arm64: selftests: Test VGICv3 redistributor region retry Date: Thu, 20 Aug 2026 00:42:29 +0200 Message-Id: <20260819224229.82948-6-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: quoted-printable Content-Type: text/plain; charset="utf-8" A failed REDIST_REGION write can remove redistributor iodevs without clearing their cached vCPU assignments. A retry then skips those assignments and leaves the redistributors absent from the MMIO bus. Create two partial regions, reject a third region that overlaps the distributor, and retry at a valid address. After initializing the VGIC, have the guest read GICR_TYPER from all four redistributors and check their processor numbers. This verifies the final configuration without assuming that assignments survive the failed write. Keep the redistributor IPAs outside the guest RAM memslot and install only the stage-1 mappings needed for the MMIO accesses. If an iodev is missing, KVM_RUN therefore exits with KVM_EXIT_MMIO. Without the fix, the first redistributor access exits at 0x8030008. Assisted-by: Codex:gpt-5.6-sol Signed-off-by: Karl Mehltretter --- tools/testing/selftests/kvm/arm64/vgic_init.c | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/tools/testing/selftests/kvm/arm64/vgic_init.c b/tools/testing/= selftests/kvm/arm64/vgic_init.c index 91484fd4f786..6d9998c764bc 100644 --- a/tools/testing/selftests/kvm/arm64/vgic_init.c +++ b/tools/testing/selftests/kvm/arm64/vgic_init.c @@ -5,6 +5,7 @@ * Copyright (C) 2020, Red Hat, Inc. */ #include +#include #include #include #include @@ -13,12 +14,21 @@ =20 #include "test_util.h" #include "kvm_util.h" +#include "gic.h" #include "processor.h" #include "vgic.h" #include "gic_v3.h" =20 #define NR_VCPUS 4 =20 +#define REDIST_RETRY_REGION0_BASE GICR_BASE_GPA +#define REDIST_RETRY_REGION1_BASE \ + (REDIST_RETRY_REGION0_BASE + 2 * KVM_VGIC_V3_REDIST_SIZE) +#define REDIST_RETRY_DIST_BASE \ + (REDIST_RETRY_REGION1_BASE + KVM_VGIC_V3_REDIST_SIZE) +#define REDIST_RETRY_REGION2_BASE \ + (REDIST_RETRY_DIST_BASE + KVM_VGIC_V3_DIST_SIZE) + #define REG_OFFSET(vcpu, offset) (((u64)vcpu << 32) | offset) =20 #define VGIC_DEV_IS_V2(_d) ((_d) =3D=3D KVM_DEV_TYPE_ARM_VGIC_V2) @@ -65,6 +75,22 @@ static void guest_code(void) GUEST_DONE(); } =20 +static void guest_check_redist_retry(void) +{ + unsigned int i; + + for (i =3D 0; i < NR_VCPUS; i++) { + u64 base =3D i < 3 ? REDIST_RETRY_REGION0_BASE + + i * KVM_VGIC_V3_REDIST_SIZE : + REDIST_RETRY_REGION2_BASE; + u64 typer =3D readq((void *)(unsigned long)(base + GICR_TYPER)); + + GUEST_ASSERT_EQ(GICR_TYPER_CPU_NUMBER(typer), i); + } + + GUEST_DONE(); +} + /* we don't want to assert on run execution, hence that helper */ static int run_vcpu(struct kvm_vcpu *vcpu) { @@ -462,6 +488,70 @@ static void test_v3_new_redist_regions(void) vm_gic_destroy(&v); } =20 +static void test_v3_redist_region_retry(void) +{ + struct kvm_vcpu *vcpus[NR_VCPUS]; + struct vm_gic v; + struct ucall uc; + u64 addr; + int ret; + + v =3D vm_gic_create_with_vcpus(KVM_DEV_TYPE_ARM_VGIC_V3, NR_VCPUS, + guest_check_redist_retry, vcpus); + + addr =3D REDIST_REGION_ATTR_ADDR(2, REDIST_RETRY_REGION0_BASE, 0, 0); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); + + addr =3D REDIST_REGION_ATTR_ADDR(1, REDIST_RETRY_REGION1_BASE, 0, 1); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); + + addr =3D REDIST_RETRY_DIST_BASE; + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_DIST, &addr); + + addr =3D REDIST_REGION_ATTR_ADDR(1, REDIST_RETRY_DIST_BASE, 0, 2); + ret =3D __kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, + &addr); + TEST_ASSERT(ret && errno =3D=3D EINVAL, + "register redist region colliding with dist"); + + addr =3D REDIST_REGION_ATTR_ADDR(1, REDIST_RETRY_REGION2_BASE, 0, 2); + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, + KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION, &addr); + + virt_map(v.vm, REDIST_RETRY_REGION0_BASE, REDIST_RETRY_REGION0_BASE, + vm_calc_num_guest_pages(v.vm->mode, + 3 * KVM_VGIC_V3_REDIST_SIZE)); + virt_map(v.vm, REDIST_RETRY_REGION2_BASE, REDIST_RETRY_REGION2_BASE, + vm_calc_num_guest_pages(v.vm->mode, + KVM_VGIC_V3_REDIST_SIZE)); + + kvm_device_attr_set(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, + KVM_DEV_ARM_VGIC_CTRL_INIT, NULL); + + vcpu_run(vcpus[0]); + switch (get_ucall(vcpus[0], &uc)) { + case UCALL_DONE: + break; + case UCALL_ABORT: + REPORT_GUEST_ASSERT(uc); + break; + case UCALL_NONE: + if (vcpus[0]->run->exit_reason =3D=3D KVM_EXIT_MMIO) + TEST_FAIL("Unexpected MMIO exit at 0x%llx", + vcpus[0]->run->mmio.phys_addr); + fallthrough; + default: + TEST_FAIL("Unexpected ucall %lu, exit_reason %u", + uc.cmd, vcpus[0]->run->exit_reason); + } + + vm_gic_destroy(&v); +} + static void test_v3_typer_accesses(void) { struct vm_gic v; @@ -986,6 +1076,7 @@ void run_tests(u32 gic_dev_type) =20 if (VGIC_DEV_IS_V3(gic_dev_type)) { test_v3_new_redist_regions(); + test_v3_redist_region_retry(); test_v3_typer_accesses(); test_v3_last_bit_redist_regions(); test_v3_last_bit_single_rdist(); --=20 2.39.5 (Apple Git-154)