iflib: netmap: add support for partial ring openings
Reviewed by: gallatin MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D25254
This commit is contained in:
parent
88a688663a
commit
d8b2d26b15
@ -1189,7 +1189,7 @@ iflib_netmap_attach(if_ctx_t ctx)
|
||||
return (netmap_attach(&na));
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq)
|
||||
{
|
||||
struct netmap_adapter *na = NA(ctx->ifc_ifp);
|
||||
@ -1197,7 +1197,7 @@ iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq)
|
||||
|
||||
slot = netmap_reset(na, NR_TX, txq->ift_id, 0);
|
||||
if (slot == NULL)
|
||||
return;
|
||||
return (0);
|
||||
for (int i = 0; i < ctx->ifc_softc_ctx.isc_ntxd[0]; i++) {
|
||||
|
||||
/*
|
||||
@ -1211,21 +1211,24 @@ iflib_netmap_txq_init(if_ctx_t ctx, iflib_txq_t txq)
|
||||
netmap_load_map(na, txq->ift_buf_tag, txq->ift_sds.ifsd_map[i],
|
||||
NMB(na, slot + si));
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
iflib_netmap_rxq_init(if_ctx_t ctx, iflib_rxq_t rxq)
|
||||
{
|
||||
struct netmap_adapter *na = NA(ctx->ifc_ifp);
|
||||
struct netmap_kring *kring = na->rx_rings[rxq->ifr_id];
|
||||
struct netmap_kring *kring;
|
||||
struct netmap_slot *slot;
|
||||
uint32_t nm_i;
|
||||
|
||||
slot = netmap_reset(na, NR_RX, rxq->ifr_id, 0);
|
||||
if (slot == NULL)
|
||||
return;
|
||||
return (0);
|
||||
kring = na->rx_rings[rxq->ifr_id];
|
||||
nm_i = netmap_idx_n2k(kring, 0);
|
||||
netmap_fl_refill(rxq, kring, nm_i, true);
|
||||
return (1);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1256,8 +1259,8 @@ iflib_netmap_timer_adjust(if_ctx_t ctx, iflib_txq_t txq, uint32_t *reset_on)
|
||||
#define iflib_netmap_detach(ifp) netmap_detach(ifp)
|
||||
|
||||
#else
|
||||
#define iflib_netmap_txq_init(ctx, txq)
|
||||
#define iflib_netmap_rxq_init(ctx, rxq)
|
||||
#define iflib_netmap_txq_init(ctx, txq) (0)
|
||||
#define iflib_netmap_rxq_init(ctx, rxq) (0)
|
||||
#define iflib_netmap_detach(ifp)
|
||||
|
||||
#define iflib_netmap_attach(ctx) (0)
|
||||
@ -2368,10 +2371,8 @@ iflib_init_locked(if_ctx_t ctx)
|
||||
IFDI_INIT(ctx);
|
||||
MPASS(if_getdrvflags(ifp) == i);
|
||||
for (i = 0, rxq = ctx->ifc_rxqs; i < sctx->isc_nrxqsets; i++, rxq++) {
|
||||
/* XXX this should really be done on a per-queue basis */
|
||||
if (if_getcapenable(ifp) & IFCAP_NETMAP) {
|
||||
MPASS(rxq->ifr_id == i);
|
||||
iflib_netmap_rxq_init(ctx, rxq);
|
||||
if (iflib_netmap_rxq_init(ctx, rxq) > 0) {
|
||||
/* This rxq is in netmap mode. Skip normal init. */
|
||||
continue;
|
||||
}
|
||||
for (j = 0, fl = rxq->ifr_fl; j < rxq->ifr_nfl; j++, fl++) {
|
||||
|
Loading…
Reference in New Issue
Block a user