PERFORCE change 196403 for review

Takuya ASADA syuu at FreeBSD.org
Tue Jul 19 13:55:08 UTC 2011


http://p4web.freebsd.org/@@196403?ac=10

Change 196403 by syuu at kikurage on 2011/07/19 13:55:06

	skip genarating flowid on multiqueue if.

Affected files ...

.. //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.h#7 edit
.. //depot/projects/soc2011/mq_bpf/src/sys/netinet/in_rss.c#6 edit

Differences ...

==== //depot/projects/soc2011/mq_bpf/src/sys/net/bpf.h#7 (text+ko) ====

@@ -41,7 +41,6 @@
 #define _NET_BPF_H_
 
 #include <sys/lock.h>
-#include <sys/rmlock.h>
 
 /* BSD style release date */
 #define	BPF_RELEASE 199606
@@ -1113,7 +1112,7 @@
 	u_int bif_dlt;				/* link layer type */
 	u_int bif_hdrlen;		/* length of link header */
 	struct ifnet *bif_ifp;		/* corresponding interface */
-	struct rmlock	bif_lock;	/* rmlock for interface */
+	struct mtx	bif_lock;	/* rmlock for interface */
 };
 
 void	 bpf_bufheld(struct bpf_d *d);

==== //depot/projects/soc2011/mq_bpf/src/sys/netinet/in_rss.c#6 (text+ko) ====

@@ -60,6 +60,8 @@
 #include <netinet/udp_var.h>
 #endif
 
+#include <sys/syslog.h>
+
 /*-
  * Operating system parts of receiver-side scaling (RSS), which allows
  * network cards to direct flows to particular receive queues based on hashes
@@ -420,10 +422,17 @@
 struct mbuf *
 rss_m2cpuid(struct mbuf *m, uintptr_t source, u_int *cpuid)
 {
+#ifdef SOFTRSS
+	int softrss_pkt = 0;
+#endif
+
 	M_ASSERTPKTHDR(m);
 
 #ifdef SOFTRSS
-	softrss_set_flowid(m);
+	if (!(m->m_flags & M_FLOWID)) {
+		softrss_pkt = 1;
+		softrss_set_flowid(m);
+	}
 #endif
 
 	switch (M_HASHTYPE_GET(m)) {
@@ -431,16 +440,20 @@
 	case M_HASHTYPE_RSS_TCP_IPV4:
 		*cpuid = rss_getcpu(rss_getbucket(m->m_pkthdr.flowid));
 #ifdef SOFTRSS
-		m->m_pkthdr.rxqueue = *cpuid;
-		m->m_pkthdr.txqueue = (uint32_t)-1;
+		if (softrss_pkt) {
+			m->m_pkthdr.rxqueue = *cpuid;
+			m->m_pkthdr.txqueue = (uint32_t)-1;
+		}
 #endif
 		return (m);
 
 	default:
 		*cpuid = NETISR_CPUID_NONE;
 #ifdef SOFTRSS
-		m->m_pkthdr.rxqueue = curcpu;
-		m->m_pkthdr.txqueue = (uint32_t)-1;
+		if (softrss_pkt) {
+			m->m_pkthdr.rxqueue = curcpu;
+			m->m_pkthdr.txqueue = (uint32_t)-1;
+		}
 #endif
 		return (m);
 	}


More information about the p4-projects mailing list