* [dpdk-dev] [PATCH 0/3] ethdev: fail if requested offload is not supported @ 2018-05-11 16:25 Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 1/3] ethdev: fail configure " Andrew Rybchenko ` (3 more replies) 0 siblings, 4 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-11 16:25 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai The series has fixes for problems discussed in [1]. Basically it does not allow unsupported offloads to pass. If fixes regressions for PMDs which carefully check offloads before, but these checks are removed now in favor of checks in ethdev. It may break applications which request some offload which is not supported by underlying PMD, but does not actually used. Depending on discussion results it should be either dropped or applied. [1] http://dpdk.org/ml/archives/dev/2018-May/101261.html Andrew Rybchenko (3): ethdev: fail configure if requested offload is not supported ethdev: fail if Tx queue offload is not supported at all ethdev: fail if Rx queue offload is not supported lib/librte_ethdev/rte_ethdev.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH 1/3] ethdev: fail configure if requested offload is not supported 2018-05-11 16:25 [dpdk-dev] [PATCH 0/3] ethdev: fail if requested offload is not supported Andrew Rybchenko @ 2018-05-11 16:25 ` Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all Andrew Rybchenko ` (2 subsequent siblings) 3 siblings, 0 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-11 16:25 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai Do not allow allow unsupported offload to be passed to PMD since in can result in inconsistent NIC configuration and processing in the driver. All PMDs are converted to the new offload API and must report its capabilties correctly. Both device and queue offloads are listed in [rt]x_offload_capa so the check should pass despite of which level the offload is supported on. Fixes: d04dd6d4ed67 ("ethdev: new Rx/Tx offloads API") Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> --- lib/librte_ethdev/rte_ethdev.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 3ddf3accb..dd36e6270 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1171,6 +1171,7 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q, local_conf.rxmode.offloads, dev_info.rx_offload_capa, __func__); + return -EINVAL; } if ((local_conf.txmode.offloads & dev_info.tx_offload_capa) != local_conf.txmode.offloads) { @@ -1181,6 +1182,7 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q, local_conf.txmode.offloads, dev_info.tx_offload_capa, __func__); + return -EINVAL; } /* Check that device supports requested rss hash functions. */ -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all 2018-05-11 16:25 [dpdk-dev] [PATCH 0/3] ethdev: fail if requested offload is not supported Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 1/3] ethdev: fail configure " Andrew Rybchenko @ 2018-05-11 16:25 ` Andrew Rybchenko 2018-05-13 5:37 ` Shahaf Shuler 2018-05-11 16:25 ` [dpdk-dev] [PATCH 3/3] ethdev: fail if Rx queue offload is not supported Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Andrew Rybchenko 3 siblings, 1 reply; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-11 16:25 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai Do not allow to request unsupported Tx offload since all checks are removed from PMDs because of consistency check in ethdev. Otherwise application may rely on offload which is not actually supported and send traffic with, for example, wrong checksums, truncated packets or packets with garbage. Fixes: d04dd6d4ed67 ("ethdev: new Rx/Tx offloads API") Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> --- lib/librte_ethdev/rte_ethdev.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index dd36e6270..60577efcf 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1744,6 +1744,16 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, local_conf.offloads, dev_info.tx_queue_offload_capa, __func__); + /* + * Applications which are not converted yet to the new + * Tx offload API may request device level offloads on + * queue level (and nothing is requested on device level). + * However, if the offload is not supported at all Tx + * queue setup must fail. + */ + if ((local_conf.offloads & dev_info.tx_offload_capa) != + local_conf.offloads) + return -EINVAL; } return eth_err(port_id, (*dev->dev_ops->tx_queue_setup)(dev, -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all 2018-05-11 16:25 ` [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all Andrew Rybchenko @ 2018-05-13 5:37 ` Shahaf Shuler 2018-05-13 13:30 ` Shahaf Shuler 2018-05-14 6:54 ` Andrew Rybchenko 0 siblings, 2 replies; 14+ messages in thread From: Shahaf Shuler @ 2018-05-13 5:37 UTC (permalink / raw) To: Andrew Rybchenko, dev; +Cc: Ferruh Yigit, Thomas Monjalon, Wei Dai --Shahaf > -----Original Message----- > From: Andrew Rybchenko <arybchenko@solarflare.com> > Sent: Friday, May 11, 2018 7:26 PM > To: dev@dpdk.org > Cc: Ferruh Yigit <ferruh.yigit@intel.com>; Thomas Monjalon > <thomas@monjalon.net>; Shahaf Shuler <shahafs@mellanox.com>; Wei Dai > <wei.dai@intel.com> > Subject: [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all > > Do not allow to request unsupported Tx offload since all checks are removed > from PMDs because of consistency check in ethdev. > Otherwise application may rely on offload which is not actually supported > and send traffic with, for example, wrong checksums, truncated packets or > packets with garbage. > > Fixes: d04dd6d4ed67 ("ethdev: new Rx/Tx offloads API") > > Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> > --- > lib/librte_ethdev/rte_ethdev.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c > index dd36e6270..60577efcf 100644 > --- a/lib/librte_ethdev/rte_ethdev.c > +++ b/lib/librte_ethdev/rte_ethdev.c > @@ -1744,6 +1744,16 @@ rte_eth_tx_queue_setup(uint16_t port_id, > uint16_t tx_queue_id, > local_conf.offloads, > dev_info.tx_queue_offload_capa, > __func__); > + /* > + * Applications which are not converted yet to the new > + * Tx offload API may request device level offloads on > + * queue level (and nothing is requested on device level). > + * However, if the offload is not supported at all Tx > + * queue setup must fail. > + */ > + if ((local_conf.offloads & dev_info.tx_offload_capa) != > + local_conf.offloads) > + return -EINVAL; Not converted application doesn't have a clue what are per-queue offloads, and this is the error they will get when the Tx queue configuration will fail. How about using ETH_TXQ_FLAGS_IGNORE flag, which explicitly says "application converted to the new Tx offloads API". and have 2 different checks: 1. for converted application the already exist check[1] with the related error. 2. for not converted application your check with a related error. [1] if ((local_conf.offloads & dev_info.tx_queue_offload_capa) != local_conf.offloads) { > } > > return eth_err(port_id, (*dev->dev_ops->tx_queue_setup)(dev, > -- > 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all 2018-05-13 5:37 ` Shahaf Shuler @ 2018-05-13 13:30 ` Shahaf Shuler 2018-05-14 6:54 ` Andrew Rybchenko 1 sibling, 0 replies; 14+ messages in thread From: Shahaf Shuler @ 2018-05-13 13:30 UTC (permalink / raw) To: Shahaf Shuler, Andrew Rybchenko, dev Cc: Ferruh Yigit, Thomas Monjalon, Wei Dai Sunday, May 13, 2018 8:38 AM, Shahaf Shuler: > Subject: Re: [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not > supported at all > > -----Original Message----- > > From: Andrew Rybchenko <arybchenko@solarflare.com> > > Sent: Friday, May 11, 2018 7:26 PM > > To: dev@dpdk.org > > Cc: Ferruh Yigit <ferruh.yigit@intel.com>; Thomas Monjalon > > <thomas@monjalon.net>; Shahaf Shuler <shahafs@mellanox.com>; Wei > Dai > > <wei.dai@intel.com> > > Subject: [PATCH 2/3] ethdev: fail if Tx queue offload is not supported > > at all > > > > Do not allow to request unsupported Tx offload since all checks are > > removed from PMDs because of consistency check in ethdev. > > Otherwise application may rely on offload which is not actually > > supported and send traffic with, for example, wrong checksums, > > truncated packets or packets with garbage. > > > > Fixes: d04dd6d4ed67 ("ethdev: new Rx/Tx offloads API") > > > > Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> > > --- > > lib/librte_ethdev/rte_ethdev.c | 10 ++++++++++ > > 1 file changed, 10 insertions(+) > > > > diff --git a/lib/librte_ethdev/rte_ethdev.c > > b/lib/librte_ethdev/rte_ethdev.c index dd36e6270..60577efcf 100644 > > --- a/lib/librte_ethdev/rte_ethdev.c > > +++ b/lib/librte_ethdev/rte_ethdev.c > > @@ -1744,6 +1744,16 @@ rte_eth_tx_queue_setup(uint16_t port_id, > > uint16_t tx_queue_id, > > local_conf.offloads, > > dev_info.tx_queue_offload_capa, > > __func__); > > + /* > > + * Applications which are not converted yet to the new > > + * Tx offload API may request device level offloads on > > + * queue level (and nothing is requested on device level). > > + * However, if the offload is not supported at all Tx > > + * queue setup must fail. > > + */ > > + if ((local_conf.offloads & dev_info.tx_offload_capa) != > > + local_conf.offloads) > > + return -EINVAL; > > Not converted application doesn't have a clue what are per-queue offloads, > and this is the error they will get when the Tx queue configuration will fail. > > How about using ETH_TXQ_FLAGS_IGNORE flag, which explicitly says > "application converted to the new Tx offloads API". and have 2 different > checks: > 1. for converted application the already exist check[1] with the related error. > 2. for not converted application your check with a related error. > > As a suggestion maybe the below diff can be squashed into this one: diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index b3dac067c5..4763718b9c 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1727,25 +1727,29 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, */ local_conf.offloads &= ~dev->data->dev_conf.txmode.offloads; - /* - * New added offloadings for this queue are those not enabled in - * rte_eth_dev_configure( ) and they must be per-queue type. - * A pure per-port offloading can't be enabled on a queue while - * disabled on another queue. A pure per-port offloading can't - * be enabled for any queue as new added one if it hasn't been - * enabled in rte_eth_dev_configure( ). - */ - if ((local_conf.offloads & dev_info.tx_queue_offload_capa) != - local_conf.offloads) { - ethdev_log(ERR, "Ethdev port_id=%d tx_queue_id=%d, new " - "added offloads 0x%" PRIx64 " must be " - "within pre-queue offload capabilities 0x%" - PRIx64 " in %s( )\n", - port_id, - tx_queue_id, - local_conf.offloads, - dev_info.tx_queue_offload_capa, - __func__); + if (tx_conf->txq_flags & ETH_TXQ_FLAGS_IGNORE) { + /* + * New added offloadings for this queue are those not enabled in + * rte_eth_dev_configure( ) and they must be per-queue type. + * A pure per-port offloading can't be enabled on a queue while + * disabled on another queue. A pure per-port offloading can't + * be enabled for any queue as new added one if it hasn't been + * enabled in rte_eth_dev_configure( ). + */ + if ((local_conf.offloads & dev_info.tx_queue_offload_capa) != + local_conf.offloads) { + ethdev_log(ERR, "Ethdev port_id=%d tx_queue_id=%d, new " + "added offloads 0x%" PRIx64 " must be " + "within pre-queue offload capabilities " + " 0x%" PRIx64 " in %s( )\n", + port_id, + tx_queue_id, + local_conf.offloads, + dev_info.tx_queue_offload_capa, + __func__); + return -EINVAL; + } + } else { /* * Applications which are not converted yet to the new * Tx offload API may request device level offloads on @@ -1754,8 +1758,18 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, * queue setup must fail. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all 2018-05-13 5:37 ` Shahaf Shuler 2018-05-13 13:30 ` Shahaf Shuler @ 2018-05-14 6:54 ` Andrew Rybchenko 1 sibling, 0 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-14 6:54 UTC (permalink / raw) To: Shahaf Shuler, dev; +Cc: Ferruh Yigit, Thomas Monjalon, Wei Dai On 05/13/2018 08:37 AM, Shahaf Shuler wrote: >> Do not allow to request unsupported Tx offload since all checks are removed >> from PMDs because of consistency check in ethdev. >> Otherwise application may rely on offload which is not actually supported >> and send traffic with, for example, wrong checksums, truncated packets or >> packets with garbage. >> >> Fixes: d04dd6d4ed67 ("ethdev: new Rx/Tx offloads API") >> >> Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> >> --- >> lib/librte_ethdev/rte_ethdev.c | 10 ++++++++++ >> 1 file changed, 10 insertions(+) >> >> diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c >> index dd36e6270..60577efcf 100644 >> --- a/lib/librte_ethdev/rte_ethdev.c >> +++ b/lib/librte_ethdev/rte_ethdev.c >> @@ -1744,6 +1744,16 @@ rte_eth_tx_queue_setup(uint16_t port_id, >> uint16_t tx_queue_id, >> local_conf.offloads, >> dev_info.tx_queue_offload_capa, >> __func__); >> + /* >> + * Applications which are not converted yet to the new >> + * Tx offload API may request device level offloads on >> + * queue level (and nothing is requested on device level). >> + * However, if the offload is not supported at all Tx >> + * queue setup must fail. >> + */ >> + if ((local_conf.offloads & dev_info.tx_offload_capa) != >> + local_conf.offloads) >> + return -EINVAL; > Not converted application doesn't have a clue what are per-queue offloads, and this is the error they will get when the Tx queue configuration will fail. > > How about using ETH_TXQ_FLAGS_IGNORE flag, which explicitly says "application converted to the new Tx offloads API". and have 2 different checks: > 1. for converted application the already exist check[1] with the related error. > 2. for not converted application your check with a related error. Yes, I like the idea. Many thanks. I'll send v2 shortly. > [1] > if ((local_conf.offloads & dev_info.tx_queue_offload_capa) != > local_conf.offloads) { > >> } >> >> return eth_err(port_id, (*dev->dev_ops->tx_queue_setup)(dev, >> -- >> 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH 3/3] ethdev: fail if Rx queue offload is not supported 2018-05-11 16:25 [dpdk-dev] [PATCH 0/3] ethdev: fail if requested offload is not supported Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 1/3] ethdev: fail configure " Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all Andrew Rybchenko @ 2018-05-11 16:25 ` Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Andrew Rybchenko 3 siblings, 0 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-11 16:25 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai Return of error was removed to mitigate possible breakage of old applications which are not converted to the new offload API yet. However, old Rx offload API has no per queue controls and Rx queue offloads are derived from the device Rx mode bitfields exactly in the same way as it is done on configure. Device level Rx offloads are removed from queue offloads, so Rx queue offloads should be empty if old Rx offload API is used. Fixes: d04dd6d4ed67 ("ethdev: new Rx/Tx offloads API") Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> --- lib/librte_ethdev/rte_ethdev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 60577efcf..938ec5638 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1580,6 +1580,7 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id, local_conf.offloads, dev_info.rx_queue_offload_capa, __func__); + return -EINVAL; } ret = (*dev->dev_ops->rx_queue_setup)(dev, rx_queue_id, nb_rx_desc, -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested offload is not supported 2018-05-11 16:25 [dpdk-dev] [PATCH 0/3] ethdev: fail if requested offload is not supported Andrew Rybchenko ` (2 preceding siblings ...) 2018-05-11 16:25 ` [dpdk-dev] [PATCH 3/3] ethdev: fail if Rx queue offload is not supported Andrew Rybchenko @ 2018-05-14 7:36 ` Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 1/3] ethdev: fail configure " Andrew Rybchenko ` (3 more replies) 3 siblings, 4 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-14 7:36 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai The series has fixes for problems discussed in [1]. Basically it does not allow unsupported offloads to pass. If fixes regressions for PMDs which carefully check offloads before, but these checks are removed now in favor of checks in ethdev. It may break applications which request some offload which is not supported by underlying PMD, but does not actually used. Depending on discussion results it should be either dropped or applied. [1] http://dpdk.org/ml/archives/dev/2018-May/101261.html v1 -> v2: - use IGNORE flag to separate old and new offload API cases on Tx queue setup and avoid expected errors if old API is used as suggested by Shahaf - remove convertion of rxmode bits on Rx queue setup since exactly these bits are removed Andrew Rybchenko (3): ethdev: fail configure if requested offload is not supported ethdev: fail if Tx queue offload is not supported ethdev: fail if Rx queue offload is not supported lib/librte_ethdev/rte_ethdev.c | 62 +++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 27 deletions(-) -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 1/3] ethdev: fail configure if requested offload is not supported 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Andrew Rybchenko @ 2018-05-14 7:36 ` Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 2/3] ethdev: fail if Tx queue " Andrew Rybchenko ` (2 subsequent siblings) 3 siblings, 0 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-14 7:36 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai Do not allow allow unsupported offload to be passed to PMD since in can result in inconsistent NIC configuration and processing in the driver. All PMDs are converted to the new offload API and must report its capabilties correctly. Both device and queue offloads are listed in [rt]x_offload_capa so the check should pass despite of which level the offload is supported on. Fixes: 0330605295cf ("ethdev: new Rx/Tx offloads API") Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> --- lib/librte_ethdev/rte_ethdev.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 3528ba179..54e1ee771 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1171,6 +1171,7 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q, local_conf.rxmode.offloads, dev_info.rx_offload_capa, __func__); + return -EINVAL; } if ((local_conf.txmode.offloads & dev_info.tx_offload_capa) != local_conf.txmode.offloads) { @@ -1181,6 +1182,7 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q, local_conf.txmode.offloads, dev_info.tx_offload_capa, __func__); + return -EINVAL; } /* Check that device supports requested rss hash functions. */ -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 2/3] ethdev: fail if Tx queue offload is not supported 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 1/3] ethdev: fail configure " Andrew Rybchenko @ 2018-05-14 7:36 ` Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 3/3] ethdev: fail if Rx " Andrew Rybchenko 2018-05-14 7:51 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Shahaf Shuler 3 siblings, 0 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-14 7:36 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai Do not allow to request unsupported Tx offload since all checks are removed from PMDs because of consistency check in ethdev. Otherwise application may rely on offload which is not actually supported and send traffic with, for example, wrong checksums, truncated packets or packets with garbage. If application is using the new offload API, queue offloads only may be added on Tx queue setup. If application is using the old offload API, it knows nothing about device level Tx offloads and requests everything required on Tx queue setup using txq_flags. So, both device level (from PMD point of view) and queue level offloads may be requested. It is assumed that no PMD yet strictly separate device and queue level offloads. If any PMD does it, it was broken for applications which use the old offload API at the moment of PMD convertion anyway. Fixes: 0330605295cf ("ethdev: new Rx/Tx offloads API") Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> --- lib/librte_ethdev/rte_ethdev.c | 51 +++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 54e1ee771..2b673013a 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1727,25 +1727,38 @@ rte_eth_tx_queue_setup(uint16_t port_id, uint16_t tx_queue_id, */ local_conf.offloads &= ~dev->data->dev_conf.txmode.offloads; - /* - * New added offloadings for this queue are those not enabled in - * rte_eth_dev_configure( ) and they must be per-queue type. - * A pure per-port offloading can't be enabled on a queue while - * disabled on another queue. A pure per-port offloading can't - * be enabled for any queue as new added one if it hasn't been - * enabled in rte_eth_dev_configure( ). - */ - if ((local_conf.offloads & dev_info.tx_queue_offload_capa) != - local_conf.offloads) { - ethdev_log(ERR, "Ethdev port_id=%d tx_queue_id=%d, new " - "added offloads 0x%" PRIx64 " must be " - "within pre-queue offload capabilities 0x%" - PRIx64 " in %s( )\n", - port_id, - tx_queue_id, - local_conf.offloads, - dev_info.tx_queue_offload_capa, - __func__); + if (tx_conf->txq_flags & ETH_TXQ_FLAGS_IGNORE) { + /* + * New added offloadings for this queue are those not enabled in + * rte_eth_dev_configure( ) and they must be per-queue type. + * A pure per-port offloading can't be enabled on a queue while + * disabled on another queue. A pure per-port offloading can't + * be enabled for any queue as new added one if it hasn't been + * enabled in rte_eth_dev_configure( ). + */ + if ((local_conf.offloads & dev_info.tx_queue_offload_capa) != + local_conf.offloads) { + ethdev_log(ERR, "Ethdev port_id=%d tx_queue_id=%d, new " + "added offloads 0x%" PRIx64 " must be " + "within pre-queue offload capabilities 0x%" + PRIx64 " in %s( )\n", + port_id, + tx_queue_id, + local_conf.offloads, + dev_info.tx_queue_offload_capa, + __func__); + } + } else { + /* + * Applications which are not converted yet to the new + * Tx offload API may request device level offloads on + * queue level (and nothing is requested on device level). + * However, if the offload is not supported at all, + * Tx queue setup must fail. + */ + if ((local_conf.offloads & dev_info.tx_offload_capa) != + local_conf.offloads) + return -EINVAL; } return eth_err(port_id, (*dev->dev_ops->tx_queue_setup)(dev, -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 3/3] ethdev: fail if Rx queue offload is not supported 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 1/3] ethdev: fail configure " Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 2/3] ethdev: fail if Tx queue " Andrew Rybchenko @ 2018-05-14 7:36 ` Andrew Rybchenko 2018-05-14 7:51 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Shahaf Shuler 3 siblings, 0 replies; 14+ messages in thread From: Andrew Rybchenko @ 2018-05-14 7:36 UTC (permalink / raw) To: dev; +Cc: Ferruh Yigit, Thomas Monjalon, Shahaf Shuler, Wei Dai Return of error was removed to mitigate possible breakage of old applications which are not converted to the new offload API yet. Old Rx offload API has no per queue controls and Rx queue offloads are derived from the device Rx mode bitfields exactly in the same way as it is done on configure and, then, removed to pass queue level offloads only. It is meaningless and should be removed. So, the new offload API only may be used to request per-queue Rx offloads and error should be returned if offload not supported on queue level is requested. Fixes: 0330605295cf ("ethdev: new Rx/Tx offloads API") Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com> --- lib/librte_ethdev/rte_ethdev.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 2b673013a..d82962fae 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -1542,14 +1542,6 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id, rx_conf = &dev_info.default_rxconf; local_conf = *rx_conf; - if (dev->data->dev_conf.rxmode.ignore_offload_bitfield == 0) { - /** - * Reflect port offloads to queue offloads in order for - * offloads to not be discarded. - */ - rte_eth_convert_rx_offload_bitfield(&dev->data->dev_conf.rxmode, - &local_conf.offloads); - } /* * If an offloading has already been enabled in @@ -1581,6 +1573,7 @@ rte_eth_rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id, local_conf.offloads, dev_info.rx_queue_offload_capa, __func__); + return -EINVAL; } ret = (*dev->dev_ops->rx_queue_setup)(dev, rx_queue_id, nb_rx_desc, -- 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested offload is not supported 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Andrew Rybchenko ` (2 preceding siblings ...) 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 3/3] ethdev: fail if Rx " Andrew Rybchenko @ 2018-05-14 7:51 ` Shahaf Shuler 2018-05-14 14:48 ` Ferruh Yigit 3 siblings, 1 reply; 14+ messages in thread From: Shahaf Shuler @ 2018-05-14 7:51 UTC (permalink / raw) To: Andrew Rybchenko, dev; +Cc: Ferruh Yigit, Thomas Monjalon, Wei Dai Monday, May 14, 2018 10:36 AM, Andrew Rybchenko: > Subject: [PATCH v2 0/3] ethdev: fail if requested offload is not supported > > The series has fixes for problems discussed in [1]. > > Basically it does not allow unsupported offloads to pass. > > If fixes regressions for PMDs which carefully check offloads before, but these > checks are removed now in favor of checks in ethdev. > > It may break applications which request some offload which is not supported > by underlying PMD, but does not actually used. > > Depending on discussion results it should be either dropped or applied. > > [1] > https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdpd > k.org%2Fml%2Farchives%2Fdev%2F2018- > May%2F101261.html&data=02%7C01%7Cshahafs%40mellanox.com%7C9a572 > e9d86b04c99854c08d5b96d75b5%7Ca652971c7d2e4d9ba6a4d149256f461b%7 > C0%7C0%7C636618802134607945&sdata=fQKCr%2FrFvakWVIFomy8iSD%2Bc > VtSie8mvgx63Qqgq690%3D&reserved=0 > > v1 -> v2: > - use IGNORE flag to separate old and new offload API cases on > Tx queue setup and avoid expected errors if old API is used > as suggested by Shahaf > - remove convertion of rxmode bits on Rx queue setup since exactly > these bits are removed > > Andrew Rybchenko (3): > ethdev: fail configure if requested offload is not supported > ethdev: fail if Tx queue offload is not supported > ethdev: fail if Rx queue offload is not supported > > lib/librte_ethdev/rte_ethdev.c | 62 +++++++++++++++++++--------------- > 1 file changed, 35 insertions(+), 27 deletions(-) For the series - Acked-by: Shahaf Shuler <shahafs@mellanox.com> > > -- > 2.17.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested offload is not supported 2018-05-14 7:51 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Shahaf Shuler @ 2018-05-14 14:48 ` Ferruh Yigit 2018-06-18 8:43 ` Ferruh Yigit 0 siblings, 1 reply; 14+ messages in thread From: Ferruh Yigit @ 2018-05-14 14:48 UTC (permalink / raw) To: Shahaf Shuler, Andrew Rybchenko, dev; +Cc: Thomas Monjalon, Wei Dai On 5/14/2018 8:51 AM, Shahaf Shuler wrote: > Monday, May 14, 2018 10:36 AM, Andrew Rybchenko: >> Subject: [PATCH v2 0/3] ethdev: fail if requested offload is not supported >> >> The series has fixes for problems discussed in [1]. >> >> Basically it does not allow unsupported offloads to pass. >> >> If fixes regressions for PMDs which carefully check offloads before, but these >> checks are removed now in favor of checks in ethdev. >> >> It may break applications which request some offload which is not supported >> by underlying PMD, but does not actually used. >> >> Depending on discussion results it should be either dropped or applied. >> >> [1] >> https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdpd >> k.org%2Fml%2Farchives%2Fdev%2F2018- >> May%2F101261.html&data=02%7C01%7Cshahafs%40mellanox.com%7C9a572 >> e9d86b04c99854c08d5b96d75b5%7Ca652971c7d2e4d9ba6a4d149256f461b%7 >> C0%7C0%7C636618802134607945&sdata=fQKCr%2FrFvakWVIFomy8iSD%2Bc >> VtSie8mvgx63Qqgq690%3D&reserved=0 >> >> v1 -> v2: >> - use IGNORE flag to separate old and new offload API cases on >> Tx queue setup and avoid expected errors if old API is used >> as suggested by Shahaf >> - remove convertion of rxmode bits on Rx queue setup since exactly >> these bits are removed >> >> Andrew Rybchenko (3): >> ethdev: fail configure if requested offload is not supported >> ethdev: fail if Tx queue offload is not supported >> ethdev: fail if Rx queue offload is not supported >> >> lib/librte_ethdev/rte_ethdev.c | 62 +++++++++++++++++++--------------- >> 1 file changed, 35 insertions(+), 27 deletions(-) > > For the series - > Acked-by: Shahaf Shuler <shahafs@mellanox.com> Updated status of the set as deferred in patchwork, lets continue to work on this after release. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested offload is not supported 2018-05-14 14:48 ` Ferruh Yigit @ 2018-06-18 8:43 ` Ferruh Yigit 0 siblings, 0 replies; 14+ messages in thread From: Ferruh Yigit @ 2018-06-18 8:43 UTC (permalink / raw) To: Shahaf Shuler, Andrew Rybchenko, dev; +Cc: Thomas Monjalon, Wei Dai On 5/14/2018 3:48 PM, Ferruh Yigit wrote: > On 5/14/2018 8:51 AM, Shahaf Shuler wrote: >> Monday, May 14, 2018 10:36 AM, Andrew Rybchenko: >>> Subject: [PATCH v2 0/3] ethdev: fail if requested offload is not supported >>> >>> The series has fixes for problems discussed in [1]. >>> >>> Basically it does not allow unsupported offloads to pass. >>> >>> If fixes regressions for PMDs which carefully check offloads before, but these >>> checks are removed now in favor of checks in ethdev. >>> >>> It may break applications which request some offload which is not supported >>> by underlying PMD, but does not actually used. >>> >>> Depending on discussion results it should be either dropped or applied. >>> >>> [1] >>> https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fdpd >>> k.org%2Fml%2Farchives%2Fdev%2F2018- >>> May%2F101261.html&data=02%7C01%7Cshahafs%40mellanox.com%7C9a572 >>> e9d86b04c99854c08d5b96d75b5%7Ca652971c7d2e4d9ba6a4d149256f461b%7 >>> C0%7C0%7C636618802134607945&sdata=fQKCr%2FrFvakWVIFomy8iSD%2Bc >>> VtSie8mvgx63Qqgq690%3D&reserved=0 >>> >>> v1 -> v2: >>> - use IGNORE flag to separate old and new offload API cases on >>> Tx queue setup and avoid expected errors if old API is used >>> as suggested by Shahaf >>> - remove convertion of rxmode bits on Rx queue setup since exactly >>> these bits are removed >>> >>> Andrew Rybchenko (3): >>> ethdev: fail configure if requested offload is not supported >>> ethdev: fail if Tx queue offload is not supported >>> ethdev: fail if Rx queue offload is not supported >>> >>> lib/librte_ethdev/rte_ethdev.c | 62 +++++++++++++++++++--------------- >>> 1 file changed, 35 insertions(+), 27 deletions(-) >> >> For the series - >> Acked-by: Shahaf Shuler <shahafs@mellanox.com> > > Updated status of the set as deferred in patchwork, lets continue to work on > this after release. This set should not be valid anymore after adding error returns back and removing old offloading API in this release. Updating patchwork according. ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2018-06-18 8:44 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-05-11 16:25 [dpdk-dev] [PATCH 0/3] ethdev: fail if requested offload is not supported Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 1/3] ethdev: fail configure " Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 2/3] ethdev: fail if Tx queue offload is not supported at all Andrew Rybchenko 2018-05-13 5:37 ` Shahaf Shuler 2018-05-13 13:30 ` Shahaf Shuler 2018-05-14 6:54 ` Andrew Rybchenko 2018-05-11 16:25 ` [dpdk-dev] [PATCH 3/3] ethdev: fail if Rx queue offload is not supported Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 1/3] ethdev: fail configure " Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 2/3] ethdev: fail if Tx queue " Andrew Rybchenko 2018-05-14 7:36 ` [dpdk-dev] [PATCH v2 3/3] ethdev: fail if Rx " Andrew Rybchenko 2018-05-14 7:51 ` [dpdk-dev] [PATCH v2 0/3] ethdev: fail if requested " Shahaf Shuler 2018-05-14 14:48 ` Ferruh Yigit 2018-06-18 8:43 ` Ferruh Yigit
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).