patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
@ 2020-03-05  6:45 Stephen Hemminger
  2020-03-05 20:10 ` Lance Richardson
  2020-03-24  4:02 ` [dpdk-stable] [dpdk-dev] " Ajit Khaparde
  0 siblings, 2 replies; 9+ messages in thread
From: Stephen Hemminger @ 2020-03-05  6:45 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, lance.richardson, stable

The bnxt driver has vector mode but it has limitations.
For example, rte_flow mark won't work in vector mode.
For this reason the user should be able to disable vector mode
as part of the config.

Make the configuration use the same as other drivers with
vector mode: ixge, i40e, ...

This will also make future support of vector mode on other
architectures possible.

Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
Cc: lance.richardson@broadcom.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 config/common_base             |  1 +
 drivers/net/bnxt/Makefile      |  2 +-
 drivers/net/bnxt/bnxt_ethdev.c | 10 +++-------
 drivers/net/bnxt/bnxt_ring.c   |  4 ++--
 drivers/net/bnxt/bnxt_rxr.c    |  3 +++
 5 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/config/common_base b/config/common_base
index 7ca2f28b19c8..3c719c7cbfc3 100644
--- a/config/common_base
+++ b/config/common_base
@@ -219,6 +219,7 @@ CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
 # Compile burst-oriented Broadcom BNXT PMD driver
 #
 CONFIG_RTE_LIBRTE_BNXT_PMD=y
+CONFIG_RTE_LIBRTE_BNXT_INC_VECTOR=y
 
 #
 # Compile burst-oriented Chelsio Terminator (CXGBE) PMD
diff --git a/drivers/net/bnxt/Makefile b/drivers/net/bnxt/Makefile
index b77532b8179b..85d6df6b5aa0 100644
--- a/drivers/net/bnxt/Makefile
+++ b/drivers/net/bnxt/Makefile
@@ -40,7 +40,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_irq.c
 SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_util.c
 SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += rte_pmd_bnxt.c
 ifeq ($(CONFIG_RTE_ARCH_X86), y)
-SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_rxtx_vec_sse.c
+SRCS-$(CONFIG_RTE_LIBRTE_BNXT_INC_VECTOR) += bnxt_rxtx_vec_sse.c
 endif
 
 #
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 18aa313fd8c1..701de33784b2 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -757,8 +757,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
 {
 	struct bnxt *bp = eth_dev->data->dev_private;
 
-#ifdef RTE_ARCH_X86
-#ifndef RTE_LIBRTE_IEEE1588
+#ifdef RTE_BNXT_INC_VECTOR
 	/*
 	 * Vector mode receive can be enabled only if scatter rx is not
 	 * in use and rx offloads are limited to VLAN stripping and
@@ -787,7 +786,6 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
 		    eth_dev->data->port_id,
 		    eth_dev->data->scattered_rx,
 		    eth_dev->data->dev_conf.rxmode.offloads);
-#endif
 #endif
 	bp->flags &= ~BNXT_FLAG_RX_VECTOR_PKT_MODE;
 	return bnxt_recv_pkts;
@@ -796,8 +794,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
 static eth_tx_burst_t
 bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
 {
-#ifdef RTE_ARCH_X86
-#ifndef RTE_LIBRTE_IEEE1588
+#ifdef RTE_BNXT_INC_VECTOR
 	/*
 	 * Vector mode transmit can be enabled only if not using scatter rx
 	 * or tx offloads.
@@ -815,7 +812,6 @@ bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
 		    eth_dev->data->port_id,
 		    eth_dev->data->scattered_rx,
 		    eth_dev->data->dev_conf.txmode.offloads);
-#endif
 #endif
 	return bnxt_xmit_pkts;
 }
@@ -2234,7 +2230,7 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
 	new_pkt_size = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN +
 		       VLAN_TAG_SIZE * BNXT_NUM_VLANS;
 
-#ifdef RTE_ARCH_X86
+#ifdef RTE_BNXT_INC_VECTOR
 	/*
 	 * If vector-mode tx/rx is active, disallow any MTU change that would
 	 * require scattered receive support.
diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
index d6e4e8a28138..9a4a0f21418d 100644
--- a/drivers/net/bnxt/bnxt_ring.c
+++ b/drivers/net/bnxt/bnxt_ring.c
@@ -608,7 +608,7 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)
 		bnxt_db_write(&rxr->ag_db, rxr->ag_prod);
 	}
 	rxq->index = queue_index;
-#ifdef RTE_ARCH_X86
+#ifdef RTE_BNXT_INC_VECTOR
 	bnxt_rxq_vec_setup(rxq);
 #endif
 
@@ -713,7 +713,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
 		bnxt_db_write(&rxr->rx_db, rxr->rx_prod);
 		bnxt_db_write(&rxr->ag_db, rxr->ag_prod);
 		rxq->index = i;
-#ifdef RTE_ARCH_X86
+#ifdef RTE_BNXT_INC_VECTOR
 		bnxt_rxq_vec_setup(rxq);
 #endif
 	}
diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index bef9720f590c..f9087bea89b9 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -18,6 +18,9 @@
 #include "hsi_struct_def_dpdk.h"
 #ifdef RTE_LIBRTE_IEEE1588
 #include "bnxt_hwrm.h"
+#ifdef RTE_BNXT_INC_VECTOR
+#error "bnxt: IEEE1588 is incompatiable with vector mode"
+#endif
 #endif
 
 /*
-- 
2.20.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
  2020-03-05  6:45 [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode Stephen Hemminger
@ 2020-03-05 20:10 ` Lance Richardson
  2020-03-05 22:18   ` Stephen Hemminger
  2020-03-24  4:02 ` [dpdk-stable] [dpdk-dev] " Ajit Khaparde
  1 sibling, 1 reply; 9+ messages in thread
From: Lance Richardson @ 2020-03-05 20:10 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, stable

Hi Stephen,

On Thu, Mar 5, 2020 at 1:45 AM Stephen Hemminger
<stephen@networkplumber.org> wrote:
>
<snip>
>
> Make the configuration use the same as other drivers with
> vector mode: ixge, i40e, ...
s/ixge/ixgbe/?

>
<snip>
> This will also make future support of vector mode on other
> architectures possible.
>
> Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
<snip>
> +#error "bnxt: IEEE1588 is incompatiable with vector mode"
> +#endif
s/incompatiable/incompatible/


This was this approach taken in the initial patch set to add bnxt
vector mode support,
however based on feedback the current approach was used instead. That discussion
can be found here:
      http://patches.dpdk.org/patch/53683/

If mark support could be treated as a receive offload, it would be
possible to choose
the non-vector receive handler based on whether mark is enabled. Adding a kvargs
option to disable vector mode might be another possibility. Otherwise,
a build-time
configuration option does seem to be useful.

LGTM... with the above:

Acked-by: Lance Richardson <lance.richardson@broadcom.com>

Regards,
    Lance

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
  2020-03-05 20:10 ` Lance Richardson
@ 2020-03-05 22:18   ` Stephen Hemminger
  2020-03-31 11:36     ` Ferruh Yigit
  0 siblings, 1 reply; 9+ messages in thread
From: Stephen Hemminger @ 2020-03-05 22:18 UTC (permalink / raw)
  To: Lance Richardson; +Cc: dev, stable

On Thu, 5 Mar 2020 15:10:48 -0500
Lance Richardson <lance.richardson@broadcom.com> wrote:

> Hi Stephen,
> 
> On Thu, Mar 5, 2020 at 1:45 AM Stephen Hemminger
> <stephen@networkplumber.org> wrote:
> >  
> <snip>
> >
> > Make the configuration use the same as other drivers with
> > vector mode: ixge, i40e, ...  
> s/ixge/ixgbe/?
> 
> >  
> <snip>
> > This will also make future support of vector mode on other
> > architectures possible.
> >
> > Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")  
> <snip>
> > +#error "bnxt: IEEE1588 is incompatiable with vector mode"
> > +#endif  
> s/incompatiable/incompatible/
> 
> 
> This was this approach taken in the initial patch set to add bnxt
> vector mode support,
> however based on feedback the current approach was used instead. That discussion
> can be found here:
>       http://patches.dpdk.org/patch/53683/
> 
> If mark support could be treated as a receive offload, it would be
> possible to choose
> the non-vector receive handler based on whether mark is enabled. Adding a kvargs
> option to disable vector mode might be another possibility. Otherwise,
> a build-time
> configuration option does seem to be useful.
> 
> LGTM... with the above:
> 
> Acked-by: Lance Richardson <lance.richardson@broadcom.com>

What ever solution must be consistent across all drivers.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH] net/bnxt: allow configuring vector mode
  2020-03-05  6:45 [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode Stephen Hemminger
  2020-03-05 20:10 ` Lance Richardson
@ 2020-03-24  4:02 ` Ajit Khaparde
  1 sibling, 0 replies; 9+ messages in thread
From: Ajit Khaparde @ 2020-03-24  4:02 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dpdk-dev, Lance Richardson, dpdk stable

On Wed, Mar 4, 2020 at 10:45 PM Stephen Hemminger <
stephen@networkplumber.org> wrote:

> The bnxt driver has vector mode but it has limitations.
> For example, rte_flow mark won't work in vector mode.
> For this reason the user should be able to disable vector mode
> as part of the config.
>
> Make the configuration use the same as other drivers with
> vector mode: ixge, i40e, ...
>
> This will also make future support of vector mode on other
> architectures possible.
>
> Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
> Cc: lance.richardson@broadcom.com
> Cc: stable@dpdk.org
> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
>
Patch applied to dpdk-next-net-brcm. Thanks



> ---
>  config/common_base             |  1 +
>  drivers/net/bnxt/Makefile      |  2 +-
>  drivers/net/bnxt/bnxt_ethdev.c | 10 +++-------
>  drivers/net/bnxt/bnxt_ring.c   |  4 ++--
>  drivers/net/bnxt/bnxt_rxr.c    |  3 +++
>  5 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/config/common_base b/config/common_base
> index 7ca2f28b19c8..3c719c7cbfc3 100644
> --- a/config/common_base
> +++ b/config/common_base
> @@ -219,6 +219,7 @@ CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
>  # Compile burst-oriented Broadcom BNXT PMD driver
>  #
>  CONFIG_RTE_LIBRTE_BNXT_PMD=y
> +CONFIG_RTE_LIBRTE_BNXT_INC_VECTOR=y
>
>  #
>  # Compile burst-oriented Chelsio Terminator (CXGBE) PMD
> diff --git a/drivers/net/bnxt/Makefile b/drivers/net/bnxt/Makefile
> index b77532b8179b..85d6df6b5aa0 100644
> --- a/drivers/net/bnxt/Makefile
> +++ b/drivers/net/bnxt/Makefile
> @@ -40,7 +40,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_irq.c
>  SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_util.c
>  SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += rte_pmd_bnxt.c
>  ifeq ($(CONFIG_RTE_ARCH_X86), y)
> -SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_rxtx_vec_sse.c
> +SRCS-$(CONFIG_RTE_LIBRTE_BNXT_INC_VECTOR) += bnxt_rxtx_vec_sse.c
>  endif
>
>  #
> diff --git a/drivers/net/bnxt/bnxt_ethdev.c
> b/drivers/net/bnxt/bnxt_ethdev.c
> index 18aa313fd8c1..701de33784b2 100644
> --- a/drivers/net/bnxt/bnxt_ethdev.c
> +++ b/drivers/net/bnxt/bnxt_ethdev.c
> @@ -757,8 +757,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
>  {
>         struct bnxt *bp = eth_dev->data->dev_private;
>
> -#ifdef RTE_ARCH_X86
> -#ifndef RTE_LIBRTE_IEEE1588
> +#ifdef RTE_BNXT_INC_VECTOR
>         /*
>          * Vector mode receive can be enabled only if scatter rx is not
>          * in use and rx offloads are limited to VLAN stripping and
> @@ -787,7 +786,6 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
>                     eth_dev->data->port_id,
>                     eth_dev->data->scattered_rx,
>                     eth_dev->data->dev_conf.rxmode.offloads);
> -#endif
>  #endif
>         bp->flags &= ~BNXT_FLAG_RX_VECTOR_PKT_MODE;
>         return bnxt_recv_pkts;
> @@ -796,8 +794,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
>  static eth_tx_burst_t
>  bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
>  {
> -#ifdef RTE_ARCH_X86
> -#ifndef RTE_LIBRTE_IEEE1588
> +#ifdef RTE_BNXT_INC_VECTOR
>         /*
>          * Vector mode transmit can be enabled only if not using scatter rx
>          * or tx offloads.
> @@ -815,7 +812,6 @@ bnxt_transmit_function(__rte_unused struct rte_eth_dev
> *eth_dev)
>                     eth_dev->data->port_id,
>                     eth_dev->data->scattered_rx,
>                     eth_dev->data->dev_conf.txmode.offloads);
> -#endif
>  #endif
>         return bnxt_xmit_pkts;
>  }
> @@ -2234,7 +2230,7 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev,
> uint16_t new_mtu)
>         new_pkt_size = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN +
>                        VLAN_TAG_SIZE * BNXT_NUM_VLANS;
>
> -#ifdef RTE_ARCH_X86
> +#ifdef RTE_BNXT_INC_VECTOR
>         /*
>          * If vector-mode tx/rx is active, disallow any MTU change that
> would
>          * require scattered receive support.
> diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
> index d6e4e8a28138..9a4a0f21418d 100644
> --- a/drivers/net/bnxt/bnxt_ring.c
> +++ b/drivers/net/bnxt/bnxt_ring.c
> @@ -608,7 +608,7 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int
> queue_index)
>                 bnxt_db_write(&rxr->ag_db, rxr->ag_prod);
>         }
>         rxq->index = queue_index;
> -#ifdef RTE_ARCH_X86
> +#ifdef RTE_BNXT_INC_VECTOR
>         bnxt_rxq_vec_setup(rxq);
>  #endif
>
> @@ -713,7 +713,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
>                 bnxt_db_write(&rxr->rx_db, rxr->rx_prod);
>                 bnxt_db_write(&rxr->ag_db, rxr->ag_prod);
>                 rxq->index = i;
> -#ifdef RTE_ARCH_X86
> +#ifdef RTE_BNXT_INC_VECTOR
>                 bnxt_rxq_vec_setup(rxq);
>  #endif
>         }
> diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
> index bef9720f590c..f9087bea89b9 100644
> --- a/drivers/net/bnxt/bnxt_rxr.c
> +++ b/drivers/net/bnxt/bnxt_rxr.c
> @@ -18,6 +18,9 @@
>  #include "hsi_struct_def_dpdk.h"
>  #ifdef RTE_LIBRTE_IEEE1588
>  #include "bnxt_hwrm.h"
> +#ifdef RTE_BNXT_INC_VECTOR
> +#error "bnxt: IEEE1588 is incompatiable with vector mode"
> +#endif
>  #endif
>
>  /*
> --
> 2.20.1
>
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
  2020-03-05 22:18   ` Stephen Hemminger
@ 2020-03-31 11:36     ` Ferruh Yigit
  2020-03-31 14:31       ` Ajit Khaparde
  0 siblings, 1 reply; 9+ messages in thread
From: Ferruh Yigit @ 2020-03-31 11:36 UTC (permalink / raw)
  To: Stephen Hemminger, Lance Richardson
  Cc: dev, stable, Ajit Khaparde, Thomas Monjalon, Bruce Richardson,
	Andrew Rybchenko

On 3/5/2020 10:18 PM, Stephen Hemminger wrote:
> On Thu, 5 Mar 2020 15:10:48 -0500
> Lance Richardson <lance.richardson@broadcom.com> wrote:
> 
>> Hi Stephen,
>>
>> On Thu, Mar 5, 2020 at 1:45 AM Stephen Hemminger
>> <stephen@networkplumber.org> wrote:
>>>  
>> <snip>
>>>
>>> Make the configuration use the same as other drivers with
>>> vector mode: ixge, i40e, ...  
>> s/ixge/ixgbe/?
>>
>>>  
>> <snip>
>>> This will also make future support of vector mode on other
>>> architectures possible.
>>>
>>> Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")  
>> <snip>
>>> +#error "bnxt: IEEE1588 is incompatiable with vector mode"
>>> +#endif  
>> s/incompatiable/incompatible/
>>
>>
>> This was this approach taken in the initial patch set to add bnxt
>> vector mode support,
>> however based on feedback the current approach was used instead. That discussion
>> can be found here:
>>       http://patches.dpdk.org/patch/53683/
>>
>> If mark support could be treated as a receive offload, it would be
>> possible to choose
>> the non-vector receive handler based on whether mark is enabled. Adding a kvargs
>> option to disable vector mode might be another possibility. Otherwise,
>> a build-time
>> configuration option does seem to be useful.
>>
>> LGTM... with the above:
>>
>> Acked-by: Lance Richardson <lance.richardson@broadcom.com>
> 
> What ever solution must be consistent across all drivers.
> 

I saw Ajit merged this patch to brcm tree, but I am not sure about it. We have
already removed this compile time option from some PMDs, and driver tries to
detect to use or not to use vectorization transparently.

This config is also a problem for the meson, which always sets the flag in a
hardcoded way.

But also I am not sure about to need to enable/disable vectorization explicitly,
this patch seems because of this need. As far as I remember in the past this
type of runtime configuration rejected to not make driver configuration more
complex.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
  2020-03-31 11:36     ` Ferruh Yigit
@ 2020-03-31 14:31       ` Ajit Khaparde
  2020-03-31 15:43         ` Thomas Monjalon
  0 siblings, 1 reply; 9+ messages in thread
From: Ajit Khaparde @ 2020-03-31 14:31 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: Stephen Hemminger, Lance Richardson, dpdk-dev, dpdk stable,
	Thomas Monjalon, Bruce Richardson, Andrew Rybchenko

On Tue, Mar 31, 2020 at 4:36 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:

> On 3/5/2020 10:18 PM, Stephen Hemminger wrote:
> > On Thu, 5 Mar 2020 15:10:48 -0500
> > Lance Richardson <lance.richardson@broadcom.com> wrote:
> >
> >> Hi Stephen,
> >>
> >> On Thu, Mar 5, 2020 at 1:45 AM Stephen Hemminger
> >> <stephen@networkplumber.org> wrote:
> >>>
> >> <snip>
> >>>
> >>> Make the configuration use the same as other drivers with
> >>> vector mode: ixge, i40e, ...
> >> s/ixge/ixgbe/?
> >>
> >>>
> >> <snip>
> >>> This will also make future support of vector mode on other
> >>> architectures possible.
> >>>
> >>> Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
> >> <snip>
> >>> +#error "bnxt: IEEE1588 is incompatiable with vector mode"
> >>> +#endif
> >> s/incompatiable/incompatible/
> >>
> >>
> >> This was this approach taken in the initial patch set to add bnxt
> >> vector mode support,
> >> however based on feedback the current approach was used instead. That
> discussion
> >> can be found here:
> >>       http://patches.dpdk.org/patch/53683/
> >>
> >> If mark support could be treated as a receive offload, it would be
> >> possible to choose
> >> the non-vector receive handler based on whether mark is enabled. Adding
> a kvargs
> >> option to disable vector mode might be another possibility. Otherwise,
> >> a build-time
> >> configuration option does seem to be useful.
> >>
> >> LGTM... with the above:
> >>
> >> Acked-by: Lance Richardson <lance.richardson@broadcom.com>
> >
> > What ever solution must be consistent across all drivers.
> >
>
> I saw Ajit merged this patch to brcm tree, but I am not sure about it. We
> have
> already removed this compile time option from some PMDs, and driver tries
> to
> detect to use or not to use vectorization transparently.
>
> This config is also a problem for the meson, which always sets the flag in
> a
> hardcoded way.
>
> But also I am not sure about to need to enable/disable vectorization
> explicitly,
> this patch seems because of this need. As far as I remember in the past
> this
> type of runtime configuration rejected to not make driver configuration
> more
> complex.

Since we need a way to disable or enable vector mode.
May be a dev parameter could be used?
That way it would not interfere with the meson builds and also allow a
user/application to set vector mode setting as desired.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
  2020-03-31 14:31       ` Ajit Khaparde
@ 2020-03-31 15:43         ` Thomas Monjalon
  2020-03-31 15:58           ` Stephen Hemminger
  0 siblings, 1 reply; 9+ messages in thread
From: Thomas Monjalon @ 2020-03-31 15:43 UTC (permalink / raw)
  To: Ferruh Yigit, Ajit Khaparde
  Cc: Stephen Hemminger, Lance Richardson, dpdk-dev, dpdk stable,
	Bruce Richardson, Andrew Rybchenko

31/03/2020 16:31, Ajit Khaparde:
> On Tue, Mar 31, 2020 at 4:36 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> 
> > On 3/5/2020 10:18 PM, Stephen Hemminger wrote:
> > > On Thu, 5 Mar 2020 15:10:48 -0500
> > > Lance Richardson <lance.richardson@broadcom.com> wrote:
> > >
> > >> Hi Stephen,
> > >>
> > >> On Thu, Mar 5, 2020 at 1:45 AM Stephen Hemminger
> > >> <stephen@networkplumber.org> wrote:
> > >>>
> > >> <snip>
> > >>>
> > >>> Make the configuration use the same as other drivers with
> > >>> vector mode: ixge, i40e, ...
> > >> s/ixge/ixgbe/?
> > >>
> > >>>
> > >> <snip>
> > >>> This will also make future support of vector mode on other
> > >>> architectures possible.
> > >>>
> > >>> Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
> > >> <snip>
> > >>> +#error "bnxt: IEEE1588 is incompatiable with vector mode"
> > >>> +#endif
> > >> s/incompatiable/incompatible/
> > >>
> > >>
> > >> This was this approach taken in the initial patch set to add bnxt
> > >> vector mode support,
> > >> however based on feedback the current approach was used instead. That
> > discussion
> > >> can be found here:
> > >>       http://patches.dpdk.org/patch/53683/
> > >>
> > >> If mark support could be treated as a receive offload, it would be
> > >> possible to choose
> > >> the non-vector receive handler based on whether mark is enabled. Adding
> > a kvargs
> > >> option to disable vector mode might be another possibility. Otherwise,
> > >> a build-time
> > >> configuration option does seem to be useful.
> > >>
> > >> LGTM... with the above:
> > >>
> > >> Acked-by: Lance Richardson <lance.richardson@broadcom.com>
> > >
> > > What ever solution must be consistent across all drivers.
> > >
> >
> > I saw Ajit merged this patch to brcm tree, but I am not sure about it. We
> > have
> > already removed this compile time option from some PMDs, and driver tries
> > to
> > detect to use or not to use vectorization transparently.
> >
> > This config is also a problem for the meson, which always sets the flag in
> > a
> > hardcoded way.
> >
> > But also I am not sure about to need to enable/disable vectorization
> > explicitly,
> > this patch seems because of this need. As far as I remember in the past
> > this
> > type of runtime configuration rejected to not make driver configuration
> > more
> > complex.
> 
> Since we need a way to disable or enable vector mode.

Why do you need to disable vector optimization?
Is it for debugging?

> May be a dev parameter could be used?
> That way it would not interfere with the meson builds and also allow a
> user/application to set vector mode setting as desired.

Yes diasbling optimization could be done in devargs.



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
  2020-03-31 15:43         ` Thomas Monjalon
@ 2020-03-31 15:58           ` Stephen Hemminger
  0 siblings, 0 replies; 9+ messages in thread
From: Stephen Hemminger @ 2020-03-31 15:58 UTC (permalink / raw)
  To: Thomas Monjalon
  Cc: Ferruh Yigit, Ajit Khaparde, Lance Richardson, dpdk-dev,
	dpdk stable, Bruce Richardson, Andrew Rybchenko

On Tue, 31 Mar 2020 17:43:55 +0200
Thomas Monjalon <thomas@monjalon.net> wrote:

> 31/03/2020 16:31, Ajit Khaparde:
> > On Tue, Mar 31, 2020 at 4:36 AM Ferruh Yigit <ferruh.yigit@intel.com> wrote:
> >   
> > > On 3/5/2020 10:18 PM, Stephen Hemminger wrote:  
> > > > On Thu, 5 Mar 2020 15:10:48 -0500
> > > > Lance Richardson <lance.richardson@broadcom.com> wrote:
> > > >  
> > > >> Hi Stephen,
> > > >>
> > > >> On Thu, Mar 5, 2020 at 1:45 AM Stephen Hemminger
> > > >> <stephen@networkplumber.org> wrote:  
> > > >>>  
> > > >> <snip>  
> > > >>>
> > > >>> Make the configuration use the same as other drivers with
> > > >>> vector mode: ixge, i40e, ...  
> > > >> s/ixge/ixgbe/?
> > > >>  
> > > >>>  
> > > >> <snip>  
> > > >>> This will also make future support of vector mode on other
> > > >>> architectures possible.
> > > >>>
> > > >>> Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")  
> > > >> <snip>  
> > > >>> +#error "bnxt: IEEE1588 is incompatiable with vector mode"
> > > >>> +#endif  
> > > >> s/incompatiable/incompatible/
> > > >>
> > > >>
> > > >> This was this approach taken in the initial patch set to add bnxt
> > > >> vector mode support,
> > > >> however based on feedback the current approach was used instead. That  
> > > discussion  
> > > >> can be found here:
> > > >>       http://patches.dpdk.org/patch/53683/
> > > >>
> > > >> If mark support could be treated as a receive offload, it would be
> > > >> possible to choose
> > > >> the non-vector receive handler based on whether mark is enabled. Adding  
> > > a kvargs  
> > > >> option to disable vector mode might be another possibility. Otherwise,
> > > >> a build-time
> > > >> configuration option does seem to be useful.
> > > >>
> > > >> LGTM... with the above:
> > > >>
> > > >> Acked-by: Lance Richardson <lance.richardson@broadcom.com>  
> > > >
> > > > What ever solution must be consistent across all drivers.
> > > >  
> > >
> > > I saw Ajit merged this patch to brcm tree, but I am not sure about it. We
> > > have
> > > already removed this compile time option from some PMDs, and driver tries
> > > to
> > > detect to use or not to use vectorization transparently.
> > >
> > > This config is also a problem for the meson, which always sets the flag in
> > > a
> > > hardcoded way.
> > >
> > > But also I am not sure about to need to enable/disable vectorization
> > > explicitly,
> > > this patch seems because of this need. As far as I remember in the past
> > > this
> > > type of runtime configuration rejected to not make driver configuration
> > > more
> > > complex.  
> > 
> > Since we need a way to disable or enable vector mode.  
> 
> Why do you need to disable vector optimization?
> Is it for debugging?

The rte_flow mark operation does not work with the vector optimization.

The choice to use vector mode is done by the driver earlier in
the initialization process, and then when application programs rte_flow
it has a problem; the flow create would fail.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode
@ 2020-03-05  6:40 Stephen Hemminger
  0 siblings, 0 replies; 9+ messages in thread
From: Stephen Hemminger @ 2020-03-05  6:40 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger, lance.richardson, stable

The bnxt driver has vector mode but it has limitations.
For example, rte_flow mark won't work in vector mode.
For this reason the user should be able to disable vector mode
as part of the config.

Make the configuration use the same as other drivers with
vector mode: ixge, i40e, ...

This will also make future support of vector mode on other
architectures possible.

Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
Cc: lance.richardson@broadcom.com
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
 config/common_base             |  1 +
 drivers/net/bnxt/Makefile      |  2 +-
 drivers/net/bnxt/bnxt_ethdev.c | 10 +++-------
 drivers/net/bnxt/bnxt_ring.c   |  4 ++--
 drivers/net/bnxt/bnxt_rxr.c    |  3 +++
 5 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/config/common_base b/config/common_base
index 7ca2f28b19c8..3c719c7cbfc3 100644
--- a/config/common_base
+++ b/config/common_base
@@ -219,6 +219,7 @@ CONFIG_RTE_LIBRTE_BNX2X_DEBUG_PERIODIC=n
 # Compile burst-oriented Broadcom BNXT PMD driver
 #
 CONFIG_RTE_LIBRTE_BNXT_PMD=y
+CONFIG_RTE_LIBRTE_BNXT_INC_VECTOR=y
 
 #
 # Compile burst-oriented Chelsio Terminator (CXGBE) PMD
diff --git a/drivers/net/bnxt/Makefile b/drivers/net/bnxt/Makefile
index b77532b8179b..85d6df6b5aa0 100644
--- a/drivers/net/bnxt/Makefile
+++ b/drivers/net/bnxt/Makefile
@@ -40,7 +40,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_irq.c
 SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_util.c
 SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += rte_pmd_bnxt.c
 ifeq ($(CONFIG_RTE_ARCH_X86), y)
-SRCS-$(CONFIG_RTE_LIBRTE_BNXT_PMD) += bnxt_rxtx_vec_sse.c
+SRCS-$(CONFIG_RTE_LIBRTE_BNXT_INC_VECTOR) += bnxt_rxtx_vec_sse.c
 endif
 
 #
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 18aa313fd8c1..701de33784b2 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -757,8 +757,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
 {
 	struct bnxt *bp = eth_dev->data->dev_private;
 
-#ifdef RTE_ARCH_X86
-#ifndef RTE_LIBRTE_IEEE1588
+#ifdef RTE_BNXT_INC_VECTOR
 	/*
 	 * Vector mode receive can be enabled only if scatter rx is not
 	 * in use and rx offloads are limited to VLAN stripping and
@@ -787,7 +786,6 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
 		    eth_dev->data->port_id,
 		    eth_dev->data->scattered_rx,
 		    eth_dev->data->dev_conf.rxmode.offloads);
-#endif
 #endif
 	bp->flags &= ~BNXT_FLAG_RX_VECTOR_PKT_MODE;
 	return bnxt_recv_pkts;
@@ -796,8 +794,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)
 static eth_tx_burst_t
 bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
 {
-#ifdef RTE_ARCH_X86
-#ifndef RTE_LIBRTE_IEEE1588
+#ifdef RTE_BNXT_INC_VECTOR
 	/*
 	 * Vector mode transmit can be enabled only if not using scatter rx
 	 * or tx offloads.
@@ -815,7 +812,6 @@ bnxt_transmit_function(__rte_unused struct rte_eth_dev *eth_dev)
 		    eth_dev->data->port_id,
 		    eth_dev->data->scattered_rx,
 		    eth_dev->data->dev_conf.txmode.offloads);
-#endif
 #endif
 	return bnxt_xmit_pkts;
 }
@@ -2234,7 +2230,7 @@ int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu)
 	new_pkt_size = new_mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN +
 		       VLAN_TAG_SIZE * BNXT_NUM_VLANS;
 
-#ifdef RTE_ARCH_X86
+#ifdef RTE_BNXT_INC_VECTOR
 	/*
 	 * If vector-mode tx/rx is active, disallow any MTU change that would
 	 * require scattered receive support.
diff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c
index d6e4e8a28138..9a4a0f21418d 100644
--- a/drivers/net/bnxt/bnxt_ring.c
+++ b/drivers/net/bnxt/bnxt_ring.c
@@ -608,7 +608,7 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)
 		bnxt_db_write(&rxr->ag_db, rxr->ag_prod);
 	}
 	rxq->index = queue_index;
-#ifdef RTE_ARCH_X86
+#ifdef RTE_BNXT_INC_VECTOR
 	bnxt_rxq_vec_setup(rxq);
 #endif
 
@@ -713,7 +713,7 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)
 		bnxt_db_write(&rxr->rx_db, rxr->rx_prod);
 		bnxt_db_write(&rxr->ag_db, rxr->ag_prod);
 		rxq->index = i;
-#ifdef RTE_ARCH_X86
+#ifdef RTE_BNXT_INC_VECTOR
 		bnxt_rxq_vec_setup(rxq);
 #endif
 	}
diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index bef9720f590c..f9087bea89b9 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -18,6 +18,9 @@
 #include "hsi_struct_def_dpdk.h"
 #ifdef RTE_LIBRTE_IEEE1588
 #include "bnxt_hwrm.h"
+#ifdef RTE_BNXT_INC_VECTOR
+#error "bnxt: IEEE1588 is incompatiable with vector mode"
+#endif
 #endif
 
 /*
-- 
2.20.1


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-03-31 15:58 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-05  6:45 [dpdk-stable] [PATCH] net/bnxt: allow configuring vector mode Stephen Hemminger
2020-03-05 20:10 ` Lance Richardson
2020-03-05 22:18   ` Stephen Hemminger
2020-03-31 11:36     ` Ferruh Yigit
2020-03-31 14:31       ` Ajit Khaparde
2020-03-31 15:43         ` Thomas Monjalon
2020-03-31 15:58           ` Stephen Hemminger
2020-03-24  4:02 ` [dpdk-stable] [dpdk-dev] " Ajit Khaparde
  -- strict thread matches above, loose matches on Subject: below --
2020-03-05  6:40 [dpdk-stable] " Stephen Hemminger

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).