Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Jul 2018 17:51:11 +0000 (UTC)
From:      Marius Strobl <marius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r336612 - head/sys/net
Message-ID:  <201807221751.w6MHpBfa081673@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marius
Date: Sun Jul 22 17:51:11 2018
New Revision: 336612
URL: https://svnweb.freebsd.org/changeset/base/336612

Log:
  Use the maximum of isc_tx_{nsegments,tso_segments_max} for MAX_TX_DESC.
  Since r336313, TSO support for LEM-class devices is removed again as it
  was before the conversion of {l,}em(4) to iflib(4) in r311849 and as a
  result, isc_tx_tso_segments_max is 0 for LEM-class devices now. Thus,
  inappropriate watermarks were used for this class.
  
  This is really only a band-aid, though, because so far iflib(9) doesn't
  fully take into account that DMA engines can support different maxima
  of segments for transfers of TSO and non-TSO packets. For example, the
  DESC_RECLAIMABLE macro is based on isc_tx_nsegments while MAX_TX_DESC
  used isc_tx_tso_segments_max only. For most in-tree consumers that
  doesn't make a difference as the maxima are the same for both kinds of
  transfers (that is, apart from the fact that TSO may require up to 2
  sentinel descriptors but also not with every MAC supported). However,
  isc_tx_nsegments is 8 but isc_tx_tso_segments_max is 85 by default
  with ixl(4).

Modified:
  head/sys/net/iflib.c

Modified: head/sys/net/iflib.c
==============================================================================
--- head/sys/net/iflib.c	Sun Jul 22 17:45:44 2018	(r336611)
+++ head/sys/net/iflib.c	Sun Jul 22 17:51:11 2018	(r336612)
@@ -2831,7 +2831,8 @@ txq_max_rs_deferred(iflib_txq_t txq)
 
 /* XXX we should be setting this to something other than zero */
 #define RECLAIM_THRESH(ctx) ((ctx)->ifc_sctx->isc_tx_reclaim_thresh)
-#define MAX_TX_DESC(ctx) ((ctx)->ifc_softc_ctx.isc_tx_tso_segments_max)
+#define	MAX_TX_DESC(ctx) max((ctx)->ifc_softc_ctx.isc_tx_tso_segments_max, \
+    (ctx)->ifc_softc_ctx.isc_tx_nsegments)
 
 static inline bool
 iflib_txd_db_check(if_ctx_t ctx, iflib_txq_t txq, int ring, qidx_t in_use)



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