svn commit: r332735 - head/sys/x86/x86
Eric Joyner
erj at erj.cc
Thu Apr 19 15:59:34 UTC 2018
Is the limit going to be increased at some point? Is there a true limit
somewhere?
On Wed, Apr 18, 2018 at 11:45 AM, John Baldwin <jhb at freebsd.org> wrote:
> Author: jhb
> Date: Wed Apr 18 18:45:34 2018
> New Revision: 332735
> URL: https://svnweb.freebsd.org/changeset/base/332735
>
> Log:
> Fix two off-by-one errors when allocating MSI and MSI-X interrupts.
>
> x86 enforces an (arbitray) limit on the number of available MSI and
> MSI-X interrupts to simplify code (in particular, interrupt_source[]
> is statically sized). This means that an attempt to allocate an MSI
> vector needs to fail if it would go beyond the limit, but the checks
> for exceeding the limit had an off-by-one error. In the case of MSI-X
> which allocates interrupts one at a time this meant that IRQ 768 kept
> getting handed out multiple times for msix_alloc() instead of failing
> because all MSI IRQs were in use.
>
> Tested by: lidl
> MFC after: 1 week
>
> Modified:
> head/sys/x86/x86/msi.c
>
> Modified: head/sys/x86/x86/msi.c
> ============================================================
> ==================
> --- head/sys/x86/x86/msi.c Wed Apr 18 18:45:04 2018 (r332734)
> +++ head/sys/x86/x86/msi.c Wed Apr 18 18:45:34 2018 (r332735)
> @@ -404,7 +404,7 @@ again:
> /* Do we need to create some new sources? */
> if (cnt < count) {
> /* If we would exceed the max, give up. */
> - if (i + (count - cnt) > FIRST_MSI_INT + NUM_MSI_INTS) {
> + if (i + (count - cnt) >= FIRST_MSI_INT + NUM_MSI_INTS) {
> mtx_unlock(&msi_lock);
> free(mirqs, M_MSI);
> return (ENXIO);
> @@ -645,7 +645,7 @@ again:
> /* Do we need to create a new source? */
> if (msi == NULL) {
> /* If we would exceed the max, give up. */
> - if (i + 1 > FIRST_MSI_INT + NUM_MSI_INTS) {
> + if (i + 1 >= FIRST_MSI_INT + NUM_MSI_INTS) {
> mtx_unlock(&msi_lock);
> return (ENXIO);
> }
>
>
More information about the svn-src-head
mailing list