Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 8 May 2015 16:18:11 +0000 (UTC)
From:      Sean Bruno <sbruno@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r282644 - projects/em_mq/sys/dev/e1000
Message-ID:  <201505081618.t48GIBda053908@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sbruno
Date: Fri May  8 16:18:11 2015
New Revision: 282644
URL: https://svnweb.freebsd.org/changeset/base/282644

Log:
  Ensure that *both* rx queues get scheduled by writing both queues to the IMS
  register when em_local_timer() runs.

Modified:
  projects/em_mq/sys/dev/e1000/if_em.c

Modified: projects/em_mq/sys/dev/e1000/if_em.c
==============================================================================
--- projects/em_mq/sys/dev/e1000/if_em.c	Fri May  8 16:02:31 2015	(r282643)
+++ projects/em_mq/sys/dev/e1000/if_em.c	Fri May  8 16:18:11 2015	(r282644)
@@ -2263,7 +2263,7 @@ em_local_timer(void *arg)
 	if_t ifp = adapter->ifp;
 	struct tx_ring	*txr = adapter->tx_rings;
 	struct rx_ring	*rxr = adapter->rx_rings;
-	u32		trigger;
+	u32		trigger = 0;
 
 	EM_CORE_LOCK_ASSERT(adapter);
 
@@ -2276,9 +2276,11 @@ em_local_timer(void *arg)
 		e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
 
 	/* Mask to use in the irq trigger */
-	if (adapter->msix_mem)
-		trigger = rxr->ims;
-	else
+	if (adapter->msix_mem) {
+		for (int i = 0; i < adapter->num_queues; i++, rxr++)
+			trigger |= rxr->ims;
+		rxr = adapter->rx_rings;
+	} else
 		trigger = E1000_ICS_RXDMT0;
 
 	/*



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