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>