cxgbe(4): Program the global RSS key once instead of once per ifnet.
MFC after: 3 days Sponsored by: Chelsio Communications
This commit is contained in:
parent
ba8c8a0ca2
commit
3128b167ed
@ -4223,6 +4223,10 @@ int
|
|||||||
adapter_full_init(struct adapter *sc)
|
adapter_full_init(struct adapter *sc)
|
||||||
{
|
{
|
||||||
int rc, i;
|
int rc, i;
|
||||||
|
#ifdef RSS
|
||||||
|
uint32_t raw_rss_key[RSS_KEYSIZE / sizeof(uint32_t)];
|
||||||
|
uint32_t rss_key[RSS_KEYSIZE / sizeof(uint32_t)];
|
||||||
|
#endif
|
||||||
|
|
||||||
ASSERT_SYNCHRONIZED_OP(sc);
|
ASSERT_SYNCHRONIZED_OP(sc);
|
||||||
ADAPTER_LOCK_ASSERT_NOTOWNED(sc);
|
ADAPTER_LOCK_ASSERT_NOTOWNED(sc);
|
||||||
@ -4248,6 +4252,14 @@ adapter_full_init(struct adapter *sc)
|
|||||||
taskqueue_start_threads(&sc->tq[i], 1, PI_NET, "%s tq%d",
|
taskqueue_start_threads(&sc->tq[i], 1, PI_NET, "%s tq%d",
|
||||||
device_get_nameunit(sc->dev), i);
|
device_get_nameunit(sc->dev), i);
|
||||||
}
|
}
|
||||||
|
#ifdef RSS
|
||||||
|
MPASS(RSS_KEYSIZE == 40);
|
||||||
|
rss_getkey((void *)&raw_rss_key[0]);
|
||||||
|
for (i = 0; i < nitems(rss_key); i++) {
|
||||||
|
rss_key[i] = htobe32(raw_rss_key[nitems(rss_key) - 1 - i]);
|
||||||
|
}
|
||||||
|
t4_write_rss_key(sc, &rss_key[0], -1);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!(sc->flags & IS_VF))
|
if (!(sc->flags & IS_VF))
|
||||||
t4_intr_enable(sc);
|
t4_intr_enable(sc);
|
||||||
@ -4355,8 +4367,6 @@ vi_full_init(struct vi_info *vi)
|
|||||||
int nbuckets = rss_getnumbuckets();
|
int nbuckets = rss_getnumbuckets();
|
||||||
int hashconfig = rss_gethashconfig();
|
int hashconfig = rss_gethashconfig();
|
||||||
int extra;
|
int extra;
|
||||||
uint32_t raw_rss_key[RSS_KEYSIZE / sizeof(uint32_t)];
|
|
||||||
uint32_t rss_key[RSS_KEYSIZE / sizeof(uint32_t)];
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ASSERT_SYNCHRONIZED_OP(sc);
|
ASSERT_SYNCHRONIZED_OP(sc);
|
||||||
@ -4386,17 +4396,10 @@ vi_full_init(struct vi_info *vi)
|
|||||||
vi->rss_size);
|
vi->rss_size);
|
||||||
}
|
}
|
||||||
#ifdef RSS
|
#ifdef RSS
|
||||||
MPASS(RSS_KEYSIZE == 40);
|
|
||||||
if (vi->nrxq != nbuckets) {
|
if (vi->nrxq != nbuckets) {
|
||||||
if_printf(ifp, "nrxq (%d) != kernel RSS buckets (%d);"
|
if_printf(ifp, "nrxq (%d) != kernel RSS buckets (%d);"
|
||||||
"performance will be impacted.\n", vi->nrxq, nbuckets);
|
"performance will be impacted.\n", vi->nrxq, nbuckets);
|
||||||
}
|
}
|
||||||
|
|
||||||
rss_getkey((void *)&raw_rss_key[0]);
|
|
||||||
for (i = 0; i < nitems(rss_key); i++) {
|
|
||||||
rss_key[i] = htobe32(raw_rss_key[nitems(rss_key) - 1 - i]);
|
|
||||||
}
|
|
||||||
t4_write_rss_key(sc, &rss_key[0], -1);
|
|
||||||
#endif
|
#endif
|
||||||
rss = malloc(vi->rss_size * sizeof (*rss), M_CXGBE, M_ZERO | M_WAITOK);
|
rss = malloc(vi->rss_size * sizeof (*rss), M_CXGBE, M_ZERO | M_WAITOK);
|
||||||
for (i = 0; i < vi->rss_size;) {
|
for (i = 0; i < vi->rss_size;) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user