svn commit: r243379 - in user/andre/tcp_workqueue/sys: dev/bxe dev/cxgb dev/cxgbe dev/e1000 dev/ixgbe dev/mxge dev/oce dev/sfxge dev/vxge kern net netinet netinet6 sys

Andre Oppermann andre at FreeBSD.org
Wed Nov 21 21:03:15 UTC 2012


Author: andre
Date: Wed Nov 21 21:03:14 2012
New Revision: 243379
URL: http://svnweb.freebsd.org/changeset/base/243379

Log:
  Move the RSS hash type definition from m_flags to
  m_pkthdr.csum_flags and change the names accordingly.
  
  The csum and offload section is a much more appropriate
  place for the RSS hash information.

Modified:
  user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c
  user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c
  user/andre/tcp_workqueue/sys/dev/cxgbe/t4_main.c
  user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c
  user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c
  user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c
  user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c
  user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c
  user/andre/tcp_workqueue/sys/dev/oce/oce_if.c
  user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c
  user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c
  user/andre/tcp_workqueue/sys/dev/vxge/vxge.c
  user/andre/tcp_workqueue/sys/kern/uipc_mbuf.c
  user/andre/tcp_workqueue/sys/net/ieee8023ad_lacp.c
  user/andre/tcp_workqueue/sys/net/if_lagg.c
  user/andre/tcp_workqueue/sys/net/netisr.c
  user/andre/tcp_workqueue/sys/netinet/ip_output.c
  user/andre/tcp_workqueue/sys/netinet/sctp_input.c
  user/andre/tcp_workqueue/sys/netinet/sctp_output.c
  user/andre/tcp_workqueue/sys/netinet/tcp_input.c
  user/andre/tcp_workqueue/sys/netinet6/sctp6_usrreq.c
  user/andre/tcp_workqueue/sys/sys/mbuf.h

Modified: user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/bxe/if_bxe.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -9455,7 +9455,7 @@ bxe_tx_mq_start(struct ifnet *ifp, struc
 	fp_index = 0;
 
 	/* If using flow ID, assign the TX queue based on the flow ID. */
-	if ((m->m_flags & M_FLOWID) != 0)
+	if (CSUM_HASH_GET(m) != 0)
 		fp_index = m->m_pkthdr.flowid % sc->num_queues;
 
 	/* Select the fastpath TX queue for the frame. */
@@ -15047,7 +15047,7 @@ bxe_rxeof(struct bxe_fastpath *fp)
 #if __FreeBSD_version >= 800000
 			/* Tell OS what RSS queue was used for this flow. */
 			m->m_pkthdr.flowid = fp->index;
-			m->m_flags |= M_FLOWID;
+			CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 #endif
 
 			/* Last chance to check for problems. */

Modified: user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/cxgb/cxgb_sge.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -1739,7 +1739,7 @@ cxgb_transmit(struct ifnet *ifp, struct 
 		return (0);
 	}
 	
-	if (m->m_flags & M_FLOWID)
+	if (CSUM_HASH_GET(m))
 		qidx = (m->m_pkthdr.flowid % pi->nqsets) + pi->first_qset;
 
 	qs = &pi->adapter->sge.qs[qidx];
@@ -2906,7 +2906,7 @@ process_responses(adapter_t *adap, struc
 			eop = get_packet(adap, drop_thresh, qs, mh, r);
 			if (eop) {
 				if (r->rss_hdr.hash_type && !adap->timestamp)
-					mh->mh_head->m_flags |= M_FLOWID;
+					CSUM_HASH_SET(mh->mh_head, CSUM_HASH_OPAQUE);
 				mh->mh_head->m_pkthdr.flowid = rss_hash;
 			}
 			

Modified: user/andre/tcp_workqueue/sys/dev/cxgbe/t4_main.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/cxgbe/t4_main.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/cxgbe/t4_main.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -1171,7 +1171,7 @@ cxgbe_transmit(struct ifnet *ifp, struct
 		return (ENETDOWN);
 	}
 
-	if (m->m_flags & M_FLOWID)
+	if (CSUM_HASH_GET(m))
 		txq += (m->m_pkthdr.flowid % pi->ntxq);
 	br = txq->br;
 

Modified: user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/cxgbe/t4_sge.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -1122,7 +1122,7 @@ t4_eth_rx(struct sge_iq *iq, const struc
 	m0->m_data += fl_pktshift;
 
 	m0->m_pkthdr.rcvif = ifp;
-	m0->m_flags |= M_FLOWID;
+	CSUM_HASH_SET(m0, CSUM_HASH_OPAQUE);
 	m0->m_pkthdr.flowid = rss->hash_val;
 
 	if (cpl->csum_calc && !cpl->err_vec) {

Modified: user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/e1000/if_igb.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -952,7 +952,7 @@ igb_mq_start(struct ifnet *ifp, struct m
 	int 			i, err = 0;
 
 	/* Which queue to use */
-	if ((m->m_flags & M_FLOWID) != 0)
+	if (CSUM_HASH_GET(m) != 0)
 		i = m->m_pkthdr.flowid % adapter->num_queues;
 	else
 		i = curcpu % adapter->num_queues;
@@ -4855,7 +4855,7 @@ igb_rxeof(struct igb_queue *que, int cou
 			}
 #if __FreeBSD_version >= 800000
 			rxr->fmp->m_pkthdr.flowid = que->msix;
-			rxr->fmp->m_flags |= M_FLOWID;
+			CSUM_HASH_SET(rxr->fmp, CSUM_HASH_OPAQUE);
 #endif
 			sendmp = rxr->fmp;
 			/* Make sure to set M_PKTHDR. */

Modified: user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/ixgbe/ixgbe.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -812,7 +812,7 @@ ixgbe_mq_start(struct ifnet *ifp, struct
 	int 		i = 0, err = 0;
 
 	/* Which queue to use */
-	if ((m->m_flags & M_FLOWID) != 0)
+	if (CSUM_HASH_GET(m) != 0)
 		i = m->m_pkthdr.flowid % adapter->num_queues;
 	else
 		i = curcpu % adapter->num_queues;
@@ -4640,7 +4640,7 @@ ixgbe_rxeof(struct ix_queue *que, int co
 				ixgbe_rx_checksum(staterr, sendmp, ptype);
 #if __FreeBSD_version >= 800000
 			sendmp->m_pkthdr.flowid = que->msix;
-			sendmp->m_flags |= M_FLOWID;
+			CSUM_HASH_SET(sendmp, CSUM_HASH_OPAQUE);
 #endif
 		}
 next_desc:

Modified: user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/ixgbe/ixv.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -583,7 +583,7 @@ ixv_mq_start(struct ifnet *ifp, struct m
 	int 		i = 0, err = 0;
 
 	/* Which queue to use */
-	if ((m->m_flags & M_FLOWID) != 0)
+	if (CSUM_HASH_GET(m) != 0)
 		i = m->m_pkthdr.flowid % adapter->num_queues;
 
 	txr = &adapter->tx_rings[i];
@@ -3475,7 +3475,7 @@ ixv_rxeof(struct ix_queue *que, int coun
 				ixv_rx_checksum(staterr, sendmp, ptype);
 #if __FreeBSD_version >= 800000
 			sendmp->m_pkthdr.flowid = que->msix;
-			sendmp->m_flags |= M_FLOWID;
+			CSUM_HASH_SET(sendmp, CSUM_HASH_OPAQUE);
 #endif
 		}
 next_desc:

Modified: user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/mxge/if_mxge.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -2593,7 +2593,7 @@ mxge_rx_done_big(struct mxge_slice_state
 	/* flowid only valid if RSS hashing is enabled */
 	if (sc->num_slices > 1) {
 		m->m_pkthdr.flowid = (ss - sc->ss);
-		m->m_flags |= M_FLOWID;
+		CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 	}
 	/* pass the frame up the stack */
 	(*ifp->if_input)(ifp, m);
@@ -2658,7 +2658,7 @@ mxge_rx_done_small(struct mxge_slice_sta
 	/* flowid only valid if RSS hashing is enabled */
 	if (sc->num_slices > 1) {
 		m->m_pkthdr.flowid = (ss - sc->ss);
-		m->m_flags |= M_FLOWID;
+		CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 	}
 	/* pass the frame up the stack */
 	(*ifp->if_input)(ifp, m);

Modified: user/andre/tcp_workqueue/sys/dev/oce/oce_if.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/oce/oce_if.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/oce/oce_if.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -485,7 +485,7 @@ oce_multiq_start(struct ifnet *ifp, stru
 	int queue_index = 0;
 	int status = 0;
 	
-	if ((m->m_flags & M_FLOWID) != 0)
+	if (CSUM_HASH_GET(m) != 0)
 		queue_index = m->m_pkthdr.flowid % sc->nwqs;
 	
 	wq = sc->wq[queue_index];
@@ -1280,7 +1280,7 @@ oce_rx(struct oce_rq *rq, uint32_t rqe_i
 		m->m_pkthdr.rcvif = sc->ifp;
 #if __FreeBSD_version >= 800000
 		m->m_pkthdr.flowid = rq->queue_index;
-		m->m_flags |= M_FLOWID;
+		CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 #endif
 		/* This deternies if vlan tag is Valid */
 		if (oce_cqe_vtp_valid(sc, cqe)) { 

Modified: user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_rx.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -304,7 +304,7 @@ sfxge_rx_deliver(struct sfxge_softc *sc,
 	if (rx_desc->flags & EFX_PKT_TCP) {
 		m->m_pkthdr.flowid = EFX_RX_HASH_VALUE(EFX_RX_HASHALG_TOEPLITZ,
 						       mtod(m, uint8_t *));
-		m->m_flags |= M_FLOWID;
+		CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 	}
 #endif
 	m->m_data += sc->rx_prefix_size;
@@ -355,7 +355,7 @@ sfxge_lro_deliver(struct sfxge_lro_state
 
 #ifdef SFXGE_HAVE_MQ
 	m->m_pkthdr.flowid = c->conn_hash;
-	m->m_flags |= M_FLOWID;
+	CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 #endif
 	m->m_pkthdr.csum_flags = csum_flags;
 	__sfxge_rx_deliver(sc, m);

Modified: user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/sfxge/sfxge_tx.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -595,7 +595,7 @@ sfxge_if_transmit(struct ifnet *ifp, str
 	if (m->m_pkthdr.csum_flags & (CSUM_IP_UDP|CSUM_IP_TCP|CSUM_TSO)) {
 		int index = 0;
 
-		if (m->m_flags & M_FLOWID) {
+		if (CSUM_HASH_GET(m)) {
 			uint32_t hash = m->m_pkthdr.flowid;
 
 			index = sc->rx_indir_table[hash % SFXGE_RX_SCALE_MAX];

Modified: user/andre/tcp_workqueue/sys/dev/vxge/vxge.c
==============================================================================
--- user/andre/tcp_workqueue/sys/dev/vxge/vxge.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/dev/vxge/vxge.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -660,7 +660,7 @@ vxge_mq_send(ifnet_t ifp, mbuf_t m_head)
 
 	if (vdev->config.tx_steering) {
 		i = vxge_vpath_get(vdev, m_head);
-	} else if ((m_head->m_flags & M_FLOWID) != 0) {
+	} else if (CSUM_HASH_GET(m_head) != 0) {
 		i = m_head->m_pkthdr.flowid % vdev->no_of_vpath;
 	}
 
@@ -1070,7 +1070,7 @@ vxge_rx_compl(vxge_hal_vpath_h vpath_han
 		vxge_rx_checksum(ext_info, mbuf_up);
 
 #if __FreeBSD_version >= 800000
-		mbuf_up->m_flags |= M_FLOWID;
+		CSUM_HASH_SET(mbuf_up, CSUM_HASH_OPAQUE);
 		mbuf_up->m_pkthdr.flowid = vpath->vp_index;
 #endif
 		/* Post-Read sync for buffers */

Modified: user/andre/tcp_workqueue/sys/kern/uipc_mbuf.c
==============================================================================
--- user/andre/tcp_workqueue/sys/kern/uipc_mbuf.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/kern/uipc_mbuf.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -1695,7 +1695,7 @@ m_print(const struct mbuf *m, int maxlen
 			    m2->m_pkthdr.csum_flags, M_CSUM_FLAG_BITS,
 			    m2->m_pkthdr.csum_l2hlen, m2->m_pkthdr.csum_l3hlen,
 			    m2->m_pkthdr.csum_l4hlen, m2->m_pkthdr.tso_segsz,
-			    m2->m_pkthdr.ether_vtag, M_HASHTYPE_GET(m2));
+			    m2->m_pkthdr.ether_vtag, CSUM_HASH_GET(m2));
 
 			for (mt = SLIST_FIRST(&m2->m_pkthdr.tags); mt != NULL;
 			     mt = SLIST_NEXT(mt, m_tag_link)) {

Modified: user/andre/tcp_workqueue/sys/net/ieee8023ad_lacp.c
==============================================================================
--- user/andre/tcp_workqueue/sys/net/ieee8023ad_lacp.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/net/ieee8023ad_lacp.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -815,7 +815,7 @@ lacp_select_tx_port(struct lagg_softc *s
 		return (NULL);
 	}
 
-	if (sc->use_flowid && (m->m_flags & M_FLOWID))
+	if (sc->use_flowid && CSUM_HASH_GET(m))
 		hash = m->m_pkthdr.flowid;
 	else
 		hash = lagg_hashmbuf(sc, m, lsc->lsc_hashkey);

Modified: user/andre/tcp_workqueue/sys/net/if_lagg.c
==============================================================================
--- user/andre/tcp_workqueue/sys/net/if_lagg.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/net/if_lagg.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -174,7 +174,7 @@ static int lagg_failover_rx_all = 0; /* 
 SYSCTL_INT(_net_link_lagg, OID_AUTO, failover_rx_all, CTLFLAG_RW,
     &lagg_failover_rx_all, 0,
     "Accept input from any interface in a failover lagg");
-static int def_use_flowid = 1; /* Default value for using M_FLOWID */
+static int def_use_flowid = 1; /* Default value for using flowid */
 TUNABLE_INT("net.link.lagg.default_use_flowid", &def_use_flowid);
 SYSCTL_INT(_net_link_lagg, OID_AUTO, default_use_flowid, CTLFLAG_RW,
     &def_use_flowid, 0,
@@ -1760,7 +1760,7 @@ lagg_lb_start(struct lagg_softc *sc, str
 	struct lagg_port *lp = NULL;
 	uint32_t p = 0;
 
-	if (sc->use_flowid && (m->m_flags & M_FLOWID))
+	if (sc->use_flowid && CSUM_HASH_GET(m))
 		p = m->m_pkthdr.flowid;
 	else
 		p = lagg_hashmbuf(sc, m, lb->lb_key);

Modified: user/andre/tcp_workqueue/sys/net/netisr.c
==============================================================================
--- user/andre/tcp_workqueue/sys/net/netisr.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/net/netisr.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -727,12 +727,12 @@ netisr_select_cpuid(struct netisr_proto 
 	}
 
 	if (policy == NETISR_POLICY_FLOW) {
-		if (!(m->m_flags & M_FLOWID) && npp->np_m2flow != NULL) {
+		if (!CSUM_HASH_GET(m) && npp->np_m2flow != NULL) {
 			m = npp->np_m2flow(m, source);
 			if (m == NULL)
 				return (NULL);
 		}
-		if (m->m_flags & M_FLOWID) {
+		if (CSUM_HASH_GET(m)) {
 			*cpuidp =
 			    netisr_default_flow2cpu(m->m_pkthdr.flowid);
 			return (m);

Modified: user/andre/tcp_workqueue/sys/netinet/ip_output.c
==============================================================================
--- user/andre/tcp_workqueue/sys/netinet/ip_output.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/netinet/ip_output.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -140,7 +140,7 @@ ip_output(struct mbuf *m, struct mbuf *o
 		M_SETFIB(m, inp->inp_inc.inc_fibnum);
 		if (inp->inp_flags & (INP_HW_FLOWID|INP_SW_FLOWID)) {
 			m->m_pkthdr.flowid = inp->inp_flowid;
-			m->m_flags |= M_FLOWID;
+			CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 		}
 	}
 

Modified: user/andre/tcp_workqueue/sys/netinet/sctp_input.c
==============================================================================
--- user/andre/tcp_workqueue/sys/netinet/sctp_input.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/netinet/sctp_input.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -6015,7 +6015,7 @@ sctp_input_with_port(struct mbuf *i_pak,
 	    m->m_pkthdr.len,
 	    if_name(m->m_pkthdr.rcvif),
 	    m->m_pkthdr.csum_flags);
-	if (m->m_flags & M_FLOWID) {
+	if (CSUM_HASH_GET(m)) {
 		mflowid = m->m_pkthdr.flowid;
 		use_mflowid = 1;
 	} else {
@@ -6112,7 +6112,7 @@ sctp_input(struct mbuf *m, int off)
 	uint32_t flowid, tag;
 
 	if (mp_ncpus > 1) {
-		if (m->m_flags & M_FLOWID) {
+		if (CSUM_HASH_GET(m)) {
 			flowid = m->m_pkthdr.flowid;
 		} else {
 			/*
@@ -6131,7 +6131,7 @@ sctp_input(struct mbuf *m, int off)
 			tag = htonl(sh->v_tag);
 			flowid = tag ^ ntohs(sh->dest_port) ^ ntohs(sh->src_port);
 			m->m_pkthdr.flowid = flowid;
-			m->m_flags |= M_FLOWID;
+			CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 		}
 		cpu_to_use = sctp_cpuarry[flowid % mp_ncpus];
 		sctp_queue_to_mcore(m, off, cpu_to_use);

Modified: user/andre/tcp_workqueue/sys/netinet/sctp_output.c
==============================================================================
--- user/andre/tcp_workqueue/sys/netinet/sctp_output.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/netinet/sctp_output.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -3957,11 +3957,11 @@ sctp_lowlevel_chunk_output(struct sctp_i
 				}
 #endif
 				m->m_pkthdr.flowid = net->flowid;
-				m->m_flags |= M_FLOWID;
+				CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 			} else {
 				if (use_mflowid != 0) {
 					m->m_pkthdr.flowid = mflowid;
-					m->m_flags |= M_FLOWID;
+					CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 				}
 			}
 			packet_length = sctp_calculate_len(m);
@@ -4246,11 +4246,11 @@ sctp_lowlevel_chunk_output(struct sctp_i
 				}
 #endif
 				m->m_pkthdr.flowid = net->flowid;
-				m->m_flags |= M_FLOWID;
+				CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 			} else {
 				if (use_mflowid != 0) {
 					m->m_pkthdr.flowid = mflowid;
-					m->m_flags |= M_FLOWID;
+					CSUM_HASH_SET(m, CSUM_HASH_OPAQUE);
 				}
 			}
 			packet_length = sctp_calculate_len(m);
@@ -10881,7 +10881,7 @@ sctp_send_resp_msg(struct sockaddr *src,
 	SCTP_BUF_NEXT(mout) = cause;
 	if (use_mflowid != 0) {
 		mout->m_pkthdr.flowid = mflowid;
-		mout->m_flags |= M_FLOWID;
+		CSUM_HASH_SET(mout, CSUM_HASH_OPAQUE);
 	}
 #ifdef INET
 	ip = NULL;

Modified: user/andre/tcp_workqueue/sys/netinet/tcp_input.c
==============================================================================
--- user/andre/tcp_workqueue/sys/netinet/tcp_input.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/netinet/tcp_input.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -876,7 +876,7 @@ findpcb:
 	}
 	INP_WLOCK_ASSERT(inp);
 	if (!(inp->inp_flags & INP_HW_FLOWID)
-	    && (m->m_flags & M_FLOWID)
+	    && (CSUM_HASH_GET(m))
 	    && ((inp->inp_socket == NULL)
 		|| !(inp->inp_socket->so_options & SO_ACCEPTCONN))) {
 		inp->inp_flags |= INP_HW_FLOWID;

Modified: user/andre/tcp_workqueue/sys/netinet6/sctp6_usrreq.c
==============================================================================
--- user/andre/tcp_workqueue/sys/netinet6/sctp6_usrreq.c	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/netinet6/sctp6_usrreq.c	Wed Nov 21 21:03:14 2012	(r243379)
@@ -113,7 +113,7 @@ sctp6_input_with_port(struct mbuf **i_pa
 	    m->m_pkthdr.len,
 	    if_name(m->m_pkthdr.rcvif),
 	    m->m_pkthdr.csum_flags);
-	if (m->m_flags & M_FLOWID) {
+	if (CSUM_HASH_GET(m)) {
 		mflowid = m->m_pkthdr.flowid;
 		use_mflowid = 1;
 	} else {

Modified: user/andre/tcp_workqueue/sys/sys/mbuf.h
==============================================================================
--- user/andre/tcp_workqueue/sys/sys/mbuf.h	Wed Nov 21 20:29:27 2012	(r243378)
+++ user/andre/tcp_workqueue/sys/sys/mbuf.h	Wed Nov 21 21:03:14 2012	(r243379)
@@ -213,8 +213,6 @@ struct mbuf {
 #define	M_PROTO6	0x00080000 /* protocol-specific */
 #define	M_PROTO7	0x00100000 /* protocol-specific */
 #define	M_PROTO8	0x00200000 /* protocol-specific */
-#define	M_FLOWID	0x00400000 /* deprecated: flowid is valid */
-#define	M_HASHTYPEBITS	0x0F000000 /* mask of bits holding flowid hash type */
 
 #define M_FLAG_BITS \
     "\20\27FLOWID\26PROTO8\25PROTO7\24PROTO6\23NOFREE\22PROMISC" \
@@ -240,40 +238,39 @@ struct mbuf {
  * can then be used to maintain ordering while delivering packets to the OS
  * via parallel input queues, as well as to provide a stateless affinity
  * model.  NIC drivers can pass up the hash via m->m_pkthdr.flowid, and set
- * m_flag fields to indicate how the hash should be interpreted by the
+ * csum_flags fields to indicate how the hash should be interpreted by the
  * network stack.
  *
  * Most NICs support RSS, which provides ordering and explicit affinity, and
  * use the hash m_flag bits to indicate what header fields were covered by
- * the hash.  M_HASHTYPE_OPAQUE can be set by non-RSS cards or configurations
+ * the hash.  CSUM_HASH_OPAQUE can be set by non-RSS cards or configurations
  * that provide an opaque flow identifier, allowing for ordering and
  * distribution without explicit affinity.
  */
-#define	M_HASHTYPE_SHIFT		24
-#define	M_HASHTYPE_NONE			0x0
-#define	M_HASHTYPE_RSS_IPV4		0x1	/* IPv4 2-tuple */
-#define	M_HASHTYPE_RSS_TCP_IPV4		0x2	/* TCPv4 4-tuple */
-#define	M_HASHTYPE_RSS_IPV6		0x3	/* IPv6 2-tuple */
-#define	M_HASHTYPE_RSS_TCP_IPV6		0x4	/* TCPv6 4-tuple */
-#define	M_HASHTYPE_RSS_IPV6_EX		0x5	/* IPv6 2-tuple + ext hdrs */
-#define	M_HASHTYPE_RSS_TCP_IPV6_EX	0x6	/* TCPv6 4-tiple + ext hdrs */
-#define	M_HASHTYPE_OPAQUE		0xf	/* ordering, not affinity */
-
-#define	M_HASHTYPE_CLEAR(m)	(m)->m_flags &= ~(M_HASHTYPEBITS)
-#define	M_HASHTYPE_GET(m)	(((m)->m_flags & M_HASHTYPEBITS) >> \
-				    M_HASHTYPE_SHIFT)
-#define	M_HASHTYPE_SET(m, v)	do {					\
-	(m)->m_flags &= ~M_HASHTYPEBITS;				\
-	(m)->m_flags |= ((v) << M_HASHTYPE_SHIFT);			\
+#define	CSUM_HASH_NONE		0x0	/* no RSS hash computed		*/
+#define	CSUM_HASH_IPV4		0x1	/* IPv4 2-tuple			*/
+#define	CSUM_HASH_TCP_IPV4	0x2	/* TCPv4 4-tuple		*/
+#define	CSUM_HASH_IPV6		0x3	/* IPv6 2-tuple			*/
+#define	CSUM_HASH_TCP_IPV6	0x4	/* TCPv6 4-tuple		*/
+#define	CSUM_HASH_IPV6_EX	0x5	/* IPv6 2-tuple + ext hdrs	*/
+#define	CSUM_HASH_TCP_IPV6_EX	0x6	/* TCPv6 4-tiple + ext hdrs	*/
+#define	CSUM_HASH_OPAQUE	0xf	/* ordering, not affinity	*/
+
+#define	CSUM_HASH_MASK		0x0000000F
+#define	CSUM_HASH_CLEAR(m)	((m)->m_pkthdr.csum_flags &= ~CSUM_HASH_MASK)
+#define	CSUM_HASH_GET(m)	((m)->m_pkthdr.csum_flags & CSUM_HASH_MASK)
+#define	CSUM_HASH_SET(m, v)	do {					\
+	(m)->m_pkthdr.csum_flags &= ~CSUM_HASH_MASK;			\
+	(m)->m_pkthdr.csum_flags |= (v);				\
 } while (0)
-#define	M_HASHTYPE_TEST(m, v)	(M_HASHTYPE_GET(m) == (v))
+#define	CSUM_HASH_TEST(m, v)	(CSUM_HASH_GET(m) == (v))
 
 /*
  * Flags preserved when copying m_pkthdr.
  */
 #define	M_COPYFLAGS \
     (M_PKTHDR|M_EOR|M_RDONLY|M_PROTOFLAGS|M_SKIP_FIREWALL|M_BCAST|M_MCAST|\
-     M_FRAG|M_FIRSTFRAG|M_LASTFRAG|M_VLANTAG|M_PROMISC|M_FIB|M_HASHTYPEBITS)
+     M_FRAG|M_FIRSTFRAG|M_LASTFRAG|M_VLANTAG|M_PROMISC|M_FIB)
 
 /*
  * External buffer types: identify ext_buf type.


More information about the svn-src-user mailing list