svn commit: r357475 - head/sys/dev/cxgbe
Navdeep Parhar
np at FreeBSD.org
Mon Feb 3 23:25:12 UTC 2020
Author: np
Date: Mon Feb 3 23:25:12 2020
New Revision: 357475
URL: https://svnweb.freebsd.org/changeset/base/357475
Log:
cxgbe(4): Initialize the rx buffer's metadata on first-use and not on
allocation.
refill_fl doesn't touch any part of a freshly allocated cluster after
this change.
MFC after: 1 week
Sponsored by: Chelsio Communications
Modified:
head/sys/dev/cxgbe/adapter.h
head/sys/dev/cxgbe/t4_sge.c
Modified: head/sys/dev/cxgbe/adapter.h
==============================================================================
--- head/sys/dev/cxgbe/adapter.h Mon Feb 3 23:06:42 2020 (r357474)
+++ head/sys/dev/cxgbe/adapter.h Mon Feb 3 23:25:12 2020 (r357475)
@@ -327,7 +327,6 @@ struct cluster_layout {
struct cluster_metadata {
u_int refcount;
- struct fl_sdesc *sd; /* For debug only. Could easily be stale */
};
struct fl_sdesc {
Modified: head/sys/dev/cxgbe/t4_sge.c
==============================================================================
--- head/sys/dev/cxgbe/t4_sge.c Mon Feb 3 23:06:42 2020 (r357474)
+++ head/sys/dev/cxgbe/t4_sge.c Mon Feb 3 23:25:12 2020 (r357475)
@@ -1872,11 +1872,12 @@ get_scatter_segment(struct adapter *sc, struct sge_fl
fr_offset == 0 ? M_PKTHDR | M_NOFREE : M_NOFREE))
return (NULL);
fl->mbuf_inlined++;
+ if (sd->nmbuf++ == 0) {
+ clm->refcount = 1;
+ counter_u64_add(extfree_refs, 1);
+ }
m_extaddref(m, payload, blen, &clm->refcount, rxb_free,
swz->zone, sd->cl);
- if (sd->nmbuf++ == 0)
- counter_u64_add(extfree_refs, 1);
-
} else {
/*
@@ -1890,10 +1891,12 @@ get_scatter_segment(struct adapter *sc, struct sge_fl
return (NULL);
fl->mbuf_allocated++;
if (clm != NULL) {
+ if (sd->nmbuf++ == 0) {
+ clm->refcount = 1;
+ counter_u64_add(extfree_refs, 1);
+ }
m_extaddref(m, payload, blen, &clm->refcount,
rxb_free, swz->zone, sd->cl);
- if (sd->nmbuf++ == 0)
- counter_u64_add(extfree_refs, 1);
} else {
m_cljset(m, sd->cl, swz->type);
sd->cl = NULL; /* consumed, not a recycle candidate */
@@ -4401,7 +4404,7 @@ refill_fl(struct adapter *sc, struct sge_fl *fl, int n
if (clm != NULL)
MPASS(clm->refcount == 1);
#endif
- goto recycled_fast;
+ goto recycled;
}
/*
@@ -4440,16 +4443,8 @@ alloc:
sd->cl = cl;
sd->cll = *cll;
*d = htobe64(pa | cll->hwidx);
- clm = cl_metadata(sc, fl, cll, cl);
- if (clm != NULL) {
recycled:
-#ifdef INVARIANTS
- clm->sd = sd;
-#endif
- clm->refcount = 1;
- }
sd->nmbuf = 0;
-recycled_fast:
d++;
sd++;
if (__predict_false(++fl->pidx % 8 == 0)) {
More information about the svn-src-all
mailing list