Index: sys/net/iflib.c =================================================================== --- sys/net/iflib.c +++ sys/net/iflib.c @@ -188,7 +188,8 @@ struct sysctl_oid *ifc_sysctl_node; uint16_t ifc_sysctl_ntxqs; uint16_t ifc_sysctl_nrxqs; - uint16_t ifc_sysctl_qs_eq_override; + uint8_t ifc_sysctl_qs_eq_override; + uint8_t ifc_sysctl_rx_wait_irq; uint16_t ifc_sysctl_rx_budget; uint16_t ifc_sysctl_tx_abdicate; uint16_t ifc_sysctl_core_offset; @@ -2942,7 +2943,9 @@ #if defined(INET6) || defined(INET) tcp_lro_flush_all(&rxq->ifr_lc); #endif - if (avail != 0 || iflib_rxd_avail(ctx, rxq, *cidxp, 1) != 0) + if (avail != 0 || + (ctx->ifc_sysctl_rx_wait_irq == 0 && + iflib_rxd_avail(ctx, rxq, *cidxp, 1) != 0)) retval |= IFLIB_RXEOF_MORE; return (retval); err: @@ -6600,9 +6603,12 @@ SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_nrxqs", CTLFLAG_RWTUN, &ctx->ifc_sysctl_nrxqs, 0, "# of rxqs to use, 0 => use default #"); - SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_qs_enable", + SYSCTL_ADD_U8(ctx_list, oid_list, OID_AUTO, "override_qs_enable", CTLFLAG_RWTUN, &ctx->ifc_sysctl_qs_eq_override, 0, "permit #txq != #rxq"); + SYSCTL_ADD_U8(ctx_list, oid_list, OID_AUTO, "rx_wait_irq", + CTLFLAG_RWTUN, &ctx->ifc_sysctl_rx_wait_irq, 0, + "rearm IRQ instead of looking for available RX descriptors at the end of rxeof"); SYSCTL_ADD_INT(ctx_list, oid_list, OID_AUTO, "disable_msix", CTLFLAG_RWTUN, &ctx->ifc_softc_ctx.isc_disable_msix, 0, "disable MSI-X (default 0)");