Module Name: src
Committed By: msaitoh
Date: Tue Jul 31 09:19:34 UTC 2018
Modified Files:
src/sys/dev/pci/ixgbe: ix_txrx.c ixgbe.h ixgbe_netbsd.c ixgbe_osdep.h
Log Message:
Make jcl allocation per queue to reduce mutex spin. Tested by me and
knakahara.
To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/sys/dev/pci/ixgbe/ix_txrx.c
cvs rdiff -u -r1.50 -r1.51 src/sys/dev/pci/ixgbe/ixgbe.h
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/pci/ixgbe/ixgbe_netbsd.c
cvs rdiff -u -r1.22 -r1.23 src/sys/dev/pci/ixgbe/ixgbe_osdep.h
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/ix_txrx.c
diff -u src/sys/dev/pci/ixgbe/ix_txrx.c:1.48 src/sys/dev/pci/ixgbe/ix_txrx.c:1.49
--- src/sys/dev/pci/ixgbe/ix_txrx.c:1.48 Tue Jun 26 06:48:01 2018
+++ src/sys/dev/pci/ixgbe/ix_txrx.c Tue Jul 31 09:19:34 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ix_txrx.c,v 1.48 2018/06/26 06:48:01 msaitoh Exp $ */
+/* $NetBSD: ix_txrx.c,v 1.49 2018/07/31 09:19:34 msaitoh Exp $ */
/******************************************************************************
@@ -1343,7 +1343,7 @@ ixgbe_refresh_mbufs(struct rx_ring *rxr,
while (j != limit) {
rxbuf = &rxr->rx_buffers[i];
if (rxbuf->buf == NULL) {
- mp = ixgbe_getjcl(&adapter->jcl_head, M_NOWAIT,
+ mp = ixgbe_getjcl(&rxr->jcl_head, M_NOWAIT,
MT_DATA, M_PKTHDR, rxr->mbuf_sz);
if (mp == NULL) {
rxr->no_jmbuf.ev_count++;
@@ -1505,6 +1505,17 @@ ixgbe_setup_receive_ring(struct rx_ring
/* Free current RX buffer structs and their mbufs */
ixgbe_free_receive_ring(rxr);
+ IXGBE_RX_UNLOCK(rxr);
+ /*
+ * Now reinitialize our supply of jumbo mbufs. The number
+ * or size of jumbo mbufs may have changed.
+ * Assume all of rxr->ptag are the same.
+ */
+ ixgbe_jcl_reinit(adapter, rxr->ptag->dt_dmat, rxr,
+ (2 * adapter->num_rx_desc), adapter->rx_mbuf_sz);
+
+ IXGBE_RX_LOCK(rxr);
+
/* Now replenish the mbufs */
for (int j = 0; j != rxr->num_desc; ++j) {
struct mbuf *mp;
@@ -1534,7 +1545,7 @@ ixgbe_setup_receive_ring(struct rx_ring
#endif /* DEV_NETMAP */
rxbuf->flags = 0;
- rxbuf->buf = ixgbe_getjcl(&adapter->jcl_head, M_NOWAIT,
+ rxbuf->buf = ixgbe_getjcl(&rxr->jcl_head, M_NOWAIT,
MT_DATA, M_PKTHDR, adapter->rx_mbuf_sz);
if (rxbuf->buf == NULL) {
error = ENOBUFS;
@@ -1611,15 +1622,6 @@ ixgbe_setup_receive_structures(struct ad
struct rx_ring *rxr = adapter->rx_rings;
int j;
- /*
- * Now reinitialize our supply of jumbo mbufs. The number
- * or size of jumbo mbufs may have changed.
- * Assume all of rxr->ptag are the same.
- */
- ixgbe_jcl_reinit(adapter, rxr->ptag->dt_dmat,
- (2 * adapter->num_rx_desc) * adapter->num_queues,
- adapter->rx_mbuf_sz);
-
for (j = 0; j < adapter->num_queues; j++, rxr++)
if (ixgbe_setup_receive_ring(rxr))
goto fail;
Index: src/sys/dev/pci/ixgbe/ixgbe.h
diff -u src/sys/dev/pci/ixgbe/ixgbe.h:1.50 src/sys/dev/pci/ixgbe/ixgbe.h:1.51
--- src/sys/dev/pci/ixgbe/ixgbe.h:1.50 Mon Jun 25 05:06:10 2018
+++ src/sys/dev/pci/ixgbe/ixgbe.h Tue Jul 31 09:19:34 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.50 2018/06/25 05:06:10 msaitoh Exp $ */
+/* $NetBSD: ixgbe.h,v 1.51 2018/07/31 09:19:34 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -417,6 +417,9 @@ struct rx_ring {
#endif
struct ixgbe_rx_buf *rx_buffers;
ixgbe_dma_tag_t *ptag;
+ u16 last_rx_mbuf_sz;
+ u32 last_num_rx_desc;
+ ixgbe_extmem_head_t jcl_head;
u64 bytes; /* Used for AIM calc */
u64 packets;
@@ -602,7 +605,6 @@ struct adapter {
struct sysctllog *sysctllog;
const struct sysctlnode *sysctltop;
- ixgbe_extmem_head_t jcl_head;
};
/* Precision Time Sync (IEEE 1588) defines */
@@ -752,7 +754,8 @@ bool ixgbe_rxeof(struct ix_queue *);
const struct sysctlnode *ixgbe_sysctl_instance(struct adapter *);
/* For NetBSD */
-void ixgbe_jcl_reinit(struct adapter *, bus_dma_tag_t, int, size_t);
+void ixgbe_jcl_reinit(struct adapter *, bus_dma_tag_t, struct rx_ring *,
+ int, size_t);
#include "ixgbe_bypass.h"
#include "ixgbe_fdir.h"
Index: src/sys/dev/pci/ixgbe/ixgbe_netbsd.c
diff -u src/sys/dev/pci/ixgbe/ixgbe_netbsd.c:1.7 src/sys/dev/pci/ixgbe/ixgbe_netbsd.c:1.8
--- src/sys/dev/pci/ixgbe/ixgbe_netbsd.c:1.7 Wed Apr 25 08:46:19 2018
+++ src/sys/dev/pci/ixgbe/ixgbe_netbsd.c Tue Jul 31 09:19:34 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_netbsd.c,v 1.7 2018/04/25 08:46:19 msaitoh Exp $ */
+/* $NetBSD: ixgbe_netbsd.c,v 1.8 2018/07/31 09:19:34 msaitoh Exp $ */
/*
* Copyright (c) 2011 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -162,10 +162,10 @@ post_zalloc_err:
}
void
-ixgbe_jcl_reinit(struct adapter *adapter, bus_dma_tag_t dmat, int nbuf,
- size_t size)
+ixgbe_jcl_reinit(struct adapter *adapter, bus_dma_tag_t dmat,
+ struct rx_ring *rxr, int nbuf, size_t size)
{
- ixgbe_extmem_head_t *eh = &adapter->jcl_head;
+ ixgbe_extmem_head_t *eh = &rxr->jcl_head;
ixgbe_extmem_t *em;
int i;
@@ -182,8 +182,8 @@ ixgbe_jcl_reinit(struct adapter *adapter
* Note that the num_rx_desc is currently fixed value. It's never
* changed after device is attached.
*/
- if ((adapter->osdep.last_rx_mbuf_sz == adapter->rx_mbuf_sz)
- && (adapter->osdep.last_num_rx_desc == adapter->num_rx_desc))
+ if ((rxr->last_rx_mbuf_sz == rxr->mbuf_sz)
+ && (rxr->last_num_rx_desc == adapter->num_rx_desc))
return;
/* Free all dmamem */
@@ -205,8 +205,8 @@ ixgbe_jcl_reinit(struct adapter *adapter
}
/* Keep current parameters */
- adapter->osdep.last_rx_mbuf_sz = adapter->rx_mbuf_sz;
- adapter->osdep.last_num_rx_desc = adapter->num_rx_desc;
+ rxr->last_rx_mbuf_sz = adapter->rx_mbuf_sz;
+ rxr->last_num_rx_desc = adapter->num_rx_desc;
}
static void
Index: src/sys/dev/pci/ixgbe/ixgbe_osdep.h
diff -u src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.22 src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.23
--- src/sys/dev/pci/ixgbe/ixgbe_osdep.h:1.22 Wed Apr 25 08:46:19 2018
+++ src/sys/dev/pci/ixgbe/ixgbe_osdep.h Tue Jul 31 09:19:34 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe_osdep.h,v 1.22 2018/04/25 08:46:19 msaitoh Exp $ */
+/* $NetBSD: ixgbe_osdep.h,v 1.23 2018/07/31 09:19:34 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -208,7 +208,6 @@ struct ixgbe_osdep
bus_size_t mem_size;
bus_dma_tag_t dmat;
u16 last_rx_mbuf_sz;
- u32 last_num_rx_desc;
pci_intr_handle_t *intrs;
int nintrs;
void *ihs[IXG_MAX_NINTR];