aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/cxgbe
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2020-05-02 23:46:29 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2020-05-02 23:46:29 +0000
commit49b6b60e2206b61e5492ae02d91b7ecd77cfc315 (patch)
treee7f1cd8dea0e6bb6a1ea77bc3257ade35e3654d4 /sys/dev/cxgbe
parentd90fe9d0cd75b01da101dc6a178f0593019c45b7 (diff)
downloadsrc-49b6b60e2206b61e5492ae02d91b7ecd77cfc315.tar.gz
src-49b6b60e2206b61e5492ae02d91b7ecd77cfc315.zip
Step 2.2:
o Shrink sglist(9) functions to work with multipage mbufs down from four functions to two. o Don't use 'struct mbuf_ext_pgs *' as argument, use struct mbuf. o Rename to something matching _epg. Reviewed by: gallatin Differential Revision: https://reviews.freebsd.org/D24598
Notes
Notes: svn path=/head/; revision=360574
Diffstat (limited to 'sys/dev/cxgbe')
-rw-r--r--sys/dev/cxgbe/crypto/t4_kern_tls.c6
-rw-r--r--sys/dev/cxgbe/t4_sge.c27
-rw-r--r--sys/dev/cxgbe/tom/t4_cpl_io.c6
3 files changed, 21 insertions, 18 deletions
diff --git a/sys/dev/cxgbe/crypto/t4_kern_tls.c b/sys/dev/cxgbe/crypto/t4_kern_tls.c
index 1d44b58b0dd3..1cc3e6ad2f1d 100644
--- a/sys/dev/cxgbe/crypto/t4_kern_tls.c
+++ b/sys/dev/cxgbe/crypto/t4_kern_tls.c
@@ -1064,7 +1064,7 @@ ktls_wr_len(struct tlspcb *tlsp, struct mbuf *m, struct mbuf *m_tls,
wr_len += roundup2(imm_len, 16);
/* TLS record payload via DSGL. */
- *nsegsp = sglist_count_ext_pgs(m_tls, ext_pgs->hdr_len + offset,
+ *nsegsp = sglist_count_mbuf_epg(m_tls, ext_pgs->hdr_len + offset,
plen - (ext_pgs->hdr_len + offset));
wr_len += ktls_sgl_size(*nsegsp);
@@ -1799,7 +1799,7 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq *txq,
/* Recalculate 'nsegs' if cached value is not available. */
if (nsegs == 0)
- nsegs = sglist_count_ext_pgs(m_tls, ext_pgs->hdr_len +
+ nsegs = sglist_count_mbuf_epg(m_tls, ext_pgs->hdr_len +
offset, plen - (ext_pgs->hdr_len + offset));
/* Calculate the size of the TLS work request. */
@@ -2067,7 +2067,7 @@ ktls_write_tls_wr(struct tlspcb *tlsp, struct sge_txq *txq,
/* SGL for record payload */
sglist_reset(txq->gl);
- if (sglist_append_ext_pgs(txq->gl, m_tls, ext_pgs->hdr_len + offset,
+ if (sglist_append_mbuf_epg(txq->gl, m_tls, ext_pgs->hdr_len + offset,
plen - (ext_pgs->hdr_len + offset)) != 0) {
#ifdef INVARIANTS
panic("%s: failed to append sglist", __func__);
diff --git a/sys/dev/cxgbe/t4_sge.c b/sys/dev/cxgbe/t4_sge.c
index 02891dc17751..739de819b61f 100644
--- a/sys/dev/cxgbe/t4_sge.c
+++ b/sys/dev/cxgbe/t4_sge.c
@@ -2413,23 +2413,21 @@ m_advance(struct mbuf **pm, int *poffset, int len)
static inline int
count_mbuf_ext_pgs(struct mbuf *m, int skip, vm_paddr_t *nextaddr)
{
- struct mbuf_ext_pgs *ext_pgs;
vm_paddr_t paddr;
int i, len, off, pglen, pgoff, seglen, segoff;
int nsegs = 0;
MBUF_EXT_PGS_ASSERT(m);
- ext_pgs = &m->m_ext_pgs;
off = mtod(m, vm_offset_t);
len = m->m_len;
off += skip;
len -= skip;
- if (ext_pgs->hdr_len != 0) {
- if (off >= ext_pgs->hdr_len) {
- off -= ext_pgs->hdr_len;
+ if (m->m_ext_pgs.hdr_len != 0) {
+ if (off >= m->m_ext_pgs.hdr_len) {
+ off -= m->m_ext_pgs.hdr_len;
} else {
- seglen = ext_pgs->hdr_len - off;
+ seglen = m->m_ext_pgs.hdr_len - off;
segoff = off;
seglen = min(seglen, len);
off = 0;
@@ -2441,9 +2439,9 @@ count_mbuf_ext_pgs(struct mbuf *m, int skip, vm_paddr_t *nextaddr)
*nextaddr = paddr + seglen;
}
}
- pgoff = ext_pgs->first_pg_off;
- for (i = 0; i < ext_pgs->npgs && len > 0; i++) {
- pglen = mbuf_ext_pg_len(ext_pgs, i, pgoff);
+ pgoff = m->m_ext_pgs.first_pg_off;
+ for (i = 0; i < m->m_ext_pgs.npgs && len > 0; i++) {
+ pglen = mbuf_ext_pg_len(&m->m_ext_pgs, i, pgoff);
if (off >= pglen) {
off -= pglen;
pgoff = 0;
@@ -2461,7 +2459,7 @@ count_mbuf_ext_pgs(struct mbuf *m, int skip, vm_paddr_t *nextaddr)
pgoff = 0;
};
if (len != 0) {
- seglen = min(len, ext_pgs->trail_len - off);
+ seglen = min(len, m->m_ext_pgs.trail_len - off);
len -= seglen;
paddr = pmap_kextract((vm_offset_t)&m->m_epg_trail[off]);
if (*nextaddr != paddr)
@@ -5838,9 +5836,12 @@ write_ethofld_wr(struct cxgbe_rate_tag *cst, struct fw_eth_tx_eo_wr *wr,
immhdrs -= m0->m_len;
continue;
}
-
- sglist_append(&sg, mtod(m0, char *) + immhdrs,
- m0->m_len - immhdrs);
+ if (m0->m_flags & M_NOMAP)
+ sglist_append_mbuf_epg(&sg, m0,
+ mtod(m0, vm_offset_t), m0->m_len);
+ else
+ sglist_append(&sg, mtod(m0, char *) + immhdrs,
+ m0->m_len - immhdrs);
immhdrs = 0;
}
MPASS(sg.sg_nseg == nsegs);
diff --git a/sys/dev/cxgbe/tom/t4_cpl_io.c b/sys/dev/cxgbe/tom/t4_cpl_io.c
index 043e6a111024..4f5506b551df 100644
--- a/sys/dev/cxgbe/tom/t4_cpl_io.c
+++ b/sys/dev/cxgbe/tom/t4_cpl_io.c
@@ -611,7 +611,8 @@ write_tx_sgl(void *dst, struct mbuf *start, struct mbuf *stop, int nsegs, int n)
i = -1;
for (m = start; m != stop; m = m->m_next) {
if (m->m_flags & M_NOMAP)
- rc = sglist_append_mb_ext_pgs(&sg, m);
+ rc = sglist_append_mbuf_epg(&sg, m,
+ mtod(m, vm_offset_t), m->m_len);
else
rc = sglist_append(&sg, mtod(m, void *), m->m_len);
if (__predict_false(rc != 0))
@@ -742,7 +743,8 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
break;
}
#endif
- n = sglist_count_mb_ext_pgs(m);
+ n = sglist_count_mbuf_epg(m,
+ mtod(m, vm_offset_t), m->m_len);
} else
n = sglist_count(mtod(m, void *), m->m_len);