On Fri Apr 07 18:07:12 +0300 2017, Ilya Maximets wrote:
> Currently, 'rte_eth_dev_configure' fails on attempt to setup
> max_rx_pkt_len > 2048 if no slaves was added to bonded device.
> 
> For example:
> 
>       rte_eth_dev_attach("eth_bond0,slave=05:00.0,mode=l34", &id)
>       conf.rxmode.jumbo_frame = 1;
>       conf.rxmode.max_rx_pkt_len = 9000;
>       rte_eth_dev_configure(id, 1, 1, &conf)
> 
> Result:
>       EAL: Initializing pmd_bond for eth_bond0
>       EAL: Create bonded device eth_bond0 on port 4 in mode 2 on socket 0.
>       rte_eth_dev_configure: ethdev port_id=4 \
>               max_rx_pkt_len 9018 > max valid value 2048
> 
> It's expected that slaves will be added to bonded device inside
> 'rte_eth_dev_configure' and proper 'max_rx_pktlen' configured
> for all of them.
> 
> Failure happens because of hardcoded low value of 'max_rx_pktlen'.
> Increasing of this value to ETHER_MAX_JUMBO_FRAME_LEN will allow
> above scenario (attach + configure).
> 
> It is important because it is the way OVS wants to work with
> all DPDK devices (including virtual).
> Changing the default hardcoded value makes no harm because
> all the slaves' related code uses only 'candidate_max_rx_pktlen'
> variable.
> 
> CC: sta...@dpdk.org
> Fixes: 6cfc6a4f0d61 ("net/bonding: inherit maximum Rx packet length")
> Signed-off-by: Ilya Maximets <i.maxim...@samsung.com>
> ---
>  drivers/net/bonding/rte_eth_bond_pmd.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c 
> b/drivers/net/bonding/rte_eth_bond_pmd.c
> index c398fdb..0c8cc40 100644
> --- a/drivers/net/bonding/rte_eth_bond_pmd.c
> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
> @@ -1689,8 +1689,9 @@ bond_ethdev_info(struct rte_eth_dev *dev, struct 
> rte_eth_dev_info *dev_info)
>  
>       dev_info->max_mac_addrs = 1;
>  
> -     dev_info->max_rx_pktlen = internals->candidate_max_rx_pktlen ?
> -                               internals->candidate_max_rx_pktlen : 2048;
> +     dev_info->max_rx_pktlen = internals->candidate_max_rx_pktlen
> +                               ? internals->candidate_max_rx_pktlen
> +                               : ETHER_MAX_JUMBO_FRAME_LEN;
>  
>       dev_info->max_rx_queues = (uint16_t)128;
>       dev_info->max_tx_queues = (uint16_t)512;
> -- 
> 2.7.4
> 

Reviewed-by: Eric Kinzie <ehkin...@gmail.com>

Reply via email to