From nobody Thu Apr 16 15:12:19 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4fxM1w3ftzz6Zq6R for ; Thu, 16 Apr 2026 15:12:20 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fxM1w03tJz4N1k for ; Thu, 16 Apr 2026 15:12:20 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776352340; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=TL/IAAQjef6Y42aAAF5scSeZD3KTN4Zsb2iUqgLQ6Rc=; b=ZngSz7RS41wnUBk5Pk4rpIcjO7tH6zUWjWowT19R8SpOZtkumVAg93GeIKUf7Mo5VptRLA /cRYTTFkpZLO8Cro0tA2+02SYiPvWtCPyK2NZN74WJKi4gnECogjM2xcSAJOFOVPMPHWZR I8RVlshCmacdT3nF/XJwbbxGQPZVlmMwuIKiPdOZ6r+TmUkLFOxrykJEQRbvh+vhKZc6d7 ra9oH+hfQvoU0jBJ+UfuB4weyRPwmybaWiA5xWVGRQpaDpeU3PP1wynS4ygScliFgx8Mwp iOplx5Nvwe/X9MFeFdHQxxDB1DNMYXsW2MD+GlWGxsarWbjqTIbyuB6tx3DYxw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776352340; a=rsa-sha256; cv=none; b=khDDb9p2o2tVjxDuKxiuK4jukeQ8/TfltpeB9PAypQLPhLWyaTQSEneN7Hy0hwmxq/QUh9 DAjGZ6dNmE7j5X7WQXNXVELsWJqZF6DAeQjwS10qnBRlk+dVIcvTE5bkrLLLdreqheiftL PyDNeSUmccJ3Pyvg/uDcvIcL1No/zignpzuVVRAtKkYCmLW1H4gWFFbe90qL7q0WgrzbSC eQrX9U5mQefBoqF6Si0XzHjtGx2OboUMYldBwWY0HHnaKlTTA7DPIZn1CzHxQxD+S1LhVT nsrAExOcVXBjvFzkKvqLUOPewXVtsdBnkhrMPyhYJRojsnAwws8AOnMyKanKWA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776352340; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=TL/IAAQjef6Y42aAAF5scSeZD3KTN4Zsb2iUqgLQ6Rc=; b=CP3S3s48wVKZIAyUxTa/lYsTSw6aqTWwYAqzBpZp7LVqza2B2zDzCgZBLgSd+97wX0boi9 o/VwE/EqQbFgdEm88VSpqx2jhWRw0a3+p3WktPhcZWeTmBS103CginytiXUAc6tf6P5Tox w/fxnM1UkkUAyKvqOu4vpAe1NOPnW3uvJcP2LMn3EGgP9ZXnKKu96Ja1h7BV++PuxBYIQo b7CyqiOqjcDzDp0ABpaKgHDX8uq8Jar2HEA8E7iWmbEO+V/t8CPrDl936EDX6qpxdhIWH/ uidzTCkS7XRYP7asY5R77W5oDrTg1bGV+Gd4uGadiXkGiTYOWy77/mvswaDRTw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fxM1v6Y0sz1CBT for ; Thu, 16 Apr 2026 15:12:19 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1e997 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 16 Apr 2026 15:12:19 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Colin Percival Subject: git: 70be695384d9 - stable/14 - x86: Add stub for Extended Destination ID support List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 70be695384d917f3ce2645b383fa9db6ccf8b0ca Auto-Submitted: auto-generated Date: Thu, 16 Apr 2026 15:12:19 +0000 Message-Id: <69e0fc53.1e997.2fbdb37b@gitrepo.freebsd.org> The branch stable/14 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=70be695384d917f3ce2645b383fa9db6ccf8b0ca commit 70be695384d917f3ce2645b383fa9db6ccf8b0ca Author: Colin Percival AuthorDate: 2026-03-16 23:37:04 +0000 Commit: Colin Percival CommitDate: 2026-04-16 15:11:54 +0000 x86: Add stub for Extended Destination ID support Without an IOMMU, the APIC standard only allows 8 bits of Destination ID for MSI messages, limiting us to 256 CPUs. While IOMMUs can allow for more than 256 CPUs to be supported, they are not necessarily desirable in virtualized environments. The Extended Destination ID standard authored by David Woodhouse uses 7 "Reserved" bits for the high bits of a 15-bit Extended Destination ID in order to address this: http://david.woodhou.se/ExtDestId.pdf Add a loader tunable machdep.apic_ext_dest_id to control the use of this feature; the default value (-1) means "autodetect" while 0 and 1 mean disabled and enabled respectively. Code to detect host support in Xen, Hyper-V, KVM, and Bhyve will come in future commits, as will the code to use this setting in msi_map and ioapic_program_intpin. Tested on: EC2 r8i.96xlarge MFC after: 3 weeks Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D55890 (cherry picked from commit d9db6d759dfcf4a4559e66e777599bb3fa8ca14c) --- sys/x86/include/apicvar.h | 1 + sys/x86/x86/local_apic.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/sys/x86/include/apicvar.h b/sys/x86/include/apicvar.h index 61c726f150df..bb2986c3bf67 100644 --- a/sys/x86/include/apicvar.h +++ b/sys/x86/include/apicvar.h @@ -262,6 +262,7 @@ device_t ioapic_get_dev(u_int apic_id); extern int x2apic_mode; extern int lapic_eoi_suppression; +extern int apic_ext_dest_id; #ifdef _SYS_SYSCTL_H_ SYSCTL_DECL(_hw_apic); diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c index 2efa0b9b5c1d..063ba0d43686 100644 --- a/sys/x86/x86/local_apic.c +++ b/sys/x86/x86/local_apic.c @@ -1925,6 +1925,17 @@ apic_setup_local(void *dummy __unused) } SYSINIT(apic_setup_local, SI_SUB_CPU, SI_ORDER_SECOND, apic_setup_local, NULL); +/* Are we in a VM which supports the Extended Destination ID standard? */ +int apic_ext_dest_id = -1; +SYSCTL_INT(_machdep, OID_AUTO, apic_ext_dest_id, CTLFLAG_RDTUN, &apic_ext_dest_id, 0, + "Use APIC Extended Destination IDs"); + +/* Detect support for Extended Destination IDs. */ +static void +detect_extended_dest_id(void) +{ +} + /* * Setup the I/O APICs. */ @@ -1936,6 +1947,10 @@ apic_setup_io(void *dummy __unused) if (best_enum == NULL) return; + /* Check hypervisor support for extended destination IDs. */ + if (apic_ext_dest_id == -1) + detect_extended_dest_id(); + /* * Local APIC must be registered before other PICs and pseudo PICs * for proper suspend/resume order.