[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v1 1/2] x86/amd_node: avoid divide-by-zero in amd_smn_init() under Xen dom0


  • To: <x86@xxxxxxxxxx>
  • From: Penny Zheng <penny.zheng@xxxxxxx>
  • Date: Wed, 6 May 2026 13:55:18 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0)
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WEGHCDfQ42PqJ5PokzCA75qVSyr4zXg8komsg2bzaf4=; b=jUK7tWwGYwpjpcIQXvAtNXJwgr9ie1zb1eZclxxLhEyan2V5dlaTUQQjwr61mCTWGIiA1ng4j/VWVBEfmyGfoFcvKoiVENeWwccm2cw0yoe+5J5LmBDj/I4+7nafAwwT0VLRoXsm0bpypYPKttqMdX4dyTRN4feZsmPbGBwX7dh/jDn8JdvqaFIn3wm0LDSd2WWmcXL9Rhv7a61xxjEN6+yy5jIkCKHohRtwWN6OEsJ+iuV63XuyAxayNxRbwHlXxy6cddz6Nxkmd4pdHuNQhLQHTQbOzf1Ihmiv78L/BUzVhDwXWjvh7qBv1p4GoZn5Sr0kNdFHwplVtslvkN1wVw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gT5sSpRgbJ3+NfaH6JETfRsV7BQRYWKAR2FC2YK2Ap9XXioOmZ+uwGr/MeK+dtQvdiPNdAzkkrbyXhygoyHAEF6MPtS0l4IiHwL4PPTb3AvWf3G4PAd9jb1ywQB1EUaZu1jkDSy/VlLirOQT/DMKCLBkVOd0r+D9jziCN2PeS8EAKe+GEZvIJSTFyNsJCTLoy4uXd4T+axCIJBftAcq9Fmb28KocM4Svxg8TyhjCPx+uV1+HuIo2a+5TWfZc9RytGZw3FQj2UICSRLASTe8igEsUeMWRGupD8v6sm+XJXJOJgV51lzrScnKakYcpG8M7aAfrr4xd63QBrB+kVqhRpg==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=amd.com header.i="@amd.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Cc: <ray.huang@xxxxxxx>, <Jason.Andryuk@xxxxxxx>, <stefano.stabellini@xxxxxxx>, Penny Zheng <penny.zheng@xxxxxxx>, "Mario Limonciello" <mario.limonciello@xxxxxxx>, Yazen Ghannam <yazen.ghannam@xxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxx>, Ingo Molnar <mingo@xxxxxxxxxx>, Borislav Petkov <bp@xxxxxxxxx>, Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>, "H. Peter Anvin" <hpa@xxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>, <linux-kernel@xxxxxxxxxxxxxxx>
  • Delivery-date: Wed, 06 May 2026 05:56:46 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

To prevent each dom0 vCPU from looking like an SMT sibling of another
vCPU, Xen synthesizes guest x2APIC IDs as vcpu_index * 2.
While the spacing every vCPU's APIC ID by 2 can therefore push the IDs
past the package-field boundary, making Linux see more packages than
the platform actually has. amd_num_nodes() inherits that inflated count,
so num_nodes can exceed num_roots (the number of AMD root complexes
discovered on the PCI bus). The subsequent

    roots_per_node = num_roots / num_nodes;
    ... count % roots_per_node ...

then divides by zero in amd_smn_init().

Reject num_roots < num_nodes explicitly and bail out with -ENODEV.

Signed-off-by: Penny Zheng <penny.zheng@xxxxxxx>
---
 arch/x86/kernel/amd_node.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/arch/x86/kernel/amd_node.c b/arch/x86/kernel/amd_node.c
index 0be01725a2a4..c896060fe0df 100644
--- a/arch/x86/kernel/amd_node.c
+++ b/arch/x86/kernel/amd_node.c
@@ -282,6 +282,18 @@ static int __init amd_smn_init(void)
                return -ENODEV;
 
        num_nodes = amd_num_nodes();
+
+       /*
+        * Xen dom0's synthetic APIC IDs may imply more nodes than host
+        * bridges visible in PCI config space. Bail out to avoid a
+        * divide-by-zero when later computing roots_per_node.
+        */
+       if (num_roots < num_nodes) {
+               pr_debug("AMD root count (%u) < node count (%u); skipping SMN 
init\n",
+                        num_roots, num_nodes);
+               return -ENODEV;
+       }
+
        amd_roots = kzalloc_objs(*amd_roots, num_nodes);
        if (!amd_roots)
                return -ENOMEM;
-- 
2.43.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.