Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Aug 2007 08:21:40 GMT
From:      Kip Macy <kmacy@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 124806 for review
Message-ID:  <200708070821.l778Leek029974@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=124806

Change 124806 by kmacy@kmacy_home:ethng on 2007/08/07 08:21:12

	integrate baseline multiq support functionality

Affected files ...

.. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_adapter.h#3 edit
.. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_main.c#4 edit
.. //depot/projects/ethng/src/sys/dev/cxgb/cxgb_multiq.c#1 add
.. //depot/projects/ethng/src/sys/modules/cxgb/Makefile#4 edit

Differences ...

==== //depot/projects/ethng/src/sys/dev/cxgb/cxgb_adapter.h#3 (text+ko) ====

@@ -572,5 +572,12 @@
         return isset(&adapter->open_device_map, OFFLOAD_DEVMAP_BIT);
 }
 
+#ifdef IFNET_MULTIQUEUE
+int cxgb_pcpu_enqueue_packet(struct ifnet *ifp, int32_t cpuid, struct mbuf *m);
+int cxgb_pcpu_start(struct ifnet *ifp, int32_t cpuid, struct mbuf *m);
+int32_t cxgb_pcpu_get_cookie(struct ifnet *ifp, struct in6_addr *lip, uint16_t lport,
+    struct in6_addr *rip, uint16_t rport, int ipv6);
+
 
 #endif
+#endif

==== //depot/projects/ethng/src/sys/dev/cxgb/cxgb_main.c#4 (text+ko) ====

@@ -636,6 +636,10 @@
 {
 	int i;
 
+#ifdef IFNET_MULTIQUEUE
+	cxgb_pcpu_shutdown_threads(sc);
+#endif
+
 	ADAPTER_LOCK(sc);
 	/*
 	 * drops the lock
@@ -993,6 +997,18 @@
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = cxgb_ioctl;
 	ifp->if_start = cxgb_start;
+
+#ifdef IFNET_MULTIQUEUE
+	if (ifnet_multiqueue == 0) {
+		device_printf(dev, "cxgb compiled with multi-queue support, but kernel doesn't support it\n");
+		return (EDOOFUS);
+	}
+	ifp->if_flags |= IFF_MULTIQ;
+	ifp->if_mq_start = cxgb_pcpu_start;
+	ifp->if_mq_enqueue_packet = cxgb_pcpu_enqueue_packet;
+	ifp->if_mq_get_cookie = cxgb_pcpu_get_cookie;
+#endif
+	
 	ifp->if_timer = 0;	/* Disable ifnet watchdog */
 	ifp->if_watchdog = NULL;
 
@@ -1408,6 +1424,10 @@
 {
 	int i, j;
 
+#ifdef IFNET_MULTIQUEUE
+	cxgb_pcpu_startup_threads(sc);
+#endif
+	
 	for (i = 0; i < (sc)->params.nports; ++i) {
 		const struct port_info *pi = adap2pinfo(sc, i);
 
@@ -2007,6 +2027,16 @@
 	} while (error == 0);
 }
 
+#ifndef IFNET_MULTIQUEUE
+static inline struct mbuf *
+cxgb_dequeue_packet(struct ifnet *ifp, struct sge_txq *unused)
+{
+	struct mbuf *m;
+
+	IFQ_DRV_DEQUEUE(&ifp->if_snd, m);
+	return (m);
+}
+
 static void
 cxgb_start(struct ifnet *ifp)
 {
@@ -2027,7 +2057,7 @@
 	if (err == 0)
 		taskqueue_enqueue(pi->tq, &pi->start_task);
 }
-
+#endif
 
 static int
 cxgb_media_change(struct ifnet *ifp)

==== //depot/projects/ethng/src/sys/modules/cxgb/Makefile#4 (text+ko) ====

@@ -8,7 +8,7 @@
 SRCS+=	cxgb_xgmac.c cxgb_vsc7323.c cxgb_t3_hw.c cxgb_main.c 
 SRCS+=  cxgb_sge.c cxgb_lro.c cxgb_offload.c cxgb_l2t.c
 SRCS+=	device_if.h bus_if.h pci_if.h opt_zero.h 
-SRCS+=	uipc_mvec.c
+SRCS+=	uipc_mvec.c cxgb_multiq.c
 
 CFLAGS+= -DCONFIG_CHELSIO_T3_CORE -g -DCONFIG_DEFINED -DDEFAULT_JUMBO -I${CXGB}
 #CFLAGS+= -DIFNET_MULTIQUEUE



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708070821.l778Leek029974>