Date: Thu, 16 Apr 2026 15:12:22 +0000 From: Colin Percival <cperciva@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 0ef872c9353e - stable/14 - io_apic: Support APIC Extended Destination IDs Message-ID: <69e0fc56.1f172.4ff80197@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch stable/14 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=0ef872c9353e83bfbfe4cba15a1960fa391cb5a4 commit 0ef872c9353e83bfbfe4cba15a1960fa391cb5a4 Author: Colin Percival <cperciva@FreeBSD.org> AuthorDate: 2026-03-16 23:45:32 +0000 Commit: Colin Percival <cperciva@FreeBSD.org> CommitDate: 2026-04-16 15:11:54 +0000 io_apic: Support APIC Extended Destination IDs If APIC Extended Destination ID support is enabled, use it in APIC RTEs by allowing APIC IDs up to 2^15 - 1 and encoding the high bits into Intel "reserved" bits per the standard. Reviewed by: kib MFC after: 3 weeks Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D55889 (cherry picked from commit b0e1b1069d655f12ab69cf3a1dc1904dd35ad1da) --- sys/x86/include/apicvar.h | 1 + sys/x86/x86/io_apic.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/sys/x86/include/apicvar.h b/sys/x86/include/apicvar.h index bb2986c3bf67..36ce48339ad4 100644 --- a/sys/x86/include/apicvar.h +++ b/sys/x86/include/apicvar.h @@ -84,6 +84,7 @@ * to use that ID. */ #define IOAPIC_MAX_ID 0xff +#define IOAPIC_MAX_EXT_ID 0x7fff /* I/O Interrupts are used for external devices such as ISA, PCI, etc. */ #define APIC_IO_INTS (IDT_IO_INTS + 16) diff --git a/sys/x86/x86/io_apic.c b/sys/x86/x86/io_apic.c index ae104beadf6a..56acd091c205 100644 --- a/sys/x86/x86/io_apic.c +++ b/sys/x86/x86/io_apic.c @@ -371,6 +371,13 @@ ioapic_program_intpin(struct ioapic_intsrc *intpin) low = IOART_DESTPHY; high = intpin->io_cpu << APIC_ID_SHIFT; intpin->io_valid = 1; + } else if (intpin->io_cpu <= IOAPIC_MAX_EXT_ID && + apic_ext_dest_id == 1) { + low = IOART_DESTPHY; + high = intpin->io_cpu << APIC_ID_SHIFT & APIC_ID_MASK; + high |= (intpin->io_cpu >> 8) << APIC_EXT_ID_SHIFT + & APIC_EXT_ID_MASK; + intpin->io_valid = 1; } else { printf("%s: unsupported destination APIC ID %u for pin %u\n", __func__, intpin->io_cpu, intpin->io_intpin);home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69e0fc56.1f172.4ff80197>
