https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=235031

--- Comment #34 from commit-h...@freebsd.org ---
A commit references this bug:

Author: marius
Date: Sun Jun 16 15:25:46 UTC 2019
New revision: 349112
URL: https://svnweb.freebsd.org/changeset/base/349112

Log:
  MFC: r347221, r347245

  o Use iflib_fast_intr_rxtx() also for "legacy" interrupts, i. e. INTx and
    MSI. Unlike as with iflib_fast_intr_ctx(), the former will also enqueue
    _task_fn_tx() in addition to _task_fn_rx() if appropriate, bringing TCP
    TX throughput of EM-class devices on par with the MSI-X case and, thus,
    close to wirespeed/pre-iflib(4) times again. [1]
    Note that independently of the interrupt type, the UDP performance with
    these MACs still is abysmal and nowhere near to where it was before the
    conversion of em(4) to iflib(4).
  o In iflib_init_locked(), announce which free list failed to set up.
  o In _task_fn_tx() when running netmap(4), issue ifdi_intr_enable instead
    of the ifdi_tx_queue_intr_enable method in case of a "legacy" interrupt
    as the latter is valid with MSI-X only.
  o Instead of adding the missing - and apparently convoluted enough that a
    DBG_COUNTER_INC was put into a wrong spot in _task_fn_rx() - checks for
    ifdi_{r,t}x_queue_intr_enable being available in the MSI-X case also to
    iflib_fast_intr_rxtx(), factor these out to iflib_device_register() and
    make the checks fail gracefully rather than panic. This avoids invoking
    the checks at runtime over and over again in iflib_fast_intr_rxtx() and
    _task_fn_{r,t}x() - even if it's just in case of INVARIANTS - and makes
    these functions more readable.
  o In iflib_rx_structures_setup(), only initialize LRO resources if device
    and driver have LRO capability in order to not waste memory. Also, free
    the LRO resources again if setting them up fails for one of the queues.
    However, don't bother invoking iflib_rx_sds_free() in that case because
    iflib_rx_structures_setup() doesn't call iflib_rxsd_alloc() either (and
    iflib_{device,pseudo}_register() will issue iflib_rx_sds_free() in case
    of failure via iflib_rx_structures_free(), but there definitely is some
    asymmetry left to be fixed, though).
  o Similarly, free LRO resources again in iflib_rx_structures_free().
  o In iflib_irq_set_affinity(), handle get_core_offset() errors gracefully
    instead of panicing (but only in case of INVARIANTS). This is a follow-
    up to r344132 (MFCed to stable/12 in r344163) as such bugs shouldn't be
    fatal.
  o Likewise, handle unknown iflib_intr_type_t in iflib_irq_alloc_generic()
    gracefully, too.
  o Bring yet more sanity to iflib_msix_init():
    - If the device doesn't provide enough MSI-X vectors or not all vectors
      can be allocate so the expected number of queues in addition to admin
      interrupts can't be supported, try MSI next (and then INTx) as proper
      MSI-X vector distribution can't be assured in such cases. In essence,
      this change brings r254008 forward to iflib(4). Also, this is the fix
      alluded to in the commit message of r343934.
    - If the MSI-X allocation has failed, don't prematurely announce MSI is
      going to be used as the latter in fact may not be available either.
    - When falling back to MSI, only release the MSI-X table resource again
      if it was allocated in iflib_msix_init(), i. e. isn't supplied by the
      driver, in the first place.
  o In mp_ndesc_handler(), handle unknown type arguments gracefully, too.

  PR:           235031 (likely) [1]
  Reviewed by:  shurd
  Differential Revision:        https://reviews.freebsd.org/D20175

Changes:
_U  stable/12/
  stable/12/sys/net/iflib.c

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to