From owner-svn-src-projects@freebsd.org  Fri Jul 17 08:06:41 2015
Return-Path: <owner-svn-src-projects@freebsd.org>
Delivered-To: svn-src-projects@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id DDE069A4C21
 for <svn-src-projects@mailman.ysv.freebsd.org>;
 Fri, 17 Jul 2015 08:06:41 +0000 (UTC) (envelope-from np@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id CEA901969;
 Fri, 17 Jul 2015 08:06:41 +0000 (UTC) (envelope-from np@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.70])
 by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t6H86f3M064094;
 Fri, 17 Jul 2015 08:06:41 GMT (envelope-from np@FreeBSD.org)
Received: (from np@localhost)
 by repo.freebsd.org (8.14.9/8.14.9/Submit) id t6H86f2u064093;
 Fri, 17 Jul 2015 08:06:41 GMT (envelope-from np@FreeBSD.org)
Message-Id: <201507170806.t6H86f2u064093@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org
 using -f
From: Navdeep Parhar <np@FreeBSD.org>
Date: Fri, 17 Jul 2015 08:06:41 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r285650 - projects/cxl_iscsi/sys/dev/cxgbe/cxgbei
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.20
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 17 Jul 2015 08:06:42 -0000

Author: np
Date: Fri Jul 17 08:06:40 2015
New Revision: 285650
URL: https://svnweb.freebsd.org/changeset/base/285650

Log:
  Create some worker threads.  These will be used instead of the driver's
  ithreads to dispatch received PDUs.

Modified:
  projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.c

Modified: projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.c
==============================================================================
--- projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.c	Fri Jul 17 07:30:00 2015	(r285649)
+++ projects/cxl_iscsi/sys/dev/cxgbe/cxgbei/cxgbei.c	Fri Jul 17 08:06:40 2015	(r285650)
@@ -40,6 +40,8 @@ __FBSDID("$FreeBSD$");
 #include <sys/errno.h>
 #include <sys/param.h>
 #include <sys/kernel.h>
+#include <sys/kthread.h>
+#include <sys/smp.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/mbuf.h>
@@ -1204,6 +1206,114 @@ static struct uld_info cxgbei_uld_info =
 	.deactivate = cxgbei_deactivate,
 };
 
+enum {
+	CWT_RUNNING = 1,
+	CWT_STOP = 2,
+	CWT_STOPPED = 3,
+};
+
+struct cxgbei_worker_thread_softc {
+	struct mtx	cwt_lock;
+	struct cv	cwt_cv;
+	volatile int	cwt_state;
+} __aligned(CACHE_LINE_SIZE);
+
+int worker_thread_count;
+static struct cxgbei_worker_thread_softc *cwt_softc;
+static struct proc *cxgbei_proc;
+
+static void
+cwt_main(void *arg)
+{
+	struct cxgbei_worker_thread_softc *cwt = arg;
+
+	MPASS(cwt != NULL);
+
+	mtx_lock(&cwt->cwt_lock);
+	MPASS(cwt->cwt_state == 0);
+	cwt->cwt_state = CWT_RUNNING;
+	cv_signal(&cwt->cwt_cv);
+	for (;;) {
+		cv_wait(&cwt->cwt_cv, &cwt->cwt_lock);
+		if (cwt->cwt_state == CWT_STOP)
+			break;
+	}
+
+	mtx_assert(&cwt->cwt_lock, MA_OWNED);
+	cwt->cwt_state = CWT_STOPPED;
+	cv_signal(&cwt->cwt_cv);
+	mtx_unlock(&cwt->cwt_lock);
+	kthread_exit();
+}
+
+static int
+start_worker_threads(void)
+{
+	int i, rc;
+	struct cxgbei_worker_thread_softc *cwt;
+
+	worker_thread_count = min(mp_ncpus, 32);
+	cwt_softc = malloc(worker_thread_count * sizeof(*cwt), M_CXGBE,
+	    M_WAITOK | M_ZERO);
+
+	MPASS(cxgbei_proc == NULL);
+	for (i = 0, cwt = &cwt_softc[0]; i < worker_thread_count; i++, cwt++) {
+		mtx_init(&cwt->cwt_lock, "cwt lock", NULL, MTX_DEF);
+		cv_init(&cwt->cwt_cv, "cwt cv");
+		rc = kproc_kthread_add(cwt_main, cwt, &cxgbei_proc, NULL, 0, 0,
+		    "cxgbei", "%d", i);
+		if (rc != 0) {
+			printf("cxgbei: failed to start thread #%d/%d (%d)\n",
+			    i + 1, worker_thread_count, rc);
+			mtx_destroy(&cwt->cwt_lock);
+			cv_destroy(&cwt->cwt_cv);
+			bzero(&cwt, sizeof(*cwt));
+			if (i == 0) {
+				free(cwt_softc, M_CXGBE);
+				worker_thread_count = 0;
+
+				return (rc);
+			}
+
+			/* Not fatal, carry on with fewer threads. */
+			worker_thread_count = i;
+			rc = 0;
+			break;
+		}
+
+		/* Wait for thread to start before moving on to the next one. */
+		mtx_lock(&cwt->cwt_lock);
+		while (cwt->cwt_state != CWT_RUNNING)
+			cv_wait(&cwt->cwt_cv, &cwt->cwt_lock);
+		mtx_unlock(&cwt->cwt_lock);
+	}
+
+	MPASS(cwt_softc != NULL);
+	MPASS(worker_thread_count > 0);
+	return (0);
+}
+
+static void
+stop_worker_threads(void)
+{
+	int i;
+	struct cxgbei_worker_thread_softc *cwt = &cwt_softc[0];
+
+	MPASS(worker_thread_count >= 0);
+
+	for (i = 0, cwt = &cwt_softc[0]; i < worker_thread_count; i++, cwt++) {
+		mtx_lock(&cwt->cwt_lock);
+		MPASS(cwt->cwt_state == CWT_RUNNING);
+		cwt->cwt_state = CWT_STOP;
+		cv_signal(&cwt->cwt_cv);
+		do {
+			cv_wait(&cwt->cwt_cv, &cwt->cwt_lock);
+		} while (cwt->cwt_state != CWT_STOPPED);
+		mtx_unlock(&cwt->cwt_lock);
+	}
+	free(cwt_softc, M_CXGBE);
+}
+
 extern void (*cxgbei_fw4_ack)(struct toepcb *, int);
 extern void (*cxgbei_rx_data_ddp)(struct toepcb *,
     const struct cpl_rx_data_ddp *);
@@ -1220,10 +1330,16 @@ cxgbei_mod_load(void)
 	cxgbei_writeq_len = get_writeq_len;
 	cxgbei_writeq_next = do_writeq_next;
 
-	rc = t4_register_uld(&cxgbei_uld_info);
+	rc = start_worker_threads();
 	if (rc != 0)
 		return (rc);
 
+	rc = t4_register_uld(&cxgbei_uld_info);
+	if (rc != 0) {
+		stop_worker_threads();
+		return (rc);
+	}
+
 	t4_iterate(cxgbei_activate_all, NULL);
 
 	return (rc);
@@ -1238,6 +1354,8 @@ cxgbei_mod_unload(void)
 	if (t4_unregister_uld(&cxgbei_uld_info) == EBUSY)
 		return (EBUSY);
 
+	stop_worker_threads();
+
 	return (0);
 }
 

From owner-svn-src-projects@freebsd.org  Fri Jul 17 20:29:48 2015
Return-Path: <owner-svn-src-projects@freebsd.org>
Delivered-To: svn-src-projects@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id A32F19A2BEA
 for <svn-src-projects@mailman.ysv.freebsd.org>;
 Fri, 17 Jul 2015 20:29:48 +0000 (UTC)
 (envelope-from benno@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 94256162F;
 Fri, 17 Jul 2015 20:29:48 +0000 (UTC)
 (envelope-from benno@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.70])
 by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t6HKTm1W067199;
 Fri, 17 Jul 2015 20:29:48 GMT (envelope-from benno@FreeBSD.org)
Received: (from benno@localhost)
 by repo.freebsd.org (8.14.9/8.14.9/Submit) id t6HKTmAh067198;
 Fri, 17 Jul 2015 20:29:48 GMT (envelope-from benno@FreeBSD.org)
Message-Id: <201507172029.t6HKTmAh067198@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: benno set sender to
 benno@FreeBSD.org using -f
From: Benno Rice <benno@FreeBSD.org>
Date: Fri, 17 Jul 2015 20:29:48 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r285659 - projects/pms/sys/dev/pms
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.20
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 17 Jul 2015 20:29:48 -0000

Author: benno
Date: Fri Jul 17 20:29:47 2015
New Revision: 285659
URL: https://svnweb.freebsd.org/changeset/base/285659

Log:
  Disable debugging.
  
  Submitted by:	Vasanthalakshmi Tharmarajan <Vasanthalakshmi.Tharmarajan@pmcs.com>
  Reviewed by:	scottl

Modified:
  projects/pms/sys/dev/pms/config.h

Modified: projects/pms/sys/dev/pms/config.h
==============================================================================
--- projects/pms/sys/dev/pms/config.h	Fri Jul 17 19:10:43 2015	(r285658)
+++ projects/pms/sys/dev/pms/config.h	Fri Jul 17 20:29:47 2015	(r285659)
@@ -45,16 +45,16 @@
 #define	TD_DISCOVER
 #define	SA_ENABLE_HDA_FUNCTIONS
 // #define	SA_FW_TEST_INTERRUPT_REASSERT
-#define	SALLSDK_DEBUG
-#define	AGTIAPI_DEBUG
+// #define	SALLSDK_DEBUG
+// #define	AGTIAPI_DEBUG
 // #define	TD_DEBUG_ENABLE
 // #define	AGTIAPI_IO_DEBUG
 // #define	AGTIAPI_FLOW_DEBUG
 // #define	AGTIAPI_INIT_DEBUG
 #define	PMC_PM8001_BAR64KB
-#define	DM_DEBUG
+// #define	DM_DEBUG
 #define	FDS_DM
-#define	SM_DEBUG
+// #define	SM_DEBUG
 #define	FDS_SM
 #define	SATA_ENABLE
 #define	CHAR_DEVICE

From owner-svn-src-projects@freebsd.org  Fri Jul 17 20:30:31 2015
Return-Path: <owner-svn-src-projects@freebsd.org>
Delivered-To: svn-src-projects@mailman.ysv.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org
 [IPv6:2001:1900:2254:206a::19:1])
 by mailman.ysv.freebsd.org (Postfix) with ESMTP id 870CA9A2C1F
 for <svn-src-projects@mailman.ysv.freebsd.org>;
 Fri, 17 Jul 2015 20:30:31 +0000 (UTC)
 (envelope-from benno@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2001:1900:2254:2068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mx1.freebsd.org (Postfix) with ESMTPS id 7779418D0;
 Fri, 17 Jul 2015 20:30:31 +0000 (UTC)
 (envelope-from benno@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.70])
 by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t6HKUVtK070331;
 Fri, 17 Jul 2015 20:30:31 GMT (envelope-from benno@FreeBSD.org)
Received: (from benno@localhost)
 by repo.freebsd.org (8.14.9/8.14.9/Submit) id t6HKUVoP070330;
 Fri, 17 Jul 2015 20:30:31 GMT (envelope-from benno@FreeBSD.org)
Message-Id: <201507172030.t6HKUVoP070330@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: benno set sender to
 benno@FreeBSD.org using -f
From: Benno Rice <benno@FreeBSD.org>
Date: Fri, 17 Jul 2015 20:30:31 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject: svn commit: r285660 - projects/pms/sys/modules
X-SVN-Group: projects
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-src-projects@freebsd.org
X-Mailman-Version: 2.1.20
Precedence: list
List-Id: "SVN commit messages for the src &quot; projects&quot;
 tree" <svn-src-projects.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/options/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-projects/>
List-Post: <mailto:svn-src-projects@freebsd.org>
List-Help: <mailto:svn-src-projects-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-projects>, 
 <mailto:svn-src-projects-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Fri, 17 Jul 2015 20:30:31 -0000

Author: benno
Date: Fri Jul 17 20:30:30 2015
New Revision: 285660
URL: https://svnweb.freebsd.org/changeset/base/285660

Log:
  Enable pms module on amd64 for now.

Modified:
  projects/pms/sys/modules/Makefile

Modified: projects/pms/sys/modules/Makefile
==============================================================================
--- projects/pms/sys/modules/Makefile	Fri Jul 17 20:29:47 2015	(r285659)
+++ projects/pms/sys/modules/Makefile	Fri Jul 17 20:30:30 2015	(r285660)
@@ -276,6 +276,7 @@ SUBDIR=	\
 	${_pfsync} \
 	plip \
 	${_pmc} \
+	${_pms} \
 	ppbus \
 	ppc \
 	ppi \
@@ -620,6 +621,7 @@ _ixlv=		ixlv
 _linux64=	linux64
 _linux_common=	linux_common
 _ntb=		ntb
+_pms=		pms
 _qlxge=		qlxge
 _qlxgb=		qlxgb
 _qlxgbe=	qlxgbe