mirror of
https://github.com/opnsense/src.git
synced 2026-05-25 02:35:01 -04:00
cxgbe: Add a struct sge_ofld_txq type.
This type mirrors struct sge_ofld_rxq and holds state for TCP offload
transmit queues. Currently it only holds a work queue but will
include additional state in future changes.
Sponsored by: Chelsio Communications
(cherry picked from commit 077ba6a845)
This commit is contained in:
parent
d6ee411d42
commit
4e4ec8a9cc
10 changed files with 107 additions and 60 deletions
|
|
@ -678,8 +678,8 @@ struct wrq_cookie {
|
|||
};
|
||||
|
||||
/*
|
||||
* wrq: SGE egress queue that is given prebuilt work requests. Both the control
|
||||
* and offload tx queues are of this type.
|
||||
* wrq: SGE egress queue that is given prebuilt work requests. Control queues
|
||||
* are of this type.
|
||||
*/
|
||||
struct sge_wrq {
|
||||
struct sge_eq eq; /* MUST be first */
|
||||
|
|
@ -713,6 +713,11 @@ struct sge_wrq {
|
|||
|
||||
} __aligned(CACHE_LINE_SIZE);
|
||||
|
||||
/* ofld_txq: SGE egress queue + miscellaneous items */
|
||||
struct sge_ofld_txq {
|
||||
struct sge_wrq wrq;
|
||||
} __aligned(CACHE_LINE_SIZE);
|
||||
|
||||
#define INVALID_NM_RXQ_CNTXT_ID ((uint16_t)(-1))
|
||||
struct sge_nm_rxq {
|
||||
/* Items used by the driver rx ithread are in this cacheline. */
|
||||
|
|
@ -793,7 +798,7 @@ struct sge {
|
|||
struct sge_wrq *ctrlq; /* Control queues */
|
||||
struct sge_txq *txq; /* NIC tx queues */
|
||||
struct sge_rxq *rxq; /* NIC rx queues */
|
||||
struct sge_wrq *ofld_txq; /* TOE tx queues */
|
||||
struct sge_ofld_txq *ofld_txq; /* TOE tx queues */
|
||||
struct sge_ofld_rxq *ofld_rxq; /* TOE rx queues */
|
||||
struct sge_nm_txq *nm_txq; /* netmap tx queues */
|
||||
struct sge_nm_rxq *nm_rxq; /* netmap rx queues */
|
||||
|
|
|
|||
|
|
@ -551,7 +551,7 @@ send_iscsi_flowc_wr(struct adapter *sc, struct toepcb *toep, int maxlen)
|
|||
|
||||
flowclen = sizeof(*flowc) + nparams * sizeof(struct fw_flowc_mnemval);
|
||||
|
||||
wr = alloc_wrqe(roundup2(flowclen, 16), toep->ofld_txq);
|
||||
wr = alloc_wrqe(roundup2(flowclen, 16), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX */
|
||||
panic("%s: allocation failure.", __func__);
|
||||
|
|
@ -843,8 +843,8 @@ no_ddp:
|
|||
goto no_ddp;
|
||||
}
|
||||
|
||||
rc = t4_write_page_pods_for_buf(sc, toep->ofld_txq, toep->tid, prsv,
|
||||
(vm_offset_t)csio->data_ptr, csio->dxfer_len);
|
||||
rc = t4_write_page_pods_for_buf(sc, &toep->ofld_txq->wrq, toep->tid,
|
||||
prsv, (vm_offset_t)csio->data_ptr, csio->dxfer_len);
|
||||
if (rc != 0) {
|
||||
t4_free_page_pods(prsv);
|
||||
uma_zfree(prsv_zone, prsv);
|
||||
|
|
@ -957,8 +957,8 @@ no_ddp:
|
|||
goto no_ddp;
|
||||
}
|
||||
|
||||
rc = t4_write_page_pods_for_buf(sc, toep->ofld_txq, toep->tid,
|
||||
prsv, buf, xferlen);
|
||||
rc = t4_write_page_pods_for_buf(sc, &toep->ofld_txq->wrq,
|
||||
toep->tid, prsv, buf, xferlen);
|
||||
if (rc != 0) {
|
||||
t4_free_page_pods(prsv);
|
||||
uma_zfree(prsv_zone, prsv);
|
||||
|
|
|
|||
|
|
@ -1127,7 +1127,7 @@ static void post_terminate(struct c4iw_qp *qhp, struct t4_cqe *err_cqe,
|
|||
CTR4(KTR_IW_CXGBE, "%s qhp %p qid 0x%x tid %u", __func__, qhp,
|
||||
qhp->wq.sq.qid, qhp->ep->hwtid);
|
||||
|
||||
wr = alloc_wrqe(sizeof(*wqe), toep->ofld_txq);
|
||||
wr = alloc_wrqe(sizeof(*wqe), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL)
|
||||
return;
|
||||
wqe = wrtod(wr);
|
||||
|
|
@ -1259,7 +1259,7 @@ rdma_fini(struct c4iw_dev *rhp, struct c4iw_qp *qhp, struct c4iw_ep *ep)
|
|||
CTR5(KTR_IW_CXGBE, "%s qhp %p qid 0x%x ep %p tid %u", __func__, qhp,
|
||||
qhp->wq.sq.qid, ep, ep->hwtid);
|
||||
|
||||
wr = alloc_wrqe(sizeof(*wqe), toep->ofld_txq);
|
||||
wr = alloc_wrqe(sizeof(*wqe), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL)
|
||||
return (0);
|
||||
wqe = wrtod(wr);
|
||||
|
|
@ -1353,7 +1353,7 @@ static int rdma_init(struct c4iw_dev *rhp, struct c4iw_qp *qhp)
|
|||
CTR5(KTR_IW_CXGBE, "%s qhp %p qid 0x%x ep %p tid %u", __func__, qhp,
|
||||
qhp->wq.sq.qid, ep, ep->hwtid);
|
||||
|
||||
wr = alloc_wrqe(sizeof(*wqe), toep->ofld_txq);
|
||||
wr = alloc_wrqe(sizeof(*wqe), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL)
|
||||
return (0);
|
||||
wqe = wrtod(wr);
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ struct cxgbe_rate_tag {
|
|||
int etid;
|
||||
struct mbufq pending_tx, pending_fwack;
|
||||
int plen;
|
||||
struct sge_wrq *eo_txq;
|
||||
struct sge_ofld_txq *eo_txq;
|
||||
uint32_t ctrl0;
|
||||
uint16_t iqid;
|
||||
int8_t schedcl;
|
||||
|
|
|
|||
|
|
@ -1331,7 +1331,7 @@ t4_attach(device_t dev)
|
|||
s->nofldtxq += nports * (num_vis - 1) * iaq.nofldtxq_vi;
|
||||
s->neq += s->nofldtxq;
|
||||
|
||||
s->ofld_txq = malloc(s->nofldtxq * sizeof(struct sge_wrq),
|
||||
s->ofld_txq = malloc(s->nofldtxq * sizeof(struct sge_ofld_txq),
|
||||
M_CXGBE, M_ZERO | M_WAITOK);
|
||||
}
|
||||
#endif
|
||||
|
|
@ -6085,7 +6085,7 @@ vi_full_uninit(struct vi_info *vi)
|
|||
struct sge_ofld_rxq *ofld_rxq;
|
||||
#endif
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
struct sge_wrq *ofld_txq;
|
||||
struct sge_ofld_txq *ofld_txq;
|
||||
#endif
|
||||
|
||||
if (vi->flags & VI_INIT_DONE) {
|
||||
|
|
@ -6102,7 +6102,7 @@ vi_full_uninit(struct vi_info *vi)
|
|||
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
for_each_ofld_txq(vi, i, ofld_txq) {
|
||||
quiesce_wrq(sc, ofld_txq);
|
||||
quiesce_wrq(sc, &ofld_txq->wrq);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -10653,6 +10653,9 @@ clear_stats(struct adapter *sc, u_int port_id)
|
|||
struct sge_rxq *rxq;
|
||||
struct sge_txq *txq;
|
||||
struct sge_wrq *wrq;
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
struct sge_ofld_txq *ofld_txq;
|
||||
#endif
|
||||
#ifdef TCP_OFFLOAD
|
||||
struct sge_ofld_rxq *ofld_rxq;
|
||||
#endif
|
||||
|
|
@ -10740,9 +10743,9 @@ clear_stats(struct adapter *sc, u_int port_id)
|
|||
}
|
||||
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
for_each_ofld_txq(vi, i, wrq) {
|
||||
wrq->tx_wrs_direct = 0;
|
||||
wrq->tx_wrs_copied = 0;
|
||||
for_each_ofld_txq(vi, i, ofld_txq) {
|
||||
ofld_txq->wrq.tx_wrs_direct = 0;
|
||||
ofld_txq->wrq.tx_wrs_copied = 0;
|
||||
}
|
||||
#endif
|
||||
#ifdef TCP_OFFLOAD
|
||||
|
|
|
|||
|
|
@ -270,6 +270,11 @@ static int free_wrq(struct adapter *, struct sge_wrq *);
|
|||
static int alloc_txq(struct vi_info *, struct sge_txq *, int,
|
||||
struct sysctl_oid *);
|
||||
static int free_txq(struct vi_info *, struct sge_txq *);
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
static int alloc_ofld_txq(struct vi_info *, struct sge_ofld_txq *, int,
|
||||
struct sysctl_oid *);
|
||||
static int free_ofld_txq(struct vi_info *, struct sge_ofld_txq *);
|
||||
#endif
|
||||
static void oneseg_dma_callback(void *, bus_dma_segment_t *, int, int);
|
||||
static inline void ring_fl_db(struct adapter *, struct sge_fl *);
|
||||
static int refill_fl(struct adapter *, struct sge_fl *, int);
|
||||
|
|
@ -1099,7 +1104,7 @@ t4_setup_vi_queues(struct vi_info *vi)
|
|||
struct sge_ofld_rxq *ofld_rxq;
|
||||
#endif
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
struct sge_wrq *ofld_txq;
|
||||
struct sge_ofld_txq *ofld_txq;
|
||||
#endif
|
||||
#ifdef DEV_NETMAP
|
||||
int saved_idx;
|
||||
|
|
@ -1218,26 +1223,20 @@ t4_setup_vi_queues(struct vi_info *vi)
|
|||
oid = SYSCTL_ADD_NODE(&vi->ctx, children, OID_AUTO, "ofld_txq",
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "tx queues for TOE/ETHOFLD");
|
||||
for_each_ofld_txq(vi, i, ofld_txq) {
|
||||
struct sysctl_oid *oid2;
|
||||
|
||||
snprintf(name, sizeof(name), "%s ofld_txq%d",
|
||||
device_get_nameunit(vi->dev), i);
|
||||
if (vi->nofldrxq > 0) {
|
||||
iqidx = vi->first_ofld_rxq + (i % vi->nofldrxq);
|
||||
init_eq(sc, &ofld_txq->eq, EQ_OFLD, vi->qsize_txq,
|
||||
init_eq(sc, &ofld_txq->wrq.eq, EQ_OFLD, vi->qsize_txq,
|
||||
pi->tx_chan, sc->sge.ofld_rxq[iqidx].iq.cntxt_id,
|
||||
name);
|
||||
} else {
|
||||
iqidx = vi->first_rxq + (i % vi->nrxq);
|
||||
init_eq(sc, &ofld_txq->eq, EQ_OFLD, vi->qsize_txq,
|
||||
init_eq(sc, &ofld_txq->wrq.eq, EQ_OFLD, vi->qsize_txq,
|
||||
pi->tx_chan, sc->sge.rxq[iqidx].iq.cntxt_id, name);
|
||||
}
|
||||
|
||||
snprintf(name, sizeof(name), "%d", i);
|
||||
oid2 = SYSCTL_ADD_NODE(&vi->ctx, SYSCTL_CHILDREN(oid), OID_AUTO,
|
||||
name, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "offload tx queue");
|
||||
|
||||
rc = alloc_wrq(sc, vi, ofld_txq, oid2);
|
||||
rc = alloc_ofld_txq(vi, ofld_txq, i, oid);
|
||||
if (rc != 0)
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -1259,9 +1258,7 @@ t4_teardown_vi_queues(struct vi_info *vi)
|
|||
struct sge_rxq *rxq;
|
||||
struct sge_txq *txq;
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
struct port_info *pi = vi->pi;
|
||||
struct adapter *sc = pi->adapter;
|
||||
struct sge_wrq *ofld_txq;
|
||||
struct sge_ofld_txq *ofld_txq;
|
||||
#endif
|
||||
#ifdef TCP_OFFLOAD
|
||||
struct sge_ofld_rxq *ofld_rxq;
|
||||
|
|
@ -1299,7 +1296,7 @@ t4_teardown_vi_queues(struct vi_info *vi)
|
|||
}
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
for_each_ofld_txq(vi, i, ofld_txq) {
|
||||
free_wrq(sc, ofld_txq);
|
||||
free_ofld_txq(vi, ofld_txq);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -4480,6 +4477,44 @@ free_txq(struct vi_info *vi, struct sge_txq *txq)
|
|||
return (0);
|
||||
}
|
||||
|
||||
#if defined(TCP_OFFLOAD) || defined(RATELIMIT)
|
||||
static int
|
||||
alloc_ofld_txq(struct vi_info *vi, struct sge_ofld_txq *ofld_txq, int idx,
|
||||
struct sysctl_oid *oid)
|
||||
{
|
||||
struct adapter *sc = vi->adapter;
|
||||
struct sysctl_oid_list *children;
|
||||
char name[16];
|
||||
int rc;
|
||||
|
||||
children = SYSCTL_CHILDREN(oid);
|
||||
|
||||
snprintf(name, sizeof(name), "%d", idx);
|
||||
oid = SYSCTL_ADD_NODE(&vi->ctx, children, OID_AUTO, name,
|
||||
CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "offload tx queue");
|
||||
|
||||
rc = alloc_wrq(sc, vi, &ofld_txq->wrq, oid);
|
||||
if (rc != 0)
|
||||
return (rc);
|
||||
|
||||
return (rc);
|
||||
}
|
||||
|
||||
static int
|
||||
free_ofld_txq(struct vi_info *vi, struct sge_ofld_txq *ofld_txq)
|
||||
{
|
||||
struct adapter *sc = vi->adapter;
|
||||
int rc;
|
||||
|
||||
rc = free_wrq(sc, &ofld_txq->wrq);
|
||||
if (rc != 0)
|
||||
return (rc);
|
||||
|
||||
bzero(ofld_txq, sizeof(*ofld_txq));
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
oneseg_dma_callback(void *arg, bus_dma_segment_t *segs, int nseg, int error)
|
||||
{
|
||||
|
|
@ -6115,7 +6150,7 @@ send_etid_flowc_wr(struct cxgbe_rate_tag *cst, struct port_info *pi,
|
|||
MPASS((cst->flags & (EO_FLOWC_PENDING | EO_FLOWC_RPL_PENDING)) ==
|
||||
EO_FLOWC_PENDING);
|
||||
|
||||
flowc = start_wrq_wr(cst->eo_txq, ETID_FLOWC_LEN16, &cookie);
|
||||
flowc = start_wrq_wr(&cst->eo_txq->wrq, ETID_FLOWC_LEN16, &cookie);
|
||||
if (__predict_false(flowc == NULL))
|
||||
return (ENOMEM);
|
||||
|
||||
|
|
@ -6137,7 +6172,7 @@ send_etid_flowc_wr(struct cxgbe_rate_tag *cst, struct port_info *pi,
|
|||
flowc->mnemval[5].mnemonic = FW_FLOWC_MNEM_SCHEDCLASS;
|
||||
flowc->mnemval[5].val = htobe32(cst->schedcl);
|
||||
|
||||
commit_wrq_wr(cst->eo_txq, flowc, &cookie);
|
||||
commit_wrq_wr(&cst->eo_txq->wrq, flowc, &cookie);
|
||||
|
||||
cst->flags &= ~EO_FLOWC_PENDING;
|
||||
cst->flags |= EO_FLOWC_RPL_PENDING;
|
||||
|
|
@ -6157,7 +6192,7 @@ send_etid_flush_wr(struct cxgbe_rate_tag *cst)
|
|||
|
||||
mtx_assert(&cst->lock, MA_OWNED);
|
||||
|
||||
flowc = start_wrq_wr(cst->eo_txq, ETID_FLUSH_LEN16, &cookie);
|
||||
flowc = start_wrq_wr(&cst->eo_txq->wrq, ETID_FLUSH_LEN16, &cookie);
|
||||
if (__predict_false(flowc == NULL))
|
||||
CXGBE_UNIMPLEMENTED(__func__);
|
||||
|
||||
|
|
@ -6167,7 +6202,7 @@ send_etid_flush_wr(struct cxgbe_rate_tag *cst)
|
|||
flowc->flowid_len16 = htobe32(V_FW_WR_LEN16(ETID_FLUSH_LEN16) |
|
||||
V_FW_WR_FLOWID(cst->etid));
|
||||
|
||||
commit_wrq_wr(cst->eo_txq, flowc, &cookie);
|
||||
commit_wrq_wr(&cst->eo_txq->wrq, flowc, &cookie);
|
||||
|
||||
cst->flags |= EO_FLUSH_RPL_PENDING;
|
||||
MPASS(cst->tx_credits >= ETID_FLUSH_LEN16);
|
||||
|
|
@ -6352,7 +6387,7 @@ ethofld_tx(struct cxgbe_rate_tag *cst)
|
|||
MPASS(cst->ncompl > 0);
|
||||
return;
|
||||
}
|
||||
wr = start_wrq_wr(cst->eo_txq, next_credits, &cookie);
|
||||
wr = start_wrq_wr(&cst->eo_txq->wrq, next_credits, &cookie);
|
||||
if (__predict_false(wr == NULL)) {
|
||||
/* XXX: wishful thinking, not a real assertion. */
|
||||
MPASS(cst->ncompl > 0);
|
||||
|
|
@ -6363,7 +6398,7 @@ ethofld_tx(struct cxgbe_rate_tag *cst)
|
|||
compl = cst->ncompl == 0 || cst->tx_nocompl >= cst->tx_total / 2;
|
||||
ETHER_BPF_MTAP(cst->com.ifp, m);
|
||||
write_ethofld_wr(cst, wr, m, compl);
|
||||
commit_wrq_wr(cst->eo_txq, wr, &cookie);
|
||||
commit_wrq_wr(&cst->eo_txq->wrq, wr, &cookie);
|
||||
if (compl) {
|
||||
cst->ncompl++;
|
||||
cst->tx_nocompl = 0;
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ send_flowc_wr(struct toepcb *toep, struct tcpcb *tp)
|
|||
|
||||
flowclen = sizeof(*flowc) + nparams * sizeof(struct fw_flowc_mnemval);
|
||||
|
||||
wr = alloc_wrqe(roundup2(flowclen, 16), toep->ofld_txq);
|
||||
wr = alloc_wrqe(roundup2(flowclen, 16), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX */
|
||||
panic("%s: allocation failure.", __func__);
|
||||
|
|
@ -202,7 +202,8 @@ update_tx_rate_limit(struct adapter *sc, struct toepcb *toep, u_int Bps)
|
|||
fw_flowc_mnemval);
|
||||
flowclen16 = howmany(flowclen, 16);
|
||||
if (toep->tx_credits < flowclen16 || toep->txsd_avail == 0 ||
|
||||
(wr = alloc_wrqe(roundup2(flowclen, 16), toep->ofld_txq)) == NULL) {
|
||||
(wr = alloc_wrqe(roundup2(flowclen, 16),
|
||||
&toep->ofld_txq->wrq)) == NULL) {
|
||||
if (tc_idx >= 0)
|
||||
t4_release_cl_rl(sc, port_id, tc_idx);
|
||||
return (ENOMEM);
|
||||
|
|
@ -266,7 +267,7 @@ send_reset(struct adapter *sc, struct toepcb *toep, uint32_t snd_nxt)
|
|||
KASSERT(toep->flags & TPF_FLOWC_WR_SENT,
|
||||
("%s: flowc_wr not sent for tid %d.", __func__, tid));
|
||||
|
||||
wr = alloc_wrqe(sizeof(*req), toep->ofld_txq);
|
||||
wr = alloc_wrqe(sizeof(*req), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX */
|
||||
panic("%s: allocation failure.", __func__);
|
||||
|
|
@ -491,7 +492,7 @@ t4_close_conn(struct adapter *sc, struct toepcb *toep)
|
|||
KASSERT(toep->flags & TPF_FLOWC_WR_SENT,
|
||||
("%s: flowc_wr not sent for tid %u.", __func__, tid));
|
||||
|
||||
wr = alloc_wrqe(sizeof(*req), toep->ofld_txq);
|
||||
wr = alloc_wrqe(sizeof(*req), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX */
|
||||
panic("%s: allocation failure.", __func__);
|
||||
|
|
@ -823,7 +824,7 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
|
|||
/* Immediate data tx */
|
||||
|
||||
wr = alloc_wrqe(roundup2(sizeof(*txwr) + plen, 16),
|
||||
toep->ofld_txq);
|
||||
&toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX: how will we recover from this? */
|
||||
toep->flags |= TPF_TX_SUSPENDED;
|
||||
|
|
@ -841,7 +842,8 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
|
|||
|
||||
wr_len = sizeof(*txwr) + sizeof(struct ulptx_sgl) +
|
||||
((3 * (nsegs - 1)) / 2 + ((nsegs - 1) & 1)) * 8;
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16), toep->ofld_txq);
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16),
|
||||
&toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX: how will we recover from this? */
|
||||
toep->flags |= TPF_TX_SUSPENDED;
|
||||
|
|
@ -1018,7 +1020,7 @@ t4_push_pdus(struct adapter *sc, struct toepcb *toep, int drop)
|
|||
/* Immediate data tx */
|
||||
|
||||
wr = alloc_wrqe(roundup2(sizeof(*txwr) + plen, 16),
|
||||
toep->ofld_txq);
|
||||
&toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX: how will we recover from this? */
|
||||
toep->flags |= TPF_TX_SUSPENDED;
|
||||
|
|
@ -1036,7 +1038,8 @@ t4_push_pdus(struct adapter *sc, struct toepcb *toep, int drop)
|
|||
/* DSGL tx */
|
||||
wr_len = sizeof(*txwr) + sizeof(struct ulptx_sgl) +
|
||||
((3 * (nsegs - 1)) / 2 + ((nsegs - 1) & 1)) * 8;
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16), toep->ofld_txq);
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16),
|
||||
&toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX: how will we recover from this? */
|
||||
toep->flags |= TPF_TX_SUSPENDED;
|
||||
|
|
@ -1351,13 +1354,13 @@ done:
|
|||
}
|
||||
|
||||
void
|
||||
send_abort_rpl(struct adapter *sc, struct sge_wrq *ofld_txq, int tid,
|
||||
send_abort_rpl(struct adapter *sc, struct sge_ofld_txq *ofld_txq, int tid,
|
||||
int rst_status)
|
||||
{
|
||||
struct wrqe *wr;
|
||||
struct cpl_abort_rpl *cpl;
|
||||
|
||||
wr = alloc_wrqe(sizeof(*cpl), ofld_txq);
|
||||
wr = alloc_wrqe(sizeof(*cpl), &ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX */
|
||||
panic("%s: allocation failure.", __func__);
|
||||
|
|
@ -1397,7 +1400,7 @@ do_abort_req(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m)
|
|||
const struct cpl_abort_req_rss *cpl = (const void *)(rss + 1);
|
||||
unsigned int tid = GET_TID(cpl);
|
||||
struct toepcb *toep = lookup_tid(sc, tid);
|
||||
struct sge_wrq *ofld_txq = toep->ofld_txq;
|
||||
struct sge_ofld_txq *ofld_txq = toep->ofld_txq;
|
||||
struct inpcb *inp;
|
||||
struct tcpcb *tp;
|
||||
struct epoch_tracker et;
|
||||
|
|
|
|||
|
|
@ -350,7 +350,7 @@ send_flowc_wr_synqe(struct adapter *sc, struct synq_entry *synqe)
|
|||
struct port_info *pi = vi->pi;
|
||||
struct wrqe *wr;
|
||||
struct fw_flowc_wr *flowc;
|
||||
struct sge_wrq *ofld_txq;
|
||||
struct sge_ofld_txq *ofld_txq;
|
||||
struct sge_ofld_rxq *ofld_rxq;
|
||||
const int nparams = 6;
|
||||
const int flowclen = sizeof(*flowc) + nparams * sizeof(struct fw_flowc_mnemval);
|
||||
|
|
@ -362,7 +362,7 @@ send_flowc_wr_synqe(struct adapter *sc, struct synq_entry *synqe)
|
|||
ofld_txq = &sc->sge.ofld_txq[synqe->params.txq_idx];
|
||||
ofld_rxq = &sc->sge.ofld_rxq[synqe->params.rxq_idx];
|
||||
|
||||
wr = alloc_wrqe(roundup2(flowclen, 16), ofld_txq);
|
||||
wr = alloc_wrqe(roundup2(flowclen, 16), &ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX */
|
||||
panic("%s: allocation failure.", __func__);
|
||||
|
|
@ -411,7 +411,8 @@ send_abort_rpl_synqe(struct toedev *tod, struct synq_entry *synqe,
|
|||
if (!(synqe->flags & TPF_FLOWC_WR_SENT))
|
||||
send_flowc_wr_synqe(sc, synqe);
|
||||
|
||||
wr = alloc_wrqe(sizeof(*req), &sc->sge.ofld_txq[synqe->params.txq_idx]);
|
||||
wr = alloc_wrqe(sizeof(*req),
|
||||
&sc->sge.ofld_txq[synqe->params.txq_idx].wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX */
|
||||
panic("%s: allocation failure.", __func__);
|
||||
|
|
@ -885,7 +886,7 @@ do_abort_req_synqe(struct sge_iq *iq, const struct rss_header *rss,
|
|||
struct synq_entry *synqe = lookup_tid(sc, tid);
|
||||
struct listen_ctx *lctx = synqe->lctx;
|
||||
struct inpcb *inp = lctx->inp;
|
||||
struct sge_wrq *ofld_txq;
|
||||
struct sge_ofld_txq *ofld_txq;
|
||||
#ifdef INVARIANTS
|
||||
unsigned int opcode = G_CPL_OPCODE(be32toh(OPCODE_TID(cpl)));
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ t4_set_tls_tcb_field(struct toepcb *toep, uint16_t word, uint64_t mask,
|
|||
{
|
||||
struct adapter *sc = td_adapter(toep->td);
|
||||
|
||||
t4_set_tcb_field(sc, toep->ofld_txq, toep, word, mask, val, 0, 0);
|
||||
t4_set_tcb_field(sc, &toep->ofld_txq->wrq, toep, word, mask, val, 0, 0);
|
||||
}
|
||||
|
||||
/* TLS and DTLS common routines */
|
||||
|
|
@ -518,7 +518,7 @@ tls_program_key_id(struct toepcb *toep, struct tls_key_context *k_ctx)
|
|||
keyid = get_keyid(tls_ofld, k_ctx->l_p_key);
|
||||
}
|
||||
|
||||
wr = alloc_wrqe(len, toep->ofld_txq);
|
||||
wr = alloc_wrqe(len, &toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
free_keyid(toep, keyid);
|
||||
return (ENOMEM);
|
||||
|
|
@ -1596,7 +1596,7 @@ t4_push_tls_records(struct adapter *sc, struct toepcb *toep, int drop)
|
|||
((3 * (nsegs - 1)) / 2 + ((nsegs - 1) & 1)) * 8;
|
||||
}
|
||||
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16), toep->ofld_txq);
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX: how will we recover from this? */
|
||||
toep->flags |= TPF_TX_SUSPENDED;
|
||||
|
|
@ -1907,7 +1907,7 @@ t4_push_ktls(struct adapter *sc, struct toepcb *toep, int drop)
|
|||
if (__predict_false(toep->flags & TPF_FIN_SENT))
|
||||
panic("%s: excess tx.", __func__);
|
||||
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16), toep->ofld_txq);
|
||||
wr = alloc_wrqe(roundup2(wr_len, 16), &toep->ofld_txq->wrq);
|
||||
if (wr == NULL) {
|
||||
/* XXX: how will we recover from this? */
|
||||
toep->flags |= TPF_TX_SUSPENDED;
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ struct toepcb {
|
|||
int refcount;
|
||||
struct vnet *vnet;
|
||||
struct vi_info *vi; /* virtual interface */
|
||||
struct sge_wrq *ofld_txq;
|
||||
struct sge_ofld_txq *ofld_txq;
|
||||
struct sge_ofld_rxq *ofld_rxq;
|
||||
struct sge_wrq *ctrlq;
|
||||
struct l2t_entry *l2te; /* L2 table entry used by this connection */
|
||||
|
|
@ -396,7 +396,7 @@ void aiotx_init_toep(struct toepcb *);
|
|||
int t4_aio_queue_aiotx(struct socket *, struct kaiocb *);
|
||||
void t4_init_cpl_io_handlers(void);
|
||||
void t4_uninit_cpl_io_handlers(void);
|
||||
void send_abort_rpl(struct adapter *, struct sge_wrq *, int , int);
|
||||
void send_abort_rpl(struct adapter *, struct sge_ofld_txq *, int , int);
|
||||
void send_flowc_wr(struct toepcb *, struct tcpcb *);
|
||||
void send_reset(struct adapter *, struct toepcb *, uint32_t);
|
||||
int send_rx_credits(struct adapter *, struct toepcb *, int);
|
||||
|
|
@ -422,7 +422,7 @@ int t4_alloc_page_pods_for_buf(struct ppod_region *, vm_offset_t, int,
|
|||
struct ppod_reservation *);
|
||||
int t4_write_page_pods_for_ps(struct adapter *, struct sge_wrq *, int,
|
||||
struct pageset *);
|
||||
int t4_write_page_pods_for_buf(struct adapter *, struct sge_wrq *, int tid,
|
||||
int t4_write_page_pods_for_buf(struct adapter *, struct sge_wrq *, int,
|
||||
struct ppod_reservation *, vm_offset_t, int);
|
||||
void t4_free_page_pods(struct ppod_reservation *);
|
||||
int t4_soreceive_ddp(struct socket *, struct sockaddr **, struct uio *,
|
||||
|
|
|
|||
Loading…
Reference in a new issue