git: 044dfb356bb6 - stable/13 - msi: report error for attempt to use APIC ID > 255
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 17 Aug 2023 14:07:30 UTC
The branch stable/13 has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=044dfb356bb6481af4de4ed0f7ef04c3b638bf71 commit 044dfb356bb6481af4de4ed0f7ef04c3b638bf71 Author: Ed Maste <emaste@FreeBSD.org> AuthorDate: 2023-08-08 23:42:09 +0000 Commit: Ed Maste <emaste@FreeBSD.org> CommitDate: 2023-08-17 14:06:39 +0000 msi: report error for attempt to use APIC ID > 255 The MSI/MSI-X address includes 8 bits to encode the Destination ID. Previously IDs over 255 overlapped with the fixed portion of the address, resulting in an invalid value (and a nonfunctional interrupt). Instead, print an error message and return EINVAL. The interrupt will still not work, but the user will have a clue as to why. PR: 273022 Reviewed by: jhb Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D41395 (cherry picked from commit cbf845052f1c2862a64e66dbaf38e887a7592474) --- sys/x86/x86/msi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/x86/x86/msi.c b/sys/x86/x86/msi.c index f85d4a5161e5..de8f42c0fa68 100644 --- a/sys/x86/x86/msi.c +++ b/sys/x86/x86/msi.c @@ -620,6 +620,11 @@ msi_map(int irq, uint64_t *addr, uint32_t *data) mtx_unlock(&msi_lock); error = EOPNOTSUPP; #endif + if (error == EOPNOTSUPP && msi->msi_cpu > 0xff) { + printf("%s: unsupported destination APIC ID %u\n", __func__, + msi->msi_cpu); + error = EINVAL; + } if (error == EOPNOTSUPP) { *addr = INTEL_ADDR(msi); *data = INTEL_DATA(msi);