net/liquidio: fix MTU calculation from port configuration

max_rx_pkt_len member of port RX configuration indicates max frame
length. Ethernet header and CRC length should be subtracted from it to
find MTU.

Fixes: 605164c8e79d ("net/liquidio: add API to validate VF MTU")
Cc: stable@dpdk.org

Signed-off-by: Shijith Thotton <shijith.thotton@caviumnetworks.com>
This commit is contained in:
Shijith Thotton 2017-06-06 16:34:34 +05:30 committed by Ferruh Yigit
parent 9f05a4b818
commit dc7037ba73

View File

@ -36,6 +36,7 @@
#include <rte_cycles.h>
#include <rte_malloc.h>
#include <rte_alarm.h>
#include <rte_ether.h>
#include "lio_logs.h"
#include "lio_23xx_vf.h"
@ -1367,7 +1368,8 @@ lio_sync_link_state_check(void *eth_dev)
static int
lio_dev_start(struct rte_eth_dev *eth_dev)
{
uint16_t mtu = eth_dev->data->dev_conf.rxmode.max_rx_pkt_len;
uint16_t mtu;
uint32_t frame_len = eth_dev->data->dev_conf.rxmode.max_rx_pkt_len;
struct lio_device *lio_dev = LIO_DEV(eth_dev);
uint16_t timeout = LIO_MAX_CMD_TIMEOUT;
int ret = 0;
@ -1405,12 +1407,29 @@ lio_dev_start(struct rte_eth_dev *eth_dev)
goto dev_mtu_check_error;
}
if (eth_dev->data->dev_conf.rxmode.jumbo_frame == 1) {
if (frame_len <= ETHER_MAX_LEN ||
frame_len > LIO_MAX_RX_PKTLEN) {
lio_dev_err(lio_dev, "max packet length should be >= %d and < %d when jumbo frame is enabled\n",
ETHER_MAX_LEN, LIO_MAX_RX_PKTLEN);
ret = -EINVAL;
goto dev_mtu_check_error;
}
mtu = (uint16_t)(frame_len - ETHER_HDR_LEN - ETHER_CRC_LEN);
} else {
/* default MTU */
mtu = ETHER_MTU;
eth_dev->data->dev_conf.rxmode.max_rx_pkt_len = ETHER_MAX_LEN;
}
if (lio_dev->linfo.link.s.mtu != mtu) {
ret = lio_dev_validate_vf_mtu(eth_dev, mtu);
if (ret)
goto dev_mtu_check_error;
}
eth_dev->data->mtu = mtu;
return 0;
dev_mtu_check_error: