svn commit: r345660 - head/sys/dev/cxgbe

Navdeep Parhar np at FreeBSD.org
Tue Sep 3 14:05:56 UTC 2019


Author: np
Date: Thu Mar 28 21:22:28 2019
New Revision: 345660
URL: https://svnweb.freebsd.org/changeset/base/345660

Log:
  cxgbe(4): Count and clear interrupts generated at the software's request.
  
  An interrupt can be requested by setting the F_SWINT bit in PL_PF_CTL.
  
  MFC after:	1 week
  Sponsored by:	Chelsio Communications

Modified:
  head/sys/dev/cxgbe/adapter.h
  head/sys/dev/cxgbe/t4_main.c
  head/sys/dev/cxgbe/t4_sge.c

Modified: head/sys/dev/cxgbe/adapter.h
==============================================================================
--- head/sys/dev/cxgbe/adapter.h	Thu Mar 28 21:00:54 2019	(r345659)
+++ head/sys/dev/cxgbe/adapter.h	Thu Mar 28 21:22:28 2019	(r345660)
@@ -895,6 +895,8 @@ struct adapter {
 	const char *last_op;
 	const void *last_op_thr;
 	int last_op_flags;
+
+	int swintr;
 };
 
 #define ADAPTER_LOCK(sc)		mtx_lock(&(sc)->sc_lock)

Modified: head/sys/dev/cxgbe/t4_main.c
==============================================================================
--- head/sys/dev/cxgbe/t4_main.c	Thu Mar 28 21:00:54 2019	(r345659)
+++ head/sys/dev/cxgbe/t4_main.c	Thu Mar 28 21:22:28 2019	(r345660)
@@ -6031,6 +6031,9 @@ t4_sysctls(struct adapter *sc)
 	    CTLTYPE_STRING | CTLFLAG_RD, sc, INTR_CPUS,
 	    sysctl_cpus, "A", "preferred CPUs for interrupts");
 
+	SYSCTL_ADD_INT(ctx, children, OID_AUTO, "swintr", CTLFLAG_RW,
+	    &sc->swintr, 0, "software triggered interrupts");
+
 	/*
 	 * dev.t4nex.X.misc.  Marked CTLFLAG_SKIP to avoid information overload.
 	 */

Modified: head/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- head/sys/dev/cxgbe/t4_sge.c	Thu Mar 28 21:00:54 2019	(r345659)
+++ head/sys/dev/cxgbe/t4_sge.c	Thu Mar 28 21:22:28 2019	(r345660)
@@ -1394,10 +1394,17 @@ void
 t4_intr_err(void *arg)
 {
 	struct adapter *sc = arg;
+	uint32_t v;
 	const bool verbose = (sc->debug_flags & DF_VERBOSE_SLOWINTR) != 0;
 
 	if (sc->flags & ADAP_ERR)
 		return;
+
+	v = t4_read_reg(sc, MYPF_REG(A_PL_PF_INT_CAUSE));
+	if (v & F_PFSW) {
+		sc->swintr++;
+		t4_write_reg(sc, MYPF_REG(A_PL_PF_INT_CAUSE), v);
+	}
 
 	t4_slow_intr_handler(sc, verbose);
 }




More information about the svn-src-head mailing list