Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Aug 2023 08:20:55 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Ed Maste <emaste@freebsd.org>
Cc:        src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: cbf845052f1c - main - msi: report error for attempt to use APIC ID > 255
Message-ID:  <ZNRzt92uuMnUeHay@kib.kiev.ua>
In-Reply-To: <202308091817.379IHCL9010484@gitrepo.freebsd.org>
References:  <202308091817.379IHCL9010484@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Aug 09, 2023 at 06:17:12PM +0000, Ed Maste wrote:
> The branch main has been updated by emaste:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=cbf845052f1c2862a64e66dbaf38e887a7592474
> 
> commit cbf845052f1c2862a64e66dbaf38e887a7592474
> Author:     Ed Maste <emaste@FreeBSD.org>
> AuthorDate: 2023-08-08 23:42:09 +0000
> Commit:     Ed Maste <emaste@FreeBSD.org>
> CommitDate: 2023-08-09 17:52:43 +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
> ---
>  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) {
I suspect 0xff is also invalid destination apic id.

For the Pentium 4 and Intel Xeon processors, the xAPIC specification
extends the local APIC ID field to 8 bits. These can be used to identify
up to 255 processors in the system.

> +		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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?ZNRzt92uuMnUeHay>