At the moment rte_eth_dev_configure() behaves inconsistent:
 - for normal frames: zero max_rx_pkt_len uses a default
 - for jumbo frames: zero max_rx_pkt_len gives an error

This patch fixes this inconsistency by using a default value
if max_rx_pkt_len is zero both for normal and jumbo frames.

Signed-off-by: Andriy Berestovskyy <andriy.berestovs...@caviumnetworks.com>
---

Notes:
    v3 changes:
     - use a default only if max_rx_pkt_len is zero
    
    v2 changes:
     - reword the commit title according to the check-git-log.sh

 lib/librte_ether/rte_ethdev.c | 23 ++++++++++++-----------
 lib/librte_ether/rte_ethdev.h |  2 +-
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index 4e1e6dc..2700c69 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -790,6 +790,7 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, 
uint16_t nb_tx_q,
 {
        struct rte_eth_dev *dev;
        struct rte_eth_dev_info dev_info;
+       uint32_t max_len;
        int diag;
 
        RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
@@ -858,17 +859,23 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, 
uint16_t nb_tx_q,
        }
 
        /*
-        * If jumbo frames are enabled, check that the maximum RX packet
-        * length is supported by the configured device.
+        * Check that the maximum RX packet length is supported
+        * by the configured device.
         */
        if (dev_conf->rxmode.jumbo_frame == 1) {
-               if (dev_conf->rxmode.max_rx_pkt_len >
-                   dev_info.max_rx_pktlen) {
+               max_len = dev_info.max_rx_pktlen;
+       } else {
+               max_len = ETHER_MAX_LEN;
+       }
+       if (dev_conf->rxmode.max_rx_pkt_len == 0) {
+               dev->data->dev_conf.rxmode.max_rx_pkt_len = max_len;
+       } else {
+               if (dev_conf->rxmode.max_rx_pkt_len > max_len) {
                        RTE_PMD_DEBUG_TRACE("ethdev port_id=%d max_rx_pkt_len 
%u"
                                " > max valid value %u\n",
                                port_id,
                                (unsigned)dev_conf->rxmode.max_rx_pkt_len,
-                               (unsigned)dev_info.max_rx_pktlen);
+                               (unsigned int)max_len);
                        return -EINVAL;
                } else if (dev_conf->rxmode.max_rx_pkt_len < ETHER_MIN_LEN) {
                        RTE_PMD_DEBUG_TRACE("ethdev port_id=%d max_rx_pkt_len 
%u"
@@ -878,12 +885,6 @@ rte_eth_dev_configure(uint8_t port_id, uint16_t nb_rx_q, 
uint16_t nb_tx_q,
                                (unsigned)ETHER_MIN_LEN);
                        return -EINVAL;
                }
-       } else {
-               if (dev_conf->rxmode.max_rx_pkt_len < ETHER_MIN_LEN ||
-                       dev_conf->rxmode.max_rx_pkt_len > ETHER_MAX_LEN)
-                       /* Use default value */
-                       dev->data->dev_conf.rxmode.max_rx_pkt_len =
-                                                       ETHER_MAX_LEN;
        }
 
        /*
diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index d072538..ea760dc 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -349,7 +349,7 @@ enum rte_eth_tx_mq_mode {
 struct rte_eth_rxmode {
        /** The multi-queue packet distribution mode to be used, e.g. RSS. */
        enum rte_eth_rx_mq_mode mq_mode;
-       uint32_t max_rx_pkt_len;  /**< Only used if jumbo_frame enabled. */
+       uint32_t max_rx_pkt_len;  /**< If zero, use a default packet length. */
        uint16_t split_hdr_size;  /**< hdr buf size (header_split enabled).*/
        __extension__
        uint16_t header_split : 1, /**< Header Split enable. */
-- 
2.7.4

Reply via email to