svn commit: r259103 - head/sys/dev/cxgbe
Navdeep Parhar
np at FreeBSD.org
Sun Dec 8 17:47:39 UTC 2013
Author: np
Date: Sun Dec 8 17:47:37 2013
New Revision: 259103
URL: http://svnweb.freebsd.org/changeset/base/259103
Log:
cxgbe(4): save a copy of the RSS map for each port for the driver's use.
Modified:
head/sys/dev/cxgbe/adapter.h
head/sys/dev/cxgbe/t4_main.c
head/sys/dev/cxgbe/t4_sge.c
Modified: head/sys/dev/cxgbe/adapter.h
==============================================================================
--- head/sys/dev/cxgbe/adapter.h Sun Dec 8 15:25:19 2013 (r259102)
+++ head/sys/dev/cxgbe/adapter.h Sun Dec 8 17:47:37 2013 (r259103)
@@ -200,6 +200,7 @@ struct port_info {
unsigned long flags;
int if_flags;
+ uint16_t *rss;
uint16_t viid;
int16_t xact_addr_filt;/* index of exact MAC address filter */
uint16_t rss_size; /* size of VI's RSS table slice */
Modified: head/sys/dev/cxgbe/t4_main.c
==============================================================================
--- head/sys/dev/cxgbe/t4_main.c Sun Dec 8 15:25:19 2013 (r259102)
+++ head/sys/dev/cxgbe/t4_main.c Sun Dec 8 17:47:37 2013 (r259103)
@@ -3157,7 +3157,7 @@ port_full_init(struct port_info *pi)
struct ifnet *ifp = pi->ifp;
uint16_t *rss;
struct sge_rxq *rxq;
- int rc, i;
+ int rc, i, j;
ASSERT_SYNCHRONIZED_OP(sc);
KASSERT((pi->flags & PORT_INIT_DONE) == 0,
@@ -3174,21 +3174,25 @@ port_full_init(struct port_info *pi)
goto done; /* error message displayed already */
/*
- * Setup RSS for this port.
+ * Setup RSS for this port. Save a copy of the RSS table for later use.
*/
- rss = malloc(pi->nrxq * sizeof (*rss), M_CXGBE,
- M_ZERO | M_WAITOK);
- for_each_rxq(pi, i, rxq) {
- rss[i] = rxq->iq.abs_id;
+ rss = malloc(pi->rss_size * sizeof (*rss), M_CXGBE, M_ZERO | M_WAITOK);
+ for (i = 0; i < pi->rss_size;) {
+ for_each_rxq(pi, j, rxq) {
+ rss[i++] = rxq->iq.abs_id;
+ if (i == pi->rss_size)
+ break;
+ }
}
- rc = -t4_config_rss_range(sc, sc->mbox, pi->viid, 0,
- pi->rss_size, rss, pi->nrxq);
- free(rss, M_CXGBE);
+
+ rc = -t4_config_rss_range(sc, sc->mbox, pi->viid, 0, pi->rss_size, rss,
+ pi->rss_size);
if (rc != 0) {
if_printf(ifp, "rss_config failed: %d\n", rc);
goto done;
}
+ pi->rss = rss;
pi->flags |= PORT_INIT_DONE;
done:
if (rc != 0)
@@ -3237,6 +3241,7 @@ port_full_uninit(struct port_info *pi)
quiesce_fl(sc, &ofld_rxq->fl);
}
#endif
+ free(pi->rss, M_CXGBE);
}
t4_teardown_port_queues(pi);
Modified: head/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- head/sys/dev/cxgbe/t4_sge.c Sun Dec 8 15:25:19 2013 (r259102)
+++ head/sys/dev/cxgbe/t4_sge.c Sun Dec 8 17:47:37 2013 (r259103)
@@ -1678,7 +1678,7 @@ t4_eth_rx(struct sge_iq *iq, const struc
m0->m_pkthdr.rcvif = ifp;
m0->m_flags |= M_FLOWID;
- m0->m_pkthdr.flowid = rss->hash_val;
+ m0->m_pkthdr.flowid = be32toh(rss->hash_val);
if (cpl->csum_calc && !cpl->err_vec) {
if (ifp->if_capenable & IFCAP_RXCSUM &&
More information about the svn-src-head
mailing list