From nobody Wed Oct 8 21:41:16 2025 Received: from mail-wm1-f74.google.com (mail-wm1-f74.google.com [209.85.128.74]) (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 1DEAF27BF95 for ; Tue, 24 Jun 2025 09:23:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750756990; cv=none; b=FtMov8Q+UJye5aYVnOlPI+NxqHtiS4TXl3TQYcd3yNxHbxaz6C3dk0tYzSsAoZxBccRxH5edvNHO2nuOdnZzt7EEWy+4hk+sEH3B2YjJ0dCJXXPmUqBFspo7UAzi/gu0AJ+hUA1CyjVmcu2hCY0yN3dyJ+0I/3MvX7NDrlz5bsQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750756990; c=relaxed/simple; bh=l3m7FhiLM/McN3mI9q18qHpMk9udwtRdVtDv+3q2NY0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=CPD05El86QU6EuWcOXiBsfiK92mklffH2j6D5Ai62Ybf224aa8rdcseQByIW+UHecnI0DM2Hk2pQsuqMzT+Y7BfpmJN2pN4Y/WrAvb64N8kNzVu+QedpVS7ikxc+fxlss5BWW2M+0goPQhaDlDqiJtRCEFT5P/QtW9FrvAL+B/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--keirf.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=fdRkeQP3; arc=none smtp.client-ip=209.85.128.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--keirf.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="fdRkeQP3" Received: by mail-wm1-f74.google.com with SMTP id 5b1f17b1804b1-4537f56ab74so1406685e9.3 for ; Tue, 24 Jun 2025 02:23:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1750756987; x=1751361787; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=gnkSB92ftCEMF+gRpwfaLkPqS/gljqC5XzxNgYk33lQ=; b=fdRkeQP3MC2sRJwPJoqFXGTHwdXoRgSfaarKB+4yeYuvwstP4LQO5F3zUKnP5h3kRw 6FknpGo/yKB6mY49HV1Bsmx+Tgi9I2PlRdtpkAk34yXP9ZQGzZzXYBkOynILajQNAqix FF2yyxFHboR8awt9XSrgEMNr0MJJ0aSmerszkyYTiRGN+16Q7UMsT0ESmUzhkNTwTGCL WykDpqkuCms0blam/zIT3uoiNbxHW18QFGi59yBzw924FWV98fsdsXWRhGjt66Kjkujh evtc73I9RqVmOOZMvlvi1Fee2Dlpv61shxL1ZDmFkM3/jBEVdK80P8Uuj0dxZbc2yg3k INqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750756987; x=1751361787; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=gnkSB92ftCEMF+gRpwfaLkPqS/gljqC5XzxNgYk33lQ=; b=cwmhmE51wpZhqS6Akdd07UtwgwgaDI24p2Xr6OZrFsKnzGRP9/DoghB9UmE5w13wFE YOKfN/f/rDJKmJZZwPTWaM9sMG5frXFBBGpKQZD2TghOPpAQls0icYSy2QoNU98B9Pr6 SXeBypRYBe/a9+xTBvrL6h9M4vfqAtDU0qLDPAc3itHinrFEAhyP/Ia/5bVHVrr8ZcLL IIhKFPsuyzt95bmRlXdlQfd/Bk8cwWlIjNJisCSZYQ0qF/UDsDjX2/aYZbJdsBoczc7d F8lkvUESEK8FuEPy8pgnPZyHL8Koho/T3Em19HX1m+OxnirMkany1ykaPgDRTHaHTDXr ONzA== X-Forwarded-Encrypted: i=1; AJvYcCVQReppyJ8uQbyXH+tMHkV8cl69wLUjV+3ciC24/ZCiyuarYslpjY9T8AQz19XCg0nJgaHY+96qrcne3jQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxBe1q6CrQArv4QlF6b2GsrvCeeOE1JRIQKDWhbeNPTFoqS0etD J3y7W9OOcqHgt0pffA3v9Ub0ykY72nNunelTAsbMKs7T9hFf7KVyYrk4cBT16qat44jMyRn1gtf o5Q== X-Google-Smtp-Source: AGHT+IENBGL6rEhAk+NNskr4lOMge+pijt5IJ1Z408FeHTt6NB0j+98GwBkWX+DuFsdVnafeh8q4qfdzww== X-Received: from wmbel22.prod.google.com ([2002:a05:600c:3e16:b0:450:dcfd:1870]) (user=keirf job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1c99:b0:440:54ef:dfdc with SMTP id 5b1f17b1804b1-453659c9c2amr140402165e9.8.1750756987581; Tue, 24 Jun 2025 02:23:07 -0700 (PDT) Date: Tue, 24 Jun 2025 09:22:53 +0000 In-Reply-To: <20250624092256.1105524-1-keirf@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250624092256.1105524-1-keirf@google.com> X-Mailer: git-send-email 2.50.0.rc2.761.g2dc52ea45b-goog Message-ID: <20250624092256.1105524-2-keirf@google.com> Subject: [PATCH 1/3] KVM: arm64: vgic-init: Remove vgic_ready() macro From: Keir Fraser To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Eric Auger , Oliver Upton , Marc Zyngier , Will Deacon , Paolo Bonzini , Keir Fraser Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" It is now used only within kvm_vgic_map_resources(). vgic_dist::ready is already written directly by this function, so it is clearer to bypass the macro for reads as well. Signed-off-by: Keir Fraser --- arch/arm64/kvm/vgic/vgic-init.c | 5 ++--- include/kvm/arm_vgic.h | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-ini= t.c index eb1205654ac8..502b65049703 100644 --- a/arch/arm64/kvm/vgic/vgic-init.c +++ b/arch/arm64/kvm/vgic/vgic-init.c @@ -559,7 +559,6 @@ int vgic_lazy_init(struct kvm *kvm) * Also map the virtual CPU interface into the VM. * v2 calls vgic_init() if not already done. * v3 and derivatives return an error if the VGIC is not initialized. - * vgic_ready() returns true if this function has succeeded. */ int kvm_vgic_map_resources(struct kvm *kvm) { @@ -568,12 +567,12 @@ int kvm_vgic_map_resources(struct kvm *kvm) gpa_t dist_base; int ret =3D 0; =20 - if (likely(vgic_ready(kvm))) + if (likely(dist->ready)) return 0; =20 mutex_lock(&kvm->slots_lock); mutex_lock(&kvm->arch.config_lock); - if (vgic_ready(kvm)) + if (dist->ready) goto out; =20 if (!irqchip_in_kernel(kvm)) diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h index 4a34f7f0a864..233eaa6d1267 100644 --- a/include/kvm/arm_vgic.h +++ b/include/kvm/arm_vgic.h @@ -399,7 +399,6 @@ u64 vgic_v3_get_misr(struct kvm_vcpu *vcpu); =20 #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel)) #define vgic_initialized(k) ((k)->arch.vgic.initialized) -#define vgic_ready(k) ((k)->arch.vgic.ready) #define vgic_valid_spi(k, i) (((i) >=3D VGIC_NR_PRIVATE_IRQS) && \ ((i) < (k)->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS)) =20 --=20 2.50.0.rc2.761.g2dc52ea45b-goog From nobody Wed Oct 8 21:41:16 2025 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 310F327C16A for ; Tue, 24 Jun 2025 09:23:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750756992; cv=none; b=tQ+heRWrF7OLTYHrOUxVslMVVucLmxYYkPhPP3wCIE0ps15NfS5v+MTXwlpOGgxsAKGmL4ChtkZEui0nz6KJTVeiMAk6StNxIh6ZetYDbe36gHX9ZHaD+CPUGRWLRlql97f7Kyc9/sLtwse7BWquoF62wemRO8eP/Cf4XR8xSmg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750756992; c=relaxed/simple; bh=583wsMDBMJrMhyGcOptLAkwUC1sLZ7/fwnjcJ8OxnvE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=AYIngnjCnVI20zc6R81ZWIbrPEncAUW/fODWd/si+Zyc1FBQrOqhluksHWq5+ynfo9zH1YAsrb8kTifFpZ14Dyn7Mugid3Xm3V5Sp42dJ3QQm4dZFRWsDne7hxb2p0kOGVdBgS0KcPgf63MgttXlewmSbgz5cPmUOBZapl473C4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--keirf.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gThEaZUq; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--keirf.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gThEaZUq" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-3a4f6ba526eso3200909f8f.1 for ; Tue, 24 Jun 2025 02:23:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1750756989; x=1751361789; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=UC6vq5jBb1v1bd72k3pkcapbf6E4MjOjFHfh0Y/a140=; b=gThEaZUqaulHp8CvIs77Pkb5zR6fwiXv9ppwfm6bKgZh/zUVeL/JETqV9pBh3qt7Ei P+PxpqoWipRNQUezVszI/pd9NljmXvJk6AtG1CMXVkKZQQqfOYtjPMMbmjw8dCC+VS1q sbV4AB/DkW4uI6umuLD3cTZX/PtNMapWfSbUnA1rD83sg7oK3gpJPPdQIxUdUMLyOwGx v5roOXZMGgpLY3ES6TySj8sJy0xswP9UiFTZlMS880O4jF8dKjGnlORHbboAl6xRCaQC 8Jb38Kb/qR8dC0o6Pm98yBt5jZKT+lhpsujXnJuU/CVStWAJsMC5/FGJ8gyeRyvSWqtL o9Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750756989; x=1751361789; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UC6vq5jBb1v1bd72k3pkcapbf6E4MjOjFHfh0Y/a140=; b=wKZHnb2oP23mP4AJ0vFaht+VyEtzJx0nSGwrL50qUt9umaCPf13uzfoLNt3QC425XM tcBqAf0pWymqWxECwCTfQYT/5lON3FR7pNQ4cicp9c4QYKPcUyLk+Sr5CxYpEUxX8SSl DbG0d3uuZRK+0oF2Y2W73PCNJ+yKZwAMAKdY5JilmdxtP4v0ugq7erLGTH6HKYV28ODR IKkJEt+8YLe/wxXEucU6tQR4E582dz5ZnJj7tr1HOA/gTZcLV2yrTfZGsqN/5a3Rl0Hc 8XD5rf7314ihqzteNhbR8hNEgLqyrd3sF6mng1SxJr4beobW820yX3g/yCvW0i0sm6ha JeWw== X-Forwarded-Encrypted: i=1; AJvYcCXSJpeBPu25Jua2AiW7LAXgNxDJb2Xm0csAzL89ZRg7kJHIhOl3N2MYvb8BZxBqjkJuvQAVwXFEVwtP7ek=@vger.kernel.org X-Gm-Message-State: AOJu0YxlRkXUAQsFVY9HokvHHLoitnEQGyPv7caDqTUp+mwhWLAE1mSa i/NYMUz8S/VBzSE4dKuVYwKyYDsM9o9VaHCV6m2NglVcnbGTh6RT32nRUtQUatJ0ojDA7Y9eOjM yrw== X-Google-Smtp-Source: AGHT+IEr7r98giCBtL0yinhHNgdvxQNlG3HKjSDL95dDG4D8sHcl523PslIHgko1ki0lJc9tb1d51y0i9A== X-Received: from wmbdt3.prod.google.com ([2002:a05:600c:6303:b0:451:deba:e06f]) (user=keirf job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2582:b0:3a4:dc42:a0ac with SMTP id ffacd0b85a97d-3a6d1324294mr13113188f8f.49.1750756989691; Tue, 24 Jun 2025 02:23:09 -0700 (PDT) Date: Tue, 24 Jun 2025 09:22:54 +0000 In-Reply-To: <20250624092256.1105524-1-keirf@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250624092256.1105524-1-keirf@google.com> X-Mailer: git-send-email 2.50.0.rc2.761.g2dc52ea45b-goog Message-ID: <20250624092256.1105524-3-keirf@google.com> Subject: [PATCH 2/3] KVM: arm64: vgic: Explicitly implement vgic_dist::ready ordering From: Keir Fraser To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Eric Auger , Oliver Upton , Marc Zyngier , Will Deacon , Paolo Bonzini , Keir Fraser Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In preparation to remove synchronize_srcu() from MMIO registration, remove the distributor's dependency on this implicit barrier by direct acquire-release synchronization on the flag write and its lock-free check. Signed-off-by: Keir Fraser --- arch/arm64/kvm/vgic/vgic-init.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-ini= t.c index 502b65049703..bc83672e461b 100644 --- a/arch/arm64/kvm/vgic/vgic-init.c +++ b/arch/arm64/kvm/vgic/vgic-init.c @@ -567,7 +567,7 @@ int kvm_vgic_map_resources(struct kvm *kvm) gpa_t dist_base; int ret =3D 0; =20 - if (likely(dist->ready)) + if (likely(smp_load_acquire(&dist->ready))) return 0; =20 mutex_lock(&kvm->slots_lock); @@ -598,14 +598,7 @@ int kvm_vgic_map_resources(struct kvm *kvm) goto out_slots; } =20 - /* - * kvm_io_bus_register_dev() guarantees all readers see the new MMIO - * registration before returning through synchronize_srcu(), which also - * implies a full memory barrier. As such, marking the distributor as - * 'ready' here is guaranteed to be ordered after all vCPUs having seen - * a completely configured distributor. - */ - dist->ready =3D true; + smp_store_release(&dist->ready, true); goto out_slots; out: mutex_unlock(&kvm->arch.config_lock); --=20 2.50.0.rc2.761.g2dc52ea45b-goog From nobody Wed Oct 8 21:41:16 2025 Received: from mail-wr1-f73.google.com (mail-wr1-f73.google.com [209.85.221.73]) (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 0860627E7D2 for ; Tue, 24 Jun 2025 09:23:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750756994; cv=none; b=oKwaqA/hF5DHR4ZKZndjblqpWHvXRs0d2S3Q/eAatRr7b++ZxSGvXclLByFsFeGBhBWCI5T8RDbZ0pq/QDXIup6o4APB8zBukkpyjQzrVyf/zQl2QJ6IveAh0LZzP9qdUeIk/orvWxnO6YFCd0j7DxzuF8Kh9MVijKKdO174siw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750756994; c=relaxed/simple; bh=sNqOydOUdFsJOifTupwq4nSErJexqWdbFSAp0X/BHs8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Pe/JhfO3bw4tAgBsaw9/ofHjMZGolche2zUsmN7BJfXbqsoNgCk3BLi7wy1wTMpA96eQaMv1cDDqrjntZOIogFy/ekfj6ASQZjH8u19D/WHwpCvndM+NpUpk5+zKjCPlvrCWbEjmwZ43QhQ3h/khYi1T2I0ajrrs3PWStleebNU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--keirf.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=h9led1XW; arc=none smtp.client-ip=209.85.221.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--keirf.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="h9led1XW" Received: by mail-wr1-f73.google.com with SMTP id ffacd0b85a97d-3a4f8fd1847so89863f8f.1 for ; Tue, 24 Jun 2025 02:23:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1750756991; x=1751361791; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=uwYf71jp03MdxLBkkbihaPjia5WcEiabBGw3WgO3Tes=; b=h9led1XWTZfvwQ0HGJ1WTjxeK/BJXJWnRHGOckpcDyaEjH8dNLW2GZorHYpUGrH/zi z5bXxjhy8uVdYcYTxbKm3mvRLgueza4siPq16u+syIuf5Ck6cft+EULyr12ig+cJEnL8 eCoVMLaD6ectFxpzu9H8tyyxznUA6W58dWhqz7lBk4Zo3PFZzIVDCtrGkWcPv9K40ukY z69tA0PM/ksXw3fCoL7AZeGvjD62OZXL4+MhO3lXKdrTf8hAwnrz4Wo3YKBEbVPDJLDn UFspZcgkrd9blPp3EbNNsRFmv0MKnEG/jpfLz/YF9iMmbgFIXBI3aCnJP8ey8vyJg+r0 xZtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750756991; x=1751361791; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uwYf71jp03MdxLBkkbihaPjia5WcEiabBGw3WgO3Tes=; b=oaRPpyQtdpHkZ9DCWWmadRjjihFZXS/YIDlbrChmFtPqb8DZ0yQ1Lr/3q1BNNEOjlV SSib/chMbikCud9ml2cdPnqwgrnXcfNbibHaO6WwzPh2vfq/p6/HK2YfaVrK0TRT6jCw 1fnMHK82uYaWsGLKUQ15O2DwoNo3tznB+mKnUNVjMqVrNQremcuwRDKko36AjKjdle37 eADySl04KXtGbzsbxy9gGys0hAUCHpmiyTF67TxdKqEKqYMjGvmnfUmtw1yK1UFvAyq/ pc3RdKEIAALQNccJerJ+GrZUKta4QdXjC0ofJ3NRv6oyAOZ8ndJSskOnjzUlNbvWphoX 0nGA== X-Forwarded-Encrypted: i=1; AJvYcCWsUJdZJMuwe1sp8uTzNXL/oMDi8ugLEvlyi42KjBPplOE9ao7fK+8wfZY1AgYmfR+B9/QDz+y50/Rj314=@vger.kernel.org X-Gm-Message-State: AOJu0YzeJHk8T8+3/rnaRKWA7I+gJcBBjDrCBv6l1AOIqTWqZiDD/c2u ZSjr/QF4ZlQFiudEK4DDqwVGENoKmWbvnJGb3MC2t7wzxnRJIchHd56668P119U3bmjrZMmlysB RKA== X-Google-Smtp-Source: AGHT+IH24B8WCr6OqpYTzgXlBOmAaqywmufYf+A6d0IPqpHPXgTUr1i0hczj9/ID0CWcv/+olmz2NYEObg== X-Received: from wmqd12.prod.google.com ([2002:a05:600c:34cc:b0:450:cb8f:62cc]) (user=keirf job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2004:b0:3a4:f50b:ca2 with SMTP id ffacd0b85a97d-3a6d12fae98mr11445680f8f.8.1750756991731; Tue, 24 Jun 2025 02:23:11 -0700 (PDT) Date: Tue, 24 Jun 2025 09:22:55 +0000 In-Reply-To: <20250624092256.1105524-1-keirf@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250624092256.1105524-1-keirf@google.com> X-Mailer: git-send-email 2.50.0.rc2.761.g2dc52ea45b-goog Message-ID: <20250624092256.1105524-4-keirf@google.com> Subject: [PATCH 3/3] KVM: Avoid synchronize_srcu() in kvm_io_bus_register_dev() From: Keir Fraser To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Eric Auger , Oliver Upton , Marc Zyngier , Will Deacon , Paolo Bonzini , Keir Fraser Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Device MMIO registration may happen quite frequently during VM boot, and the SRCU synchronization each time has a measurable effect on VM startup time. In our experiments it can account for around 25% of a VM's startup time. Replace the synchronization with a deferred free of the old kvm_io_bus structure. Signed-off-by: Keir Fraser --- include/linux/kvm_host.h | 1 + virt/kvm/kvm_main.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 3bde4fb5c6aa..28a63f1ad314 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -205,6 +205,7 @@ struct kvm_io_range { struct kvm_io_bus { int dev_count; int ioeventfd_count; + struct rcu_head rcu; struct kvm_io_range range[]; }; =20 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index eec82775c5bf..b7d4da8ba0b2 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -5924,6 +5924,13 @@ int kvm_io_bus_read(struct kvm_vcpu *vcpu, enum kvm_= bus bus_idx, gpa_t addr, } EXPORT_SYMBOL_GPL(kvm_io_bus_read); =20 +static void __free_bus(struct rcu_head *rcu) +{ + struct kvm_io_bus *bus =3D container_of(rcu, struct kvm_io_bus, rcu); + + kfree(bus); +} + int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t a= ddr, int len, struct kvm_io_device *dev) { @@ -5962,8 +5969,7 @@ int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm= _bus bus_idx, gpa_t addr, memcpy(new_bus->range + i + 1, bus->range + i, (bus->dev_count - i) * sizeof(struct kvm_io_range)); rcu_assign_pointer(kvm->buses[bus_idx], new_bus); - synchronize_srcu_expedited(&kvm->srcu); - kfree(bus); + call_srcu(&kvm->srcu, &bus->rcu, __free_bus); =20 return 0; } --=20 2.50.0.rc2.761.g2dc52ea45b-goog