[v5,5/5] net/sfc: report user flag on EF100 native datapath

Message ID 20211005155639.12277-6-ivan.malov@oktetlabs.ru (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers
Series ethdev: negotiate the NIC's ability to deliver Rx metadata to the PMD |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/github-robot: build success github build: passed
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-x86_64-compile-testing fail Testing issues
ci/iol-x86_64-unit-testing fail Testing issues

Commit Message

Ivan Malov Oct. 5, 2021, 3:56 p.m. UTC
  Detect the flag in Rx prefix and pass it to users.

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
 drivers/net/sfc/sfc_ef100_rx.c | 18 ++++++++++++++++++
 drivers/net/sfc/sfc_rx.c       |  3 +++
 2 files changed, 21 insertions(+)
  

Comments

Ferruh Yigit Oct. 12, 2021, 6:08 p.m. UTC | #1
On 10/5/2021 4:56 PM, Ivan Malov wrote:
> Detect the flag in Rx prefix and pass it to users.
> 
> Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> Reviewed-by: Andy Moreton <amoreton@xilinx.com>

<...>

> @@ -407,6 +409,15 @@ sfc_ef100_rx_prefix_to_offloads(const struct sfc_ef100_rxq *rxq,
>   					      ESF_GZ_RX_PREFIX_RSS_HASH);
>   	}
>   
> +	if (rxq->flags & SFC_EF100_RXQ_USER_FLAG) {
> +		uint32_t user_flag;
> +
> +		user_flag = EFX_OWORD_FIELD(rx_prefix[0],
> +					    ESF_GZ_RX_PREFIX_USER_FLAG);
> +		if (user_flag != 0)
> +			ol_flags |= PKT_RX_FDIR;
> +	}
> +

Hi Ivan,

This cause a build error after another sfc patch merged into next-net [1].
Following change [2] seems fixing the issue, but to be sure nothing is missed
can you please send a new version rebasing on top of latest next-net?


[1]
Commit d86c6ced8732 ("net/sfc: use xword type for EF100 Rx prefix")

[2]
diff --git a/drivers/net/sfc/sfc_ef100_rx.c b/drivers/net/sfc/sfc_ef100_rx.c
index 704c62c0ac90..8237b772f151 100644
--- a/drivers/net/sfc/sfc_ef100_rx.c
+++ b/drivers/net/sfc/sfc_ef100_rx.c
@@ -415,7 +415,7 @@ sfc_ef100_rx_prefix_to_offloads(const struct sfc_ef100_rxq *rxq,
         if (rxq->flags & SFC_EF100_RXQ_USER_FLAG) {
                 uint32_t user_flag;
  
-               user_flag = EFX_OWORD_FIELD(rx_prefix[0],
+               user_flag = EFX_XWORD_FIELD(rx_prefix[0],
                                             ESF_GZ_RX_PREFIX_USER_FLAG);
                 if (user_flag != 0)
                         ol_flags |= PKT_RX_FDIR;
  
Ivan Malov Oct. 12, 2021, 7:39 p.m. UTC | #2
Hi Ferruh,

On 12/10/2021 21:08, Ferruh Yigit wrote:
> On 10/5/2021 4:56 PM, Ivan Malov wrote:
>> Detect the flag in Rx prefix and pass it to users.
>>
>> Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
>> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>> Reviewed-by: Andy Moreton <amoreton@xilinx.com>
> 
> <...>
> 
>> @@ -407,6 +409,15 @@ sfc_ef100_rx_prefix_to_offloads(const struct 
>> sfc_ef100_rxq *rxq,
>>                             ESF_GZ_RX_PREFIX_RSS_HASH);
>>       }
>> +    if (rxq->flags & SFC_EF100_RXQ_USER_FLAG) {
>> +        uint32_t user_flag;
>> +
>> +        user_flag = EFX_OWORD_FIELD(rx_prefix[0],
>> +                        ESF_GZ_RX_PREFIX_USER_FLAG);
>> +        if (user_flag != 0)
>> +            ol_flags |= PKT_RX_FDIR;
>> +    }
>> +
> 
> Hi Ivan,
> 
> This cause a build error after another sfc patch merged into next-net [1].
> Following change [2] seems fixing the issue, but to be sure nothing is 
> missed
> can you please send a new version rebasing on top of latest next-net?

Done. Thank you.

> 
> 
> [1]
> Commit d86c6ced8732 ("net/sfc: use xword type for EF100 Rx prefix")
> 
> [2]
> diff --git a/drivers/net/sfc/sfc_ef100_rx.c 
> b/drivers/net/sfc/sfc_ef100_rx.c
> index 704c62c0ac90..8237b772f151 100644
> --- a/drivers/net/sfc/sfc_ef100_rx.c
> +++ b/drivers/net/sfc/sfc_ef100_rx.c
> @@ -415,7 +415,7 @@ sfc_ef100_rx_prefix_to_offloads(const struct 
> sfc_ef100_rxq *rxq,
>          if (rxq->flags & SFC_EF100_RXQ_USER_FLAG) {
>                  uint32_t user_flag;
> 
> -               user_flag = EFX_OWORD_FIELD(rx_prefix[0],
> +               user_flag = EFX_XWORD_FIELD(rx_prefix[0],
>                                              ESF_GZ_RX_PREFIX_USER_FLAG);
>                  if (user_flag != 0)
>                          ol_flags |= PKT_RX_FDIR;
  
Ivan Malov Oct. 12, 2021, 7:48 p.m. UTC | #3
Hi Ferruh,

I apologise: there was a defect in v6. I re-submitted the series (v7):
https://patches.dpdk.org/project/dpdk/list/?series=19571

Thank you.

On 12/10/2021 21:08, Ferruh Yigit wrote:
> On 10/5/2021 4:56 PM, Ivan Malov wrote:
>> Detect the flag in Rx prefix and pass it to users.
>>
>> Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
>> Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
>> Reviewed-by: Andy Moreton <amoreton@xilinx.com>
> 
> <...>
> 
>> @@ -407,6 +409,15 @@ sfc_ef100_rx_prefix_to_offloads(const struct 
>> sfc_ef100_rxq *rxq,
>>                             ESF_GZ_RX_PREFIX_RSS_HASH);
>>       }
>> +    if (rxq->flags & SFC_EF100_RXQ_USER_FLAG) {
>> +        uint32_t user_flag;
>> +
>> +        user_flag = EFX_OWORD_FIELD(rx_prefix[0],
>> +                        ESF_GZ_RX_PREFIX_USER_FLAG);
>> +        if (user_flag != 0)
>> +            ol_flags |= PKT_RX_FDIR;
>> +    }
>> +
> 
> Hi Ivan,
> 
> This cause a build error after another sfc patch merged into next-net [1].
> Following change [2] seems fixing the issue, but to be sure nothing is 
> missed
> can you please send a new version rebasing on top of latest next-net?
> 
> 
> [1]
> Commit d86c6ced8732 ("net/sfc: use xword type for EF100 Rx prefix")
> 
> [2]
> diff --git a/drivers/net/sfc/sfc_ef100_rx.c 
> b/drivers/net/sfc/sfc_ef100_rx.c
> index 704c62c0ac90..8237b772f151 100644
> --- a/drivers/net/sfc/sfc_ef100_rx.c
> +++ b/drivers/net/sfc/sfc_ef100_rx.c
> @@ -415,7 +415,7 @@ sfc_ef100_rx_prefix_to_offloads(const struct 
> sfc_ef100_rxq *rxq,
>          if (rxq->flags & SFC_EF100_RXQ_USER_FLAG) {
>                  uint32_t user_flag;
> 
> -               user_flag = EFX_OWORD_FIELD(rx_prefix[0],
> +               user_flag = EFX_XWORD_FIELD(rx_prefix[0],
>                                              ESF_GZ_RX_PREFIX_USER_FLAG);
>                  if (user_flag != 0)
>                          ol_flags |= PKT_RX_FDIR;
  

Patch

diff --git a/drivers/net/sfc/sfc_ef100_rx.c b/drivers/net/sfc/sfc_ef100_rx.c
index b634c8f23a..7d0d6b3d00 100644
--- a/drivers/net/sfc/sfc_ef100_rx.c
+++ b/drivers/net/sfc/sfc_ef100_rx.c
@@ -62,6 +62,7 @@  struct sfc_ef100_rxq {
 #define SFC_EF100_RXQ_RSS_HASH		0x10
 #define SFC_EF100_RXQ_USER_MARK		0x20
 #define SFC_EF100_RXQ_FLAG_INTR_EN	0x40
+#define SFC_EF100_RXQ_USER_FLAG		0x80
 	unsigned int			ptr_mask;
 	unsigned int			evq_phase_bit_shift;
 	unsigned int			ready_pkts;
@@ -371,6 +372,7 @@  static const efx_rx_prefix_layout_t sfc_ef100_rx_prefix_layout = {
 		SFC_EF100_RX_PREFIX_FIELD(RSS_HASH_VALID, B_FALSE),
 		SFC_EF100_RX_PREFIX_FIELD(CLASS, B_FALSE),
 		SFC_EF100_RX_PREFIX_FIELD(RSS_HASH, B_FALSE),
+		SFC_EF100_RX_PREFIX_FIELD(USER_FLAG, B_FALSE),
 		SFC_EF100_RX_PREFIX_FIELD(USER_MARK, B_FALSE),
 
 #undef	SFC_EF100_RX_PREFIX_FIELD
@@ -407,6 +409,15 @@  sfc_ef100_rx_prefix_to_offloads(const struct sfc_ef100_rxq *rxq,
 					      ESF_GZ_RX_PREFIX_RSS_HASH);
 	}
 
+	if (rxq->flags & SFC_EF100_RXQ_USER_FLAG) {
+		uint32_t user_flag;
+
+		user_flag = EFX_OWORD_FIELD(rx_prefix[0],
+					    ESF_GZ_RX_PREFIX_USER_FLAG);
+		if (user_flag != 0)
+			ol_flags |= PKT_RX_FDIR;
+	}
+
 	if (rxq->flags & SFC_EF100_RXQ_USER_MARK) {
 		uint32_t user_mark;
 
@@ -800,6 +811,12 @@  sfc_ef100_rx_qstart(struct sfc_dp_rxq *dp_rxq, unsigned int evq_read_ptr,
 	else
 		rxq->flags &= ~SFC_EF100_RXQ_RSS_HASH;
 
+	if ((unsup_rx_prefix_fields &
+	     (1U << EFX_RX_PREFIX_FIELD_USER_FLAG)) == 0)
+		rxq->flags |= SFC_EF100_RXQ_USER_FLAG;
+	else
+		rxq->flags &= ~SFC_EF100_RXQ_USER_FLAG;
+
 	if ((unsup_rx_prefix_fields &
 	     (1U << EFX_RX_PREFIX_FIELD_USER_MARK)) == 0)
 		rxq->flags |= SFC_EF100_RXQ_USER_MARK;
@@ -914,6 +931,7 @@  struct sfc_dp_rx sfc_ef100_rx = {
 		.hw_fw_caps	= SFC_DP_HW_FW_CAP_EF100,
 	},
 	.features		= SFC_DP_RX_FEAT_MULTI_PROCESS |
+				  SFC_DP_RX_FEAT_FLOW_FLAG |
 				  SFC_DP_RX_FEAT_FLOW_MARK |
 				  SFC_DP_RX_FEAT_INTR,
 	.dev_offload_capa	= 0,
diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c
index 5b924010bd..5e120f5851 100644
--- a/drivers/net/sfc/sfc_rx.c
+++ b/drivers/net/sfc/sfc_rx.c
@@ -1178,6 +1178,9 @@  sfc_rx_qinit(struct sfc_adapter *sa, sfc_sw_index_t sw_index,
 	if (offloads & DEV_RX_OFFLOAD_RSS_HASH)
 		rxq_info->type_flags |= EFX_RXQ_FLAG_RSS_HASH;
 
+	if ((sa->negotiated_rx_metadata & RTE_ETH_RX_METADATA_USER_FLAG) != 0)
+		rxq_info->type_flags |= EFX_RXQ_FLAG_USER_FLAG;
+
 	if ((sa->negotiated_rx_metadata & RTE_ETH_RX_METADATA_USER_MARK) != 0)
 		rxq_info->type_flags |= EFX_RXQ_FLAG_USER_MARK;