[dpdk-dev] [PATCH v3] ether: use a default for max Rx frame size in configure()
Andriy Berestovskyy
Andriy.Berestovskyy at caviumnetworks.com
Fri Apr 7 13:02:05 CEST 2017
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.Berestovskyy at 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
More information about the dev
mailing list