Module Name: src
Committed By: msaitoh
Date: Wed Jan 18 10:22:09 UTC 2017
Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c ixgbe_osdep.h ixv.c
Log Message:
Now we can use multiqueue. It's default on ixg(4). Not yet for ixv(4).
To generate a diff of this commit:
cvs rdiff -u -r1.61 -r1.62 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.16 -r1.17 src/sys/dev/pci/ixgbe/ixgbe_osdep.h
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/ixgbe/ixv.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.61 src/sys/dev/pci/ixgbe/ixgbe.c:1.62
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.61 Wed Jan 18 10:18:40 2017
+++ src/sys/dev/pci/ixgbe/ixgbe.c Wed Jan 18 10:22:09 2017
@@ -59,7 +59,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
/*$FreeBSD: head/sys/dev/ixgbe/if_ix.c 302384 2016-07-07 03:39:18Z sbruno $*/
-/*$NetBSD: ixgbe.c,v 1.61 2017/01/18 10:18:40 msaitoh Exp $*/
+/*$NetBSD: ixgbe.c,v 1.62 2017/01/18 10:22:09 msaitoh Exp $*/
#include "opt_inet.h"
#include "opt_inet6.h"
@@ -337,7 +337,7 @@ SYSCTL_INT(_hw_ix, OID_AUTO, enable_msix
* number of cpus with a max of 8. This
* can be overriden manually here.
*/
-static int ixgbe_num_queues = 1;
+static int ixgbe_num_queues = 0;
SYSCTL_INT(_hw_ix, OID_AUTO, num_queues, CTLFLAG_RDTUN, &ixgbe_num_queues, 0,
"Number of queues to configure, 0 indicates autoconfigure");
@@ -2702,19 +2702,19 @@ ixgbe_allocate_msix(struct adapter *adap
aprint_normal_dev(dev, "for TX/RX, interrupting at %s",
intrstr);
if (error == 0) {
-#ifdef IXGBE_DEBUG
+#if 1 /* def IXGBE_DEBUG */
#ifdef RSS
aprintf_normal(
- ", bound RSS bucket %d to CPU %d\n",
+ ", bound RSS bucket %d to CPU %d",
i, cpu_id);
#else
aprint_normal(
- ", bound queue %d to cpu %d\n",
+ ", bound queue %d to cpu %d",
i, cpu_id);
#endif
#endif /* IXGBE_DEBUG */
- } else
- aprint_normal("\n");
+ }
+ aprint_normal("\n");
#ifndef IXGBE_LEGACY_TX
txr->txq_si = softint_establish(SOFTINT_NET,
ixgbe_deferred_mq_start, txr);
@@ -2795,7 +2795,8 @@ ixgbe_setup_msix(struct adapter *adapter
/* First try MSI/X */
msgs = pci_msix_count(adapter->osdep.pc, adapter->osdep.tag);
- if (msgs < IXG_MSIX_NINTR)
+ msgs = MIN(msgs, IXG_MAX_NINTR);
+ if (msgs < 2)
goto msi;
adapter->msix_mem = (void *)1; /* XXX */
Index: src/sys/dev/pci/ixgbe/ixgbe_osdep.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.16 src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.17
--- src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.16 Mon Dec 5 10:05:11 2016
+++ src/sys/dev/pci/ixgbe/ixgbe_osdep.h Wed Jan 18 10:22:09 2017
@@ -31,7 +31,7 @@
******************************************************************************/
/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_osdep.h 294734 2016-01-25 16:18:53Z smh $*/
-/*$NetBSD: ixgbe_osdep.h,v 1.16 2016/12/05 10:05:11 msaitoh Exp $*/
+/*$NetBSD: ixgbe_osdep.h,v 1.17 2017/01/18 10:22:09 msaitoh Exp $*/
#ifndef _IXGBE_OS_H_
#define _IXGBE_OS_H_
@@ -149,14 +149,8 @@ typedef uint64_t u64;
#define le16_to_cpu
-/*
- * This device driver divides interrupt to TX, RX and link state.
- * Each MSI-X vector indexes are below.
- */
-#define IXG_MSIX_NINTR 2
-#define IXG_MSIX_TXRXINTR_IDX 0
-#define IXG_MSIX_LINKINTR_IDX 1
-#define IXG_MAX_NINTR IXG_MSIX_NINTR
+/* This device driver's max interrupt numbers. */
+#define IXG_MAX_NINTR 64
#if __FreeBSD_version < 800000
#if defined(__i386__) || defined(__amd64__)
Index: src/sys/dev/pci/ixgbe/ixv.c
diff -u src/sys/dev/pci/ixgbe/ixv.c:1.31 src/sys/dev/pci/ixgbe/ixv.c:1.32
--- src/sys/dev/pci/ixgbe/ixv.c:1.31 Thu Jan 5 05:53:23 2017
+++ src/sys/dev/pci/ixgbe/ixv.c Wed Jan 18 10:22:09 2017
@@ -31,7 +31,7 @@
******************************************************************************/
/*$FreeBSD: head/sys/dev/ixgbe/if_ixv.c 302384 2016-07-07 03:39:18Z sbruno $*/
-/*$NetBSD: ixv.c,v 1.31 2017/01/05 05:53:23 msaitoh Exp $*/
+/*$NetBSD: ixv.c,v 1.32 2017/01/18 10:22:09 msaitoh Exp $*/
#include "opt_inet.h"
#include "opt_inet6.h"
@@ -1348,7 +1348,7 @@ ixv_allocate_msix(struct adapter *adapte
tag = adapter->osdep.tag;
if (pci_msix_alloc_exact(pa,
- &adapter->osdep.intrs, IXG_MSIX_NINTR) != 0)
+ &adapter->osdep.intrs, IXG_MAX_NINTR) != 0)
return (ENXIO);
kcpuset_create(&affinity, false);
@@ -1457,16 +1457,24 @@ ixv_setup_msix(struct adapter *adapter)
device_t dev = adapter->dev;
int want, msgs;
- /*
- ** Want two vectors: one for a queue,
- ** plus an additional for mailbox.
- */
+ /* Must have at least 2 MSIX vectors */
msgs = pci_msix_count(adapter->osdep.pc, adapter->osdep.tag);
- if (msgs < IXG_MSIX_NINTR) {
+ if (msgs < 2) {
aprint_error_dev(dev,"MSIX config error\n");
return (ENXIO);
}
- want = MIN(msgs, IXG_MSIX_NINTR);
+ msgs = MIN(msgs, IXG_MAX_NINTR);
+
+ /*
+ ** Want vectors for the queues,
+ ** plus an additional for mailbox.
+ */
+ want = adapter->num_queues + 1;
+ if (want > msgs) {
+ want = msgs;
+ adapter->num_queues = msgs - 1;
+ } else
+ msgs = want;
adapter->msix_mem = (void *)1; /* XXX */
aprint_normal_dev(dev,