Index: sys/dev/e1000/if_igb.c =================================================================== --- sys/dev/e1000/if_igb.c (revision 233938) +++ sys/dev/e1000/if_igb.c (working copy) @@ -370,6 +370,15 @@ SYSCTL_INT(_hw_igb, OID_AUTO, rx_process_limit, CT &igb_rx_process_limit, 0, "Maximum number of received packets to process at a time, -1 means unlimited"); +/* +** Tune flowid generation. IF turned on, +** mbuf flowid is set to adapter queue number +*/ +static int igb_generate_flowid = TRUE; +TUNABLE_INT("hw.igb.generate_flowid", &igb_generate_flowid); +SYSCTL_INT(_hw_igb, OID_AUTO, generate_flowid, CTLFLAG_RW, &igb_generate_flowid, 0, + "Enable flowid generation"); + #ifdef DEV_NETMAP /* see ixgbe.c for details */ #include #endif /* DEV_NETMAP */ @@ -513,6 +522,10 @@ igb_attach(device_t dev) } else adapter->num_rx_desc = igb_rxd; + igb_set_sysctl_value(adapter, "generate_flowid", + "Enable flowid generation", &adapter->generate_flowid, + igb_generate_flowid); + adapter->hw.mac.autoneg = DO_AUTO_NEG; adapter->hw.phy.autoneg_wait_to_complete = FALSE; adapter->hw.phy.autoneg_advertised = AUTONEG_ADV_DEFAULT; @@ -4742,8 +4755,10 @@ igb_rxeof(struct igb_queue *que, int count, int *d rxr->fmp->m_flags |= M_VLANTAG; } #if __FreeBSD_version >= 800000 - rxr->fmp->m_pkthdr.flowid = que->msix; - rxr->fmp->m_flags |= M_FLOWID; + if (adapter->generate_flowid != 0) { + rxr->fmp->m_pkthdr.flowid = que->msix; + rxr->fmp->m_flags |= M_FLOWID; + } #endif sendmp = rxr->fmp; /* Make sure to set M_PKTHDR. */ Index: sys/dev/e1000/if_igb.h =================================================================== --- sys/dev/e1000/if_igb.h (revision 233938) +++ sys/dev/e1000/if_igb.h (working copy) @@ -406,6 +406,7 @@ struct adapter { u32 smartspeed; u32 dmac; int enable_aim; + int generate_flowid; /* Interface queues */ struct igb_queue *queues;