Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 11 Mar 2017 07:54:05 +0000 (UTC)
From:      Luiz Otavio O Souza <loos@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r315060 - stable/10/sys/dev/e1000
Message-ID:  <201703110754.v2B7s5kP019330@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: loos
Date: Sat Mar 11 07:54:05 2017
New Revision: 315060
URL: https://svnweb.freebsd.org/changeset/base/315060

Log:
  MFC of r314281:
  
  Disable the driver managed queue for igb(4) when the legacy transmit
  interface is used.
  
  The legacy API (IGB_LEGACY_TX) is enabled when ALTQ is built into kernel.
  
  As noted in altq(9), it is responsibility of the caller to protect this
  queue against concurrent access and, in the igb case, the interface send
  queue is protected by tx queue mutex.  This obviously cannot protect the
  driver managed queue against concurrent access from different tx queues
  and leads to numerous and quite strange panic traces (usually shown as
  packets disappearing into thin air).
  
  Improving the locking to cope with this means serialize all access to this
  (single) queue and produces no gain, it actually affects the performance
  quite noticeabily.
  
  The driver managed queue is already disabled when an ALTQ queue discipline
  is set on interface (in altq_enable()), because the driver managed queue
  can interfere with ALTQ timing (whence the reports that setting an ALTQ
  queue discipline on interface also fixes the issue).
  
  Disabling this additional queue keeps the ability to use if_start() to
  send packets to individual NIC queues while it simply eliminate the race.
  
  This is a direct commit to stable/11 as -head driver does not support ALTQ
  anymore.
  
  PR:		213257
  PR:		212413
  Discussed with:	sbruno
  Tested by:	Konstantin Kormashev <konstantin@netgate.com>
  Obtained from:	pfSense
  Sponsored by:	Rubicon Communications, LLC (Netgate)

Modified:
  stable/10/sys/dev/e1000/if_igb.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/e1000/if_igb.c
==============================================================================
--- stable/10/sys/dev/e1000/if_igb.c	Sat Mar 11 07:07:41 2017	(r315059)
+++ stable/10/sys/dev/e1000/if_igb.c	Sat Mar 11 07:54:05 2017	(r315060)
@@ -3086,7 +3086,7 @@ igb_setup_interface(device_t dev, struct
 #else
 	ifp->if_start = igb_start;
 	IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1);
-	ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1;
+	ifp->if_snd.ifq_drv_maxlen = 0;
 	IFQ_SET_READY(&ifp->if_snd);
 #endif
 



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