net/ionic: store Tx fragment limit in queue
authorAndrew Boyer <aboyer@pensando.io>
Tue, 16 Feb 2021 20:35:39 +0000 (12:35 -0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 25 Feb 2021 15:58:56 +0000 (16:58 +0100)
A future patch will allow Tx scatter/gather to be disabled. Store the
value in the queue so it can be changed at runtime based on the
configuration.

Signed-off-by: Andrew Boyer <aboyer@pensando.io>
drivers/net/ionic/ionic_lif.c
drivers/net/ionic/ionic_lif.h
drivers/net/ionic/ionic_rxtx.c

index dd79068..b8023e0 100644 (file)
@@ -757,10 +757,13 @@ ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index,
                uint16_t ntxq_descs, struct ionic_tx_qcq **txq_out)
 {
        struct ionic_tx_qcq *txq;
-       uint16_t flags;
+       uint16_t flags, num_segs_fw;
        int err;
 
        flags = IONIC_QCQ_F_SG;
+
+       num_segs_fw = IONIC_TX_MAX_SG_ELEMS_V1 + 1;
+
        err = ionic_qcq_alloc(lif,
                IONIC_QTYPE_TXQ,
                sizeof(struct ionic_tx_qcq),
@@ -777,6 +780,7 @@ ionic_tx_qcq_alloc(struct ionic_lif *lif, uint32_t socket_id, uint32_t index,
                return err;
 
        txq->flags = flags;
+       txq->num_segs_fw = num_segs_fw;
 
        lif->txqcqs[index] = txq;
        *txq_out = txq;
index 5885aa1..9f00ba2 100644 (file)
@@ -92,6 +92,7 @@ struct ionic_tx_qcq {
        struct ionic_qcq qcq;
 
        /* cacheline2 */
+       uint16_t num_segs_fw;   /* # segs supported by current FW */
        uint16_t flags;
 
        struct ionic_tx_stats stats;
index b4bdeab..b83ea1b 100644 (file)
@@ -598,9 +598,9 @@ ionic_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
        (PKT_TX_OFFLOAD_MASK ^ IONIC_TX_OFFLOAD_MASK)
 
 uint16_t
-ionic_prep_pkts(void *tx_queue __rte_unused, struct rte_mbuf **tx_pkts,
-               uint16_t nb_pkts)
+ionic_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 {
+       struct ionic_tx_qcq *txq = tx_queue;
        struct rte_mbuf *txm;
        uint64_t offloads;
        int i = 0;
@@ -608,7 +608,7 @@ ionic_prep_pkts(void *tx_queue __rte_unused, struct rte_mbuf **tx_pkts,
        for (i = 0; i < nb_pkts; i++) {
                txm = tx_pkts[i];
 
-               if (txm->nb_segs > IONIC_TX_MAX_SG_ELEMS_V1 + 1) {
+               if (txm->nb_segs > txq->num_segs_fw) {
                        rte_errno = -EINVAL;
                        break;
                }