svn commit: r325901 - head/sys/net

Stephen Hurd shurd at FreeBSD.org
Thu Nov 16 18:53:00 UTC 2017


Author: shurd
Date: Thu Nov 16 18:52:58 2017
New Revision: 325901
URL: https://svnweb.freebsd.org/changeset/base/325901

Log:
  Fix default numbers of iflib queue sets
  
  The intent appears to be having one RX/TX queue set per core,
  but since scctx->isc_n[tr]xqsets is set to max before calling
  iflib_msix_init(), both end up being set to total number of cores.
  
  Use ctx->ifc_sysctl_n[rt]xqs as the selected value and
  scctx->isc_n[rt]xqsets as the max. This should result in what appears
  to be the intended behaviour
  
  Reviewed by:	sbruno
  Sponsored by:	Limelight Networks
  Differential Revision:	https://reviews.freebsd.org/D13096

Modified:
  head/sys/net/iflib.c

Modified: head/sys/net/iflib.c
==============================================================================
--- head/sys/net/iflib.c	Thu Nov 16 18:22:03 2017	(r325900)
+++ head/sys/net/iflib.c	Thu Nov 16 18:52:58 2017	(r325901)
@@ -5312,11 +5312,11 @@ iflib_msix_init(if_ctx_t ctx)
 	int iflib_num_tx_queues, iflib_num_rx_queues;
 	int err, admincnt, bar;
 
-	iflib_num_tx_queues = scctx->isc_ntxqsets;
-	iflib_num_rx_queues = scctx->isc_nrxqsets;
+	iflib_num_tx_queues = ctx->ifc_sysctl_ntxqs;
+	iflib_num_rx_queues = ctx->ifc_sysctl_nrxqs;
 
-	device_printf(dev, "msix_init qsets capped at %d\n", iflib_num_tx_queues);
-	
+	device_printf(dev, "msix_init qsets capped at %d\n", imax(scctx->isc_ntxqsets, scctx->isc_nrxqsets));
+
 	bar = ctx->ifc_softc_ctx.isc_msix_bar;
 	admincnt = sctx->isc_admin_intrcnt;
 	/* Override by global tuneable */
@@ -5414,6 +5414,10 @@ iflib_msix_init(if_ctx_t ctx)
 		rx_queues = iflib_num_rx_queues;
 	else
 		rx_queues = queues;
+
+	if (rx_queues > scctx->isc_nrxqsets)
+		rx_queues = scctx->isc_nrxqsets;
+
 	/*
 	 * We want this to be all logical CPUs by default
 	 */
@@ -5421,6 +5425,9 @@ iflib_msix_init(if_ctx_t ctx)
 		tx_queues = iflib_num_tx_queues;
 	else
 		tx_queues = mp_ncpus;
+
+	if (tx_queues > scctx->isc_ntxqsets)
+		tx_queues = scctx->isc_ntxqsets;
 
 	if (ctx->ifc_sysctl_qs_eq_override == 0) {
 #ifdef INVARIANTS


More information about the svn-src-head mailing list