From nobody Sun Feb 8 01:33:31 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.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 F264322154B for ; Sat, 20 Dec 2025 16:37:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766248646; cv=none; b=bWRMqFmGCJpvYnbSfYKYPp/niFhYRAEzOwbB0rO5W8EkLQn6fDlvfF1kotiC8Mx8UWdcOhBJSj4g7mVc1UgfT1pqkope8tTbuo0I+Sk2fwCOiXFYXRGYUoTULXOSGAYVxSPgXMftj6Q5AvRa8nXTR59Mz1QtYry3k5MRnlIO+98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766248646; c=relaxed/simple; bh=5sxeVmM1HSneHjU/I1Fk7AXM2eqK42xU7iyfuc1gJG0=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=sFRKp/Cr512Jcp/X1+CLA+1r5FzUdFlJSLFTz/T02Ki96g89GxoNzJSxAfHotBBNWLIOrdAUGSaJTmhKxgTIldCbcOCgWqb/Bn2A5O0IdQTbn8C7aFn7IRNwjSkoMQVWuLRdv6HVoZDYmi8/LZIWe92Qeowkh108Q6NcTS5Ymc8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com; spf=pass smtp.mailfrom=bytedance.com; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b=YXV0C9Ft; arc=none smtp.client-ip=209.85.216.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=bytedance.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bytedance.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bytedance.com header.i=@bytedance.com header.b="YXV0C9Ft" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-34c27d14559so2209253a91.2 for ; Sat, 20 Dec 2025 08:37:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1766248644; x=1766853444; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9FCav/YO9x/c2l0kK2rjBlOI4AUzqgUWfXFrOx8/XtI=; b=YXV0C9FtkWqPbfRYVgTfnBA84f3sDjLW57w2v9ix5Wn4P7I5XhDC0xSkTg3WFSj1yR Rq2tkGDO7KI45xo/HAOMPbtzZDWrrcGQ7zqZDzTxheumSCqzkG398cr50hmi9lBJZqiE ZiLSBPA7VjtXN7MBaGgmeApknzhyucywsN6AhgC4F5KWolhhfTkMGdEBiEYlaXW1fvQy jxbOwbQXf8Dj3gIMsUGRHkPQvDtEQBeTKPHE1O7IzQaztUZwHuX366mpW/q41kG1xAPA baQRDLt24Ztc89hzQ6CdQj9IfxEeZnAisAjlcOhbwJGEC40HqLljHfV8uNnxtP3HlqVr tPSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766248644; x=1766853444; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9FCav/YO9x/c2l0kK2rjBlOI4AUzqgUWfXFrOx8/XtI=; b=srB5kbOX3mKvUsqDr5xyx7s5D4KSVsyw7pqqx2+vspXpnzS49ERMAiG5Eiuc2QcGNs ptYjCMFb6o/GzqzwtAQzXDfsVYkUWlFpnP0OLMEp7Ou/5FRFi4lr6sU0gm7H18cpJ7he 2HQlgFYNlDJRFC+2q7GSOKTqlHsundczx+VXRH2UDF7IQntEf62Lxxm0Hbt/xnmvyWe2 FKONEmAlp4rmRC41Dvz/VoJGXH//Rd5A8jjlD7m67fG889py/GSGaUSxVGP/YEXtymcG HBV0lwFOD0M6bAXj5cp5kAQ5LfeP0dNUMWu/m/OcVZ0h6LomNaCMPj05NzElo3SWIb4E umpw== X-Forwarded-Encrypted: i=1; AJvYcCU8y/nIOyXh2wwvX6jFTT1ZfLfi56zRHNrIQIVNromzM1O8Dcr/XuTY83KcVFWers62gk+89YpDoL9SOJg=@vger.kernel.org X-Gm-Message-State: AOJu0YzyMRYvmSsdC5AhU8ASeeNVsOxQCaPsIHobfNYYt/2DGHz44nJg XTTlgUCJX3+hhBy8J/hzOr0L+Ms+6H/C0jYL2r86/UbKaGZ9cC0wm9wgFzCzBL7u5hP3F9u7ggr B5nYb1x0= X-Gm-Gg: AY/fxX6K2dolmQnXQMHveDZDf5ZVrqhTUMocL5RxbLLBXNxp/QNZPW4xRXnKKRBtgyU dEecNbIlp2AF8yXPvb31yEFPI4rSkDM+ZI59V+ogcMHmmWoJwdj2Tg8HH/FIO8jhWtt/nBB6hM9 mgpNRKc/4pF5O02XxpR6R3Hi3cyvTci/YYZgGHvCY7ro/W+Z6KiJF1Kn+h+DwCDvZUbJ4Owdpp8 CXMUMU2RQHftTjE2STrJ210tGmicviDUJuYlzWO5nM/s4/FqS0ghZmOvsBsdnU5d3FDeaNvjIdi wdlc7ePTI80gYpTQElQOXVSUZI7VFjf1vJ3d8MT5dQgUiWW+DpP5U1kFrIIDXCs93MZJd5mn2M0 e4OdsPtlQyl19TtDgqv0SNpIuu3Lj23NgN72TbV9ubcUVIU/ORGWwjdIVQwVqDqApU5+tnm2DEU ius6pqBhls4YLh74Z4zj8wpj1m5AC1DyyBClYRsDV6jSF0WfkD0HEN X-Google-Smtp-Source: AGHT+IEJ3D8d9FhHHj3AGrLqpCRsqvYXaepmMKWkAaQAZJhz7+7JujmZvyMN56HD4piBnaPs2x/1og== X-Received: by 2002:a17:90b:51c8:b0:340:bb64:c5e with SMTP id 98e67ed59e1d1-34e9212a206mr5848851a91.14.1766248644122; Sat, 20 Dec 2025 08:37:24 -0800 (PST) Received: from J9GPGXL7NT.bytedance.net ([139.177.225.252]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-34e70dbc9d6sm8368055a91.10.2025.12.20.08.37.19 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 20 Dec 2025 08:37:23 -0800 (PST) From: Xu Lu To: anup@brainfault.org, atish.patra@linux.dev, pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu, alex@ghiti.fr, tglx@linutronix.de Cc: kvm@vger.kernel.org, kvm-riscv@lists.infradead.org, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Xu Lu Subject: [PATCH v3] irqchip/riscv-imsic: Adjust the number of available guest irq files Date: Sun, 21 Dec 2025 00:37:13 +0800 Message-ID: <20251220163713.34040-1-luxu.kernel@bytedance.com> X-Mailer: git-send-email 2.50.1 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" During initialization, kernel maps the MMIO resources of IMSIC, which is parsed from ACPI or DTS and may not strictly contains all guest interrupt files. Page fault happens when KVM wrongly allocates an unmapped guest interrupt file and writes it. Thus, during initialization, we calculate the number of available guest interrupt files according to MMIO resources and constrain the number of guest interrupt files that can be allocated by KVM. Signed-off-by: Xu Lu --- arch/riscv/kvm/aia.c | 2 +- drivers/irqchip/irq-riscv-imsic-state.c | 7 ++++++- include/linux/irqchip/riscv-imsic.h | 3 +++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c index dad3181856600..cac3c2b51d724 100644 --- a/arch/riscv/kvm/aia.c +++ b/arch/riscv/kvm/aia.c @@ -630,7 +630,7 @@ int kvm_riscv_aia_init(void) */ if (gc) kvm_riscv_aia_nr_hgei =3D min((ulong)kvm_riscv_aia_nr_hgei, - BIT(gc->guest_index_bits) - 1); + gc->nr_guest_files); else kvm_riscv_aia_nr_hgei =3D 0; =20 diff --git a/drivers/irqchip/irq-riscv-imsic-state.c b/drivers/irqchip/irq-= riscv-imsic-state.c index dc95ad856d80a..1e982ce024a47 100644 --- a/drivers/irqchip/irq-riscv-imsic-state.c +++ b/drivers/irqchip/irq-riscv-imsic-state.c @@ -794,7 +794,7 @@ static int __init imsic_parse_fwnode(struct fwnode_hand= le *fwnode, =20 int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque) { - u32 i, j, index, nr_parent_irqs, nr_mmios, nr_handlers =3D 0; + u32 i, j, index, nr_parent_irqs, nr_mmios, nr_guest_files, nr_handlers = =3D 0; struct imsic_global_config *global; struct imsic_local_config *local; void __iomem **mmios_va =3D NULL; @@ -888,6 +888,7 @@ int __init imsic_setup_state(struct fwnode_handle *fwno= de, void *opaque) } =20 /* Configure handlers for target CPUs */ + global->nr_guest_files =3D BIT(global->guest_index_bits) - 1; for (i =3D 0; i < nr_parent_irqs; i++) { rc =3D imsic_get_parent_hartid(fwnode, i, &hartid); if (rc) { @@ -928,6 +929,10 @@ int __init imsic_setup_state(struct fwnode_handle *fwn= ode, void *opaque) local->msi_pa =3D mmios[index].start + reloff; local->msi_va =3D mmios_va[index] + reloff; =20 + nr_guest_files =3D (resource_size(&mmios[index]) - reloff) / IMSIC_MMIO_= PAGE_SZ - 1; + global->nr_guest_files =3D global->nr_guest_files > nr_guest_files ? nr_= guest_files : + global->nr_guest_files; + nr_handlers++; } =20 diff --git a/include/linux/irqchip/riscv-imsic.h b/include/linux/irqchip/ri= scv-imsic.h index 7494952c55187..43aed52385008 100644 --- a/include/linux/irqchip/riscv-imsic.h +++ b/include/linux/irqchip/riscv-imsic.h @@ -69,6 +69,9 @@ struct imsic_global_config { /* Number of guest interrupt identities */ u32 nr_guest_ids; =20 + /* Number of guest interrupt files per core */ + u32 nr_guest_files; + /* Per-CPU IMSIC addresses */ struct imsic_local_config __percpu *local; }; --=20 2.20.1