From: Andriy Berestovskyy <Andriy.Berestovskyy@caviumnetworks.com>
To: Thomas Monjalon <thomas@monjalon.net>,
Bruce Richardson <bruce.richardson@intel.com>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH v3] ether: use a default for max Rx frame size in configure()
Date: Mon, 24 Apr 2017 16:50:37 +0200 [thread overview]
Message-ID: <abf49e30-6e40-641b-f668-dfd26c9be689@caviumnetworks.com> (raw)
In-Reply-To: <2079307.yoZvx5qzNF@xps>
Hey Thomas,
On 21.04.2017 00:25, Thomas Monjalon wrote:
>> The hardware is different, there is not much we can do about it.
>
> We can return an error if the max_rx_pkt_len cannot be set in the NIC.
Yes, we pass the value to the PMD, which might check the value and
return an error.
>> Nevertheless, we can fix the false comment and have a default for the
>> jumbos, which is beneficial for the apps/examples.
>
> The examples are using a hardcoded value, so they need to be fixed
> anyway.
We might change the hardcoded values to zeros once the patch is in. This
will make the examples a bit more clear.
> This ethdev patch is about a behaviour change of the API.
The behaviour was not documented, so IMO it is not an issue.
> It is about considering 0 as a request for default value
> and return an error if a value cannot be set.
Right.
> It will require more agreements and changes in the drivers
> for returning an error where appropriate.
IMO the changes are transparent for the PMDs (please see below), but it
might affect some applications. Here is the change in API behaviour:
Before the patch:
jumbo == 0, max_rx_pkt_len == 0, RESULT: max_rx_pkt_len = ETHER_MAX_LEN
jumbo == 0, max_rx_pkt_len == 10, RESULT: max_rx_pkt_len = ETHER_MAX_LEN
jumbo == 0, max_rx_pkt_len == 1200, RESULT: max_rx_pkt_len = 1200
jumbo == 0, max_rx_pkt_len == 9K, RESULT: max_rx_pkt_len = ETHER_MAX_LEN
jumbo == 1, max_rx_pkt_len == 0, RESULT: ERROR
jumbo == 1, max_rx_pkt_len == 10, RESULT: ERROR
jumbo == 1, max_rx_pkt_len == 1200, RESULT: max_rx_pkt_len = 1200
jumbo == 1, max_rx_pkt_len == 9K, RESULT: ERROR or max_rx_pkt_len = 9K
jumbo == 1, max_rx_pkt_len == 90K, RESULT: ERROR
After the patch:
jumbo == 0, max_rx_pkt_len == 0, RESULT: max_rx_pkt_len = ETHER_MAX_LEN
jumbo == 0, max_rx_pkt_len == 10, RESULT: ERROR (changed)
jumbo == 0, max_rx_pkt_len == 1200, RESULT: max_rx_pkt_len = 1200
jumbo == 0, max_rx_pkt_len == 9K, RESULT: ERROR (changed)
jumbo == 1, max_rx_pkt_len == 0, RESULT: max_rx_pkt_len = dev_info()
jumbo == 1, max_rx_pkt_len == 10, RESULT: ERROR
jumbo == 1, max_rx_pkt_len == 1200, RESULT: max_rx_pkt_len = 1200
jumbo == 1, max_rx_pkt_len == 9K, RESULT: ERROR or max_rx_pkt_len = 9K
jumbo == 1, max_rx_pkt_len == 90K, RESULT: ERROR
Only the apps which requested too small or too big normal frames will be
affected. In most cases it will be rather an error in the app...
Also I have looked through all the PMDs to confirm they are not
affected. Here is the summary:
af_packet
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = ETH_FRAME_LEN (1514)
ark
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = ETH_FRAME_LEN (16K - 128)
avp
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = avp->max_rx_pkt_len
rx_queue_setup() uses max_rx_pkt_len for scattering
bnx2x
configure() uses max_rx_pkt_len to set internal mtu
info() returns max_rx_pktlen = BNX2X_MAX_RX_PKT_LEN (15872)
bnxt
configure() uses max_rx_pkt_len to set internal mtu
info() returns max_rx_pktlen = BNXT_MAX_MTU + ETHER_HDR_LEN +
ETHER_CRC_LEN + VLAN_TAG_SIZE (9000 + 14 + 4 + 4)
bonding
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = internals->candidate_max_rx_pktlen or
ETHER_MAX_JUMBO_FRAME_LEN (0x3F00)
cxgbe
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = CXGBE_MAX_RX_PKTLEN (9000 + 14 + 4)
rx_queue_setup() checks max_rx_pkt_len boundaries
dpaa2
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = DPAA2_MAX_RX_PKT_LEN (10240)
e1000 (em)
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = em_get_max_pktlen() (0x2412, 0x1000,
1518, 0x3f00, depends on model)
e1000 (igb)
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = 0x3fff
start() writes max_rx_pkt_len to HW for jumbo frames only
start() uses max_rx_pkt_len for scattering
ena
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = adapter->max_mtu
start() checks max_rx_pkt_len boundaries
enic
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = enic->max_mtu + 14 + 4
fm10k
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = FM10K_MAX_PKT_SIZE (15 * 1024)
start() uses max_rx_pkt_len for scattering
i40e
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = I40E_FRAME_SIZE_MAX (9728)
rx_queue_config() checks max_rx_pkt_len boundaries
ixgbe
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = 15872 (9728 for vf)
start() writes max_rx_pkt_len to HW for jumbo frames only
start() uses max_rx_pkt_len for scattering
kni
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = UINT32_MAX
liquidio
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = LIO_MAX_RX_PKTLEN (64K)
start() checks max_rx_pkt_len boundaries
mlx4
configure() uses max_rx_pkt_len for scattering
info() returns max_rx_pktlen = 65536
mlx5
configure() uses max_rx_pkt_len for scattering
info() returns max_rx_pktlen = 65536
nfp
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = hw->mtu
null
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = (uint32_t)-1
pcap
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = (uint32_t)-1
qede
configure() uses max_rx_pkt_len for scattering + internal data
info() returns max_rx_pktlen = ETH_TX_MAX_NON_LSO_PKT_LEN (9700 - 4 - 4
- 12 - 8)
ring
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = (uint32_t)-1
sfc
configure() uses max_rx_pkt_len to set internal data
info() returns max_rx_pktlen = EFX_MAC_PDU_MAX (9202 + 14 + 4 + 4 + 16)
szedata2
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = (uint32_t)-1
tap
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = ETHER_MAX_VLAN_FRAME_LEN (1518 + 4)
thunderx
configure() uses max_rx_pkt_len for scattering + sets internal mtu
info() returns max_rx_pktlen = NIC_HW_MAX_FRS (9200)
vhost
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = (uint32_t)-1
virtio
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = VIRTIO_MAX_RX_PKTLEN (9728U)
vmxnet3
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = 16384;
xenvirt
configure() does not use max_rx_pkt_len
info() returns max_rx_pktlen = 2048
Regards,
Andriy
next prev parent reply other threads:[~2017-04-24 14:50 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-23 17:06 [dpdk-dev] [PATCH] ether: fix configure() to use a default for max_rx_pkt_len Andriy Berestovskyy
2017-03-24 11:52 ` [dpdk-dev] [PATCH v2] ether: use a default for max Rx frame size in configure() Andriy Berestovskyy
2017-03-27 6:15 ` Yang, Qiming
2017-03-27 8:38 ` Andriy Berestovskyy
2017-04-07 8:24 ` Bruce Richardson
2017-04-06 20:48 ` Thomas Monjalon
2017-04-07 8:09 ` Andriy Berestovskyy
2017-04-07 8:34 ` Thomas Monjalon
2017-04-07 8:55 ` Andriy Berestovskyy
2017-04-07 11:02 ` [dpdk-dev] [PATCH v3] " Andriy Berestovskyy
2017-04-07 12:15 ` Thomas Monjalon
2017-04-07 12:29 ` Bruce Richardson
2017-04-07 14:18 ` Andriy Berestovskyy
2017-04-07 14:47 ` Thomas Monjalon
2017-04-07 15:27 ` Andriy Berestovskyy
2017-04-20 22:25 ` Thomas Monjalon
2017-04-24 14:50 ` Andriy Berestovskyy [this message]
2017-07-31 22:33 ` Thomas Monjalon
2018-05-22 22:30 ` Thomas Monjalon
2018-05-23 5:21 ` Shahaf Shuler
2018-05-23 5:23 ` Jerin Jacob
2018-05-24 9:20 ` Andriy Berestovskyy
2019-01-23 18:36 ` Ferruh Yigit
2019-01-25 21:15 ` Andriy Berestovskyy
2017-04-10 14:30 ` [dpdk-dev] [PATCH 1/3] examples/ip_fragmentation: limit max frame size Andriy Berestovskyy
2017-04-10 14:30 ` [dpdk-dev] [PATCH 2/3] examples/ip_reassembly: " Andriy Berestovskyy
2017-04-10 14:30 ` [dpdk-dev] [PATCH 3/3] examples/ipv4_multicast: " Andriy Berestovskyy
2017-04-21 0:21 ` [dpdk-dev] [PATCH 1/3] examples/ip_fragmentation: " Thomas Monjalon
2023-06-08 16:51 ` [PATCH v3] ether: use a default for max Rx frame size in configure() Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=abf49e30-6e40-641b-f668-dfd26c9be689@caviumnetworks.com \
--to=andriy.berestovskyy@caviumnetworks.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=thomas@monjalon.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).