Page MenuHomeFreeBSD

D2296.id.diff
No OneTemporary

D2296.id.diff

Index: head/sys/dev/e1000/if_igb.c
===================================================================
--- head/sys/dev/e1000/if_igb.c
+++ head/sys/dev/e1000/if_igb.c
@@ -4630,8 +4630,11 @@
/* Now fill in hash table */
- /* XXX This means RSS enable + 8 queues for my igb (82580.) */
- mrqc = E1000_MRQC_ENABLE_RSS_4Q;
+ /*
+ * MRQC: Multiple Receive Queues Command
+ * Set queuing to RSS control, number depends on the device.
+ */
+ mrqc = E1000_MRQC_ENABLE_RSS_8Q;
#ifdef RSS
/* XXX ew typecasting */
@@ -5139,45 +5142,51 @@
rxr->fmp->m_pkthdr.ether_vtag = vtag;
rxr->fmp->m_flags |= M_VLANTAG;
}
-#ifdef RSS
- /* XXX set flowtype once this works right */
- rxr->fmp->m_pkthdr.flowid =
- le32toh(cur->wb.lower.hi_dword.rss);
- switch (pkt_info & E1000_RXDADV_RSSTYPE_MASK) {
- case E1000_RXDADV_RSSTYPE_IPV4_TCP:
- M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_RSS_TCP_IPV4);
- break;
- case E1000_RXDADV_RSSTYPE_IPV4:
- M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_RSS_IPV4);
- break;
- case E1000_RXDADV_RSSTYPE_IPV6_TCP:
- M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_RSS_TCP_IPV6);
- break;
- case E1000_RXDADV_RSSTYPE_IPV6_EX:
- M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_RSS_IPV6_EX);
- break;
- case E1000_RXDADV_RSSTYPE_IPV6:
- M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_RSS_IPV6);
- break;
- case E1000_RXDADV_RSSTYPE_IPV6_TCP_EX:
- M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_RSS_TCP_IPV6_EX);
- break;
- /* XXX no UDP support in RSS just yet */
-#ifdef notyet
- case E1000_RXDADV_RSSTYPE_IPV4_UDP:
- case E1000_RXDADV_RSSTYPE_IPV6_UDP:
- case E1000_RXDADV_RSSTYPE_IPV6_UDP_EX:
-#endif
-
- default:
- /* XXX fallthrough */
+ /*
+ * In case of multiqueue, we have RXCSUM.PCSD bit set
+ * and never cleared. This means we have RSS hash
+ * available to be used.
+ */
+ if (adapter->num_queues > 1) {
+ rxr->fmp->m_pkthdr.flowid =
+ le32toh(cur->wb.lower.hi_dword.rss);
+ switch (pkt_info & E1000_RXDADV_RSSTYPE_MASK) {
+ case E1000_RXDADV_RSSTYPE_IPV4_TCP:
+ M_HASHTYPE_SET(rxr->fmp,
+ M_HASHTYPE_RSS_TCP_IPV4);
+ break;
+ case E1000_RXDADV_RSSTYPE_IPV4:
+ M_HASHTYPE_SET(rxr->fmp,
+ M_HASHTYPE_RSS_IPV4);
+ break;
+ case E1000_RXDADV_RSSTYPE_IPV6_TCP:
+ M_HASHTYPE_SET(rxr->fmp,
+ M_HASHTYPE_RSS_TCP_IPV6);
+ break;
+ case E1000_RXDADV_RSSTYPE_IPV6_EX:
+ M_HASHTYPE_SET(rxr->fmp,
+ M_HASHTYPE_RSS_IPV6_EX);
+ break;
+ case E1000_RXDADV_RSSTYPE_IPV6:
+ M_HASHTYPE_SET(rxr->fmp,
+ M_HASHTYPE_RSS_IPV6);
+ break;
+ case E1000_RXDADV_RSSTYPE_IPV6_TCP_EX:
+ M_HASHTYPE_SET(rxr->fmp,
+ M_HASHTYPE_RSS_TCP_IPV6_EX);
+ break;
+ default:
+ /* XXX fallthrough */
+ M_HASHTYPE_SET(rxr->fmp,
+ M_HASHTYPE_OPAQUE);
+ }
+ } else {
+#ifndef IGB_LEGACY_TX
+ rxr->fmp->m_pkthdr.flowid = que->msix;
M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_OPAQUE);
- }
-#elif !defined(IGB_LEGACY_TX)
- rxr->fmp->m_pkthdr.flowid = que->msix;
- M_HASHTYPE_SET(rxr->fmp, M_HASHTYPE_OPAQUE);
#endif
+ }
sendmp = rxr->fmp;
/* Make sure to set M_PKTHDR. */
sendmp->m_flags |= M_PKTHDR;

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 11, 10:37 AM (5 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29536214
Default Alt Text
D2296.id.diff (3 KB)

Event Timeline