svn commit: r322331 - in head/sys: dev/qlnx/qlnxe modules/qlnx/qlnxe
Somayajulu, David
David.Somayajulu at cavium.com
Sat Aug 12 02:57:38 UTC 2017
HI All,
Apologize for the inconvenience.
I forgot to mention the following.
MFC after:5 days
Thanks
David S. (davidcs at freebsd.org)
-----Original Message-----
From: owner-src-committers at freebsd.org [mailto:owner-src-committers at freebsd.org] On Behalf Of David C Somayajulu
Sent: Wednesday, August 09, 2017 3:19 PM
To: src-committers at freebsd.org; svn-src-all at freebsd.org; svn-src-head at freebsd.org
Subject: svn commit: r322331 - in head/sys: dev/qlnx/qlnxe modules/qlnx/qlnxe
Author: davidcs
Date: Wed Aug 9 22:18:49 2017
New Revision: 322331
URL: https://svnweb.freebsd.org/changeset/base/322331
Log:
Provide compile to choose receive processing in either Ithread or Taskqueue Thread.
Modified:
head/sys/dev/qlnx/qlnxe/qlnx_os.c
head/sys/dev/qlnx/qlnxe/qlnx_ver.h
head/sys/modules/qlnx/qlnxe/Makefile
Modified: head/sys/dev/qlnx/qlnxe/qlnx_os.c ==============================================================================
--- head/sys/dev/qlnx/qlnxe/qlnx_os.c Wed Aug 9 21:44:55 2017 (r322330)
+++ head/sys/dev/qlnx/qlnxe/qlnx_os.c Wed Aug 9 22:18:49 2017 (r322331)
@@ -397,10 +397,14 @@ qlnx_fp_taskqueue(void *context, int pending)
struct ifnet *ifp;
struct mbuf *mp;
int ret = -1;
+ struct thread *cthread;
+
+#ifdef QLNX_RCV_IN_TASKQ
int lro_enable;
int rx_int = 0, total_rx_count = 0;
- struct thread *cthread;
+#endif /* #ifdef QLNX_RCV_IN_TASKQ */
+
fp = context;
if (fp == NULL)
@@ -419,55 +423,60 @@ qlnx_fp_taskqueue(void *context, int pending)
ifp = ha->ifp;
- lro_enable = ha->ifp->if_capenable & IFCAP_LRO;
+#ifdef QLNX_RCV_IN_TASKQ
+ {
+ lro_enable = ifp->if_capenable & IFCAP_LRO;
- rx_int = qlnx_rx_int(ha, fp, ha->rx_pkt_threshold, lro_enable);
+ rx_int = qlnx_rx_int(ha, fp, ha->rx_pkt_threshold, lro_enable);
- if (rx_int) {
- fp->rx_pkts += rx_int;
- total_rx_count += rx_int;
- }
+ if (rx_int) {
+ fp->rx_pkts += rx_int;
+ total_rx_count += rx_int;
+ }
#ifdef QLNX_SOFT_LRO
- {
- struct lro_ctrl *lro;
+ {
+ struct lro_ctrl *lro;
+
+ lro = &fp->rxq->lro;
- lro = &fp->rxq->lro;
+ if (lro_enable && total_rx_count) {
- if (lro_enable && total_rx_count) {
-
#if (__FreeBSD_version >= 1100101) || (defined QLNX_QSORT_LRO)
- if (ha->dbg_trace_lro_cnt) {
- if (lro->lro_mbuf_count & ~1023)
- fp->lro_cnt_1024++;
- else if (lro->lro_mbuf_count & ~511)
- fp->lro_cnt_512++;
- else if (lro->lro_mbuf_count & ~255)
- fp->lro_cnt_256++;
- else if (lro->lro_mbuf_count & ~127)
- fp->lro_cnt_128++;
- else if (lro->lro_mbuf_count & ~63)
- fp->lro_cnt_64++;
- }
- tcp_lro_flush_all(lro);
+ if (ha->dbg_trace_lro_cnt) {
+ if (lro->lro_mbuf_count & ~1023)
+ fp->lro_cnt_1024++;
+ else if (lro->lro_mbuf_count & ~511)
+ fp->lro_cnt_512++;
+ else if (lro->lro_mbuf_count & ~255)
+ fp->lro_cnt_256++;
+ else if (lro->lro_mbuf_count & ~127)
+ fp->lro_cnt_128++;
+ else if (lro->lro_mbuf_count & ~63)
+ fp->lro_cnt_64++;
+ }
+ tcp_lro_flush_all(lro);
#else
- struct lro_entry *queued;
+ struct lro_entry *queued;
- while ((!SLIST_EMPTY(&lro->lro_active))) {
- queued = SLIST_FIRST(&lro->lro_active);
- SLIST_REMOVE_HEAD(&lro->lro_active, next);
- tcp_lro_flush(lro, queued);
- }
+ while ((!SLIST_EMPTY(&lro->lro_active))) {
+ queued = SLIST_FIRST(&lro->lro_active);
+ SLIST_REMOVE_HEAD(&lro->lro_active, next);
+ tcp_lro_flush(lro, queued);
+ }
#endif /* #if (__FreeBSD_version >= 1100101) || (defined QLNX_QSORT_LRO) */
+ }
}
- }
#endif /* #ifdef QLNX_SOFT_LRO */
- ecore_sb_update_sb_idx(fp->sb_info);
- rmb();
+ ecore_sb_update_sb_idx(fp->sb_info);
+ rmb();
+ }
+#endif /* #ifdef QLNX_RCV_IN_TASKQ */
+
mtx_lock(&fp->tx_mtx);
if (((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) != @@ -477,10 +486,6 @@ qlnx_fp_taskqueue(void *context, int pending)
goto qlnx_fp_taskqueue_exit;
}
-// for (tc = 0; tc < ha->num_tc; tc++) {
-// (void)qlnx_tx_int(ha, fp, fp->txq[tc]);
-// }
-
mp = drbr_peek(ifp, fp->tx_br);
while (mp != NULL) {
@@ -516,13 +521,11 @@ qlnx_fp_taskqueue(void *context, int pending)
mp = drbr_peek(ifp, fp->tx_br);
}
-// for (tc = 0; tc < ha->num_tc; tc++) {
-// (void)qlnx_tx_int(ha, fp, fp->txq[tc]);
-// }
-
mtx_unlock(&fp->tx_mtx);
qlnx_fp_taskqueue_exit:
+
+#ifdef QLNX_RCV_IN_TASKQ
if (rx_int) {
if (fp->fp_taskqueue != NULL)
taskqueue_enqueue(fp->fp_taskqueue, &fp->fp_task); @@ -532,6 +535,7 @@ qlnx_fp_taskqueue_exit:
}
ecore_sb_ack(fp->sb_info, IGU_INT_ENABLE, 1);
}
+#endif /* #ifdef QLNX_RCV_IN_TASKQ */
QL_DPRINT2(ha, "exit ret = %d\n", ret);
return;
@@ -4262,6 +4266,7 @@ next_cqe: /* don't consume bd rx buffer */
return rx_pkt;
}
+
/*
* fast path interrupt
*/
@@ -4292,9 +4297,82 @@ qlnx_fp_isr(void *arg)
if (fp == NULL) {
ha->err_fp_null++;
} else {
+
+#ifdef QLNX_RCV_IN_TASKQ
ecore_sb_ack(fp->sb_info, IGU_INT_DISABLE, 0);
if (fp->fp_taskqueue != NULL)
taskqueue_enqueue(fp->fp_taskqueue, &fp->fp_task);
+#else
+ int rx_int = 0, total_rx_count = 0;
+ int lro_enable, tc;
+
+ lro_enable = ha->ifp->if_capenable & IFCAP_LRO;
+
+ ecore_sb_ack(fp->sb_info, IGU_INT_DISABLE, 0);
+
+ do {
+ for (tc = 0; tc < ha->num_tc; tc++) {
+ if (mtx_trylock(&fp->tx_mtx)) {
+ qlnx_tx_int(ha, fp, fp->txq[tc]);
+ mtx_unlock(&fp->tx_mtx);
+ }
+ }
+
+ rx_int = qlnx_rx_int(ha, fp, ha->rx_pkt_threshold,
+ lro_enable);
+
+ if (rx_int) {
+ fp->rx_pkts += rx_int;
+ total_rx_count += rx_int;
+ }
+
+ } while (rx_int);
+
+
+#ifdef QLNX_SOFT_LRO
+ {
+ struct lro_ctrl *lro;
+
+ lro = &fp->rxq->lro;
+
+ if (lro_enable && total_rx_count) {
+
+#if (__FreeBSD_version >= 1100101) || (defined QLNX_QSORT_LRO)
+
+#ifdef QLNX_TRACE_LRO_CNT
+ if (lro->lro_mbuf_count & ~1023)
+ fp->lro_cnt_1024++;
+ else if (lro->lro_mbuf_count & ~511)
+ fp->lro_cnt_512++;
+ else if (lro->lro_mbuf_count & ~255)
+ fp->lro_cnt_256++;
+ else if (lro->lro_mbuf_count & ~127)
+ fp->lro_cnt_128++;
+ else if (lro->lro_mbuf_count & ~63)
+ fp->lro_cnt_64++; #endif /*
+#ifdef QLNX_TRACE_LRO_CNT */
+
+ tcp_lro_flush_all(lro);
+
+#else
+ struct lro_entry *queued;
+
+ while ((!SLIST_EMPTY(&lro->lro_active))) {
+ queued = SLIST_FIRST(&lro->lro_active);
+ SLIST_REMOVE_HEAD(&lro->lro_active, \
+ next);
+ tcp_lro_flush(lro, queued);
+ }
+#endif /* #if (__FreeBSD_version >= 1100101) || (defined QLNX_QSORT_LRO) */
+ }
+ }
+#endif /* #ifdef QLNX_SOFT_LRO */
+
+ ecore_sb_update_sb_idx(fp->sb_info);
+ rmb();
+ ecore_sb_ack(fp->sb_info, IGU_INT_ENABLE, 1);
+
+#endif /* #ifdef QLNX_RCV_IN_TASKQ */
}
return;
Modified: head/sys/dev/qlnx/qlnxe/qlnx_ver.h
==============================================================================
--- head/sys/dev/qlnx/qlnxe/qlnx_ver.h Wed Aug 9 21:44:55 2017 (r322330)
+++ head/sys/dev/qlnx/qlnxe/qlnx_ver.h Wed Aug 9 22:18:49 2017 (r322331)
@@ -39,5 +39,5 @@
#define QLNX_VERSION_MAJOR 1
#define QLNX_VERSION_MINOR 4
-#define QLNX_VERSION_BUILD 5
+#define QLNX_VERSION_BUILD 6
Modified: head/sys/modules/qlnx/qlnxe/Makefile
==============================================================================
--- head/sys/modules/qlnx/qlnxe/Makefile Wed Aug 9 21:44:55 2017 (r322330)
+++ head/sys/modules/qlnx/qlnxe/Makefile Wed Aug 9 22:18:49 2017 (r322331)
@@ -65,5 +65,6 @@ CFLAGS+= -I${SRCTOP}/sys/compat/linuxkpi/common/includ
#CFLAGS += -DQLNX_SOFT_LRO
#CFLAGS += -DQLNX_QSORT_LRO
#CFLAGS += -DQLNX_MAX_COALESCE
+#CFLAGS += -DQLNX_RCV_IN_TASKQ
CWARNFLAGS+= -Wno-cast-qual
More information about the svn-src-all
mailing list