Index: sys/dev/ixl/ixl_txrx.c =================================================================== --- sys/dev/ixl/ixl_txrx.c +++ sys/dev/ixl/ixl_txrx.c @@ -333,8 +333,6 @@ * - return 0 on success, positive on failure * **********************************************************************/ -#define IXL_TXD_CMD (I40E_TX_DESC_CMD_EOP | I40E_TX_DESC_CMD_RS) - static int ixl_isc_txd_encap(void *arg, if_pkt_info_t pi) { @@ -396,15 +394,21 @@ pidx_last = i; i = (i+1) & mask; } - /* Set the last descriptor for report */ + /* + * Set the EOP flag in the last descriptor. If the caller asked + * to be interrupted on completion, also set the report flag. */ txd->cmd_type_offset_bsz |= - htole64(((u64)IXL_TXD_CMD << I40E_TXD_QW1_CMD_SHIFT)); - /* Add to report status array (if using TX interrupts) */ - if (!vsi->enable_head_writeback && tx_intr) { - txr->tx_rsq[txr->tx_rs_pidx] = pidx_last; - txr->tx_rs_pidx = (txr->tx_rs_pidx+1) & mask; - MPASS(txr->tx_rs_pidx != txr->tx_rs_cidx); - } + htole64(((u64)I40E_TX_DESC_CMD_EOP << I40E_TXD_QW1_CMD_SHIFT)); + if (tx_intr) { + txd->cmd_type_offset_bsz |= + htole64(((u64)I40E_TX_DESC_CMD_RS << I40E_TXD_QW1_CMD_SHIFT)); + /* Add to report status array (if using TX interrupts) */ + if (!vsi->enable_head_writeback) { + txr->tx_rsq[txr->tx_rs_pidx] = pidx_last; + txr->tx_rs_pidx = (txr->tx_rs_pidx+1) & mask; + MPASS(txr->tx_rs_pidx != txr->tx_rs_cidx); + } + } pi->ipi_new_pidx = i; ++txr->tx_packets;