Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/cxgbe/tom/t4_cpl_io.c
Show First 20 Lines • Show All 660 Lines • ▼ Show 20 Lines | write_tx_sgl(void *dst, struct mbuf *start, struct mbuf *stop, int nsegs, int n) | ||||
usgl->cmd_nsge = htobe32(V_ULPTX_CMD(ULP_TX_SC_DSGL) | | usgl->cmd_nsge = htobe32(V_ULPTX_CMD(ULP_TX_SC_DSGL) | | ||||
V_ULPTX_NSGE(nsegs)); | V_ULPTX_NSGE(nsegs)); | ||||
i = -1; | i = -1; | ||||
for (m = start; m != stop; m = m->m_next) { | for (m = start; m != stop; m = m->m_next) { | ||||
if (IS_AIOTX_MBUF(m)) | if (IS_AIOTX_MBUF(m)) | ||||
rc = sglist_append_vmpages(&sg, aiotx_mbuf_pages(m), | rc = sglist_append_vmpages(&sg, aiotx_mbuf_pages(m), | ||||
aiotx_mbuf_pgoff(m), m->m_len); | aiotx_mbuf_pgoff(m), m->m_len); | ||||
else if (m->m_flags & M_NOMAP) | |||||
rc = sglist_append_mb_ext_pgs(&sg, m); | |||||
else | else | ||||
rc = sglist_append(&sg, mtod(m, void *), m->m_len); | rc = sglist_append(&sg, mtod(m, void *), m->m_len); | ||||
if (__predict_false(rc != 0)) | if (__predict_false(rc != 0)) | ||||
panic("%s: sglist_append %d", __func__, rc); | panic("%s: sglist_append %d", __func__, rc); | ||||
for (j = 0; j < sg.sg_nseg; i++, j++) { | for (j = 0; j < sg.sg_nseg; i++, j++) { | ||||
if (i < 0) { | if (i < 0) { | ||||
usgl->len0 = htobe32(segs[j].ss_len); | usgl->len0 = htobe32(segs[j].ss_len); | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | do { | ||||
max_nsegs_1mbuf = 0; /* max # of SGL segments in any one mbuf */ | max_nsegs_1mbuf = 0; /* max # of SGL segments in any one mbuf */ | ||||
aiotx_mbuf_seen = false; | aiotx_mbuf_seen = false; | ||||
for (m = sndptr; m != NULL; m = m->m_next) { | for (m = sndptr; m != NULL; m = m->m_next) { | ||||
int n; | int n; | ||||
if (IS_AIOTX_MBUF(m)) | if (IS_AIOTX_MBUF(m)) | ||||
n = sglist_count_vmpages(aiotx_mbuf_pages(m), | n = sglist_count_vmpages(aiotx_mbuf_pages(m), | ||||
aiotx_mbuf_pgoff(m), m->m_len); | aiotx_mbuf_pgoff(m), m->m_len); | ||||
else if (m->m_flags & M_NOMAP) | |||||
n = sglist_count_mb_ext_pgs(m); | |||||
else | else | ||||
n = sglist_count(mtod(m, void *), m->m_len); | n = sglist_count(mtod(m, void *), m->m_len); | ||||
nsegs += n; | nsegs += n; | ||||
plen += m->m_len; | plen += m->m_len; | ||||
/* This mbuf sent us _over_ the nsegs limit, back out */ | /* This mbuf sent us _over_ the nsegs limit, back out */ | ||||
if (plen > max_imm && nsegs > max_nsegs) { | if (plen > max_imm && nsegs > max_nsegs) { | ||||
▲ Show 20 Lines • Show All 1,529 Lines • Show Last 20 Lines |