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,