diff mbox

[next,v2,15/15] i40evf: Update feature flags to reflect newly enabled features

Message ID 20160122002829.18278.45002.stgit@localhost.localdomain
State Superseded
Headers show

Commit Message

Alexander Duyck Jan. 22, 2016, 12:28 a.m. UTC
Recent changes should have enabled support for IPv6 based tunnels and
support for TSO with outer UDP checksums.  As such we can update the
feature flags to reflect that.

In addition we can clean-up the flags that aren't needed such as SCTP and
RXCSUM since having the bits there doesn't add any value.

I also found one spot where we were setting the same flag twice.  It looks
like it was probably a git merge error that resulted in the line being
duplicated.  As such I have dropped it in this patch.

Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
---
 drivers/net/ethernet/intel/i40evf/i40evf_main.c |   23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

Comments

Singhai, Anjali Jan. 22, 2016, 9:27 p.m. UTC | #1
We haven't SVed any of the tunnel offloads in the VF, I am assuming you 
tried this.

On 1/21/2016 4:28 PM, Alexander Duyck wrote:
> Recent changes should have enabled support for IPv6 based tunnels and
> support for TSO with outer UDP checksums.  As such we can update the
> feature flags to reflect that.
>
> In addition we can clean-up the flags that aren't needed such as SCTP and
> RXCSUM since having the bits there doesn't add any value.
>
> I also found one spot where we were setting the same flag twice.  It looks
> like it was probably a git merge error that resulted in the line being
> duplicated.  As such I have dropped it in this patch.
>
> Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
> ---
>   drivers/net/ethernet/intel/i40evf/i40evf_main.c |   23 +++++++++++++++++++----
>   1 file changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
> index 41369a30dfb8..3396fe32cc6d 100644
> --- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c
> +++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
> @@ -2337,9 +2337,24 @@ int i40evf_process_config(struct i40evf_adapter *adapter)
>   			    NETIF_F_IPV6_CSUM |
>   			    NETIF_F_TSO |
>   			    NETIF_F_TSO6 |
> +			    NETIF_F_TSO_ECN |
> +			    NETIF_F_GSO_GRE	       |
> +			    NETIF_F_GSO_UDP_TUNNEL |
>   			    NETIF_F_RXCSUM |
>   			    NETIF_F_GRO;
>   
> +	netdev->hw_enc_features |= NETIF_F_IP_CSUM	       |
> +				   NETIF_F_IPV6_CSUM	       |
> +				   NETIF_F_TSO		       |
> +				   NETIF_F_TSO6		       |
> +				   NETIF_F_TSO_ECN	       |
> +				   NETIF_F_GSO_GRE	       |
> +				   NETIF_F_GSO_UDP_TUNNEL      |
> +				   NETIF_F_GSO_UDP_TUNNEL_CSUM;
> +
> +	if (adapter->flags & I40EVF_FLAG_OUTER_UDP_CSUM_CAPABLE)
> +		netdev->features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
> +
>   	/* copy netdev features into list of user selectable features */
>   	netdev->hw_features |= netdev->features;
>   	netdev->hw_features &= ~NETIF_F_RXCSUM;
> @@ -2478,6 +2493,10 @@ static void i40evf_init_task(struct work_struct *work)
>   	default:
>   		goto err_alloc;
>   	}
> +
> +	if (hw->mac.type == I40E_MAC_X722_VF)
> +		adapter->flags |= I40EVF_FLAG_OUTER_UDP_CSUM_CAPABLE;
> +
>   	if (i40evf_process_config(adapter))
>   		goto err_alloc;
>   	adapter->current_op = I40E_VIRTCHNL_OP_UNKNOWN;
> @@ -2519,10 +2538,6 @@ static void i40evf_init_task(struct work_struct *work)
>   		goto err_sw_init;
>   	i40evf_map_rings_to_vectors(adapter);
>   	if (adapter->vf_res->vf_offload_flags &
> -		    I40E_VIRTCHNL_VF_OFFLOAD_WB_ON_ITR)
> -		adapter->flags |= I40EVF_FLAG_WB_ON_ITR_CAPABLE;
> -
> -	if (adapter->vf_res->vf_offload_flags &
>   	    I40E_VIRTCHNL_VF_OFFLOAD_WB_ON_ITR)
>   		adapter->flags |= I40EVF_FLAG_WB_ON_ITR_CAPABLE;
>   
>
> _______________________________________________
> Intel-wired-lan mailing list
> Intel-wired-lan@lists.osuosl.org
> http://lists.osuosl.org/mailman/listinfo/intel-wired-lan
Alexander Duyck Jan. 22, 2016, 9:36 p.m. UTC | #2
On Fri, Jan 22, 2016 at 1:27 PM, Singhai, Anjali
<anjali.singhai@intel.com> wrote:
> We haven't SVed any of the tunnel offloads in the VF, I am assuming you
> tried this.

Yes, I've been testing it with an XL710.  For the most part if it is
PF or VF it shouldn't really matter.  The descriptor format is all the
same for the Tx rings so the offload functionality all works the same.
diff mbox

Patch

diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
index 41369a30dfb8..3396fe32cc6d 100644
--- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c
+++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c
@@ -2337,9 +2337,24 @@  int i40evf_process_config(struct i40evf_adapter *adapter)
 			    NETIF_F_IPV6_CSUM |
 			    NETIF_F_TSO |
 			    NETIF_F_TSO6 |
+			    NETIF_F_TSO_ECN |
+			    NETIF_F_GSO_GRE	       |
+			    NETIF_F_GSO_UDP_TUNNEL |
 			    NETIF_F_RXCSUM |
 			    NETIF_F_GRO;
 
+	netdev->hw_enc_features |= NETIF_F_IP_CSUM	       |
+				   NETIF_F_IPV6_CSUM	       |
+				   NETIF_F_TSO		       |
+				   NETIF_F_TSO6		       |
+				   NETIF_F_TSO_ECN	       |
+				   NETIF_F_GSO_GRE	       |
+				   NETIF_F_GSO_UDP_TUNNEL      |
+				   NETIF_F_GSO_UDP_TUNNEL_CSUM;
+
+	if (adapter->flags & I40EVF_FLAG_OUTER_UDP_CSUM_CAPABLE)
+		netdev->features |= NETIF_F_GSO_UDP_TUNNEL_CSUM;
+
 	/* copy netdev features into list of user selectable features */
 	netdev->hw_features |= netdev->features;
 	netdev->hw_features &= ~NETIF_F_RXCSUM;
@@ -2478,6 +2493,10 @@  static void i40evf_init_task(struct work_struct *work)
 	default:
 		goto err_alloc;
 	}
+
+	if (hw->mac.type == I40E_MAC_X722_VF)
+		adapter->flags |= I40EVF_FLAG_OUTER_UDP_CSUM_CAPABLE;
+
 	if (i40evf_process_config(adapter))
 		goto err_alloc;
 	adapter->current_op = I40E_VIRTCHNL_OP_UNKNOWN;
@@ -2519,10 +2538,6 @@  static void i40evf_init_task(struct work_struct *work)
 		goto err_sw_init;
 	i40evf_map_rings_to_vectors(adapter);
 	if (adapter->vf_res->vf_offload_flags &
-		    I40E_VIRTCHNL_VF_OFFLOAD_WB_ON_ITR)
-		adapter->flags |= I40EVF_FLAG_WB_ON_ITR_CAPABLE;
-
-	if (adapter->vf_res->vf_offload_flags &
 	    I40E_VIRTCHNL_VF_OFFLOAD_WB_ON_ITR)
 		adapter->flags |= I40EVF_FLAG_WB_ON_ITR_CAPABLE;