[dpdk-dev] [PATCH v3 10/10] vdpa/sfc: set a multicast filter during vDPA init

Xia, Chenbo chenbo.xia at intel.com
Tue Nov 2 09:18:27 CET 2021


> -----Original Message-----
> From: Vijay Srivastava <vijay.srivastava at xilinx.com>
> Sent: Friday, October 29, 2021 10:47 PM
> To: dev at dpdk.org
> Cc: maxime.coquelin at redhat.com; Xia, Chenbo <chenbo.xia at intel.com>;
> andrew.rybchenko at oktetlabs.ru; Vijay Kumar Srivastava <vsrivast at xilinx.com>
> Subject: [PATCH v3 10/10] vdpa/sfc: set a multicast filter during vDPA init
> 
> From: Vijay Kumar Srivastava <vsrivast at xilinx.com>
> 
> Insert unknown multicast filter to allow IPv6 neighbor discovery
> 
> Signed-off-by: Vijay Kumar Srivastava <vsrivast at xilinx.com>
> Acked-by: Andrew Rybchenko <andrew.rybchenko at oktetlabs.ru>
> ---
>  drivers/vdpa/sfc/sfc_vdpa.h        |  3 ++-
>  drivers/vdpa/sfc/sfc_vdpa_filter.c | 19 +++++++++++++++++--
>  2 files changed, 19 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/vdpa/sfc/sfc_vdpa.h b/drivers/vdpa/sfc/sfc_vdpa.h
> index dbd099f..bedc76c 100644
> --- a/drivers/vdpa/sfc/sfc_vdpa.h
> +++ b/drivers/vdpa/sfc/sfc_vdpa.h
> @@ -21,7 +21,7 @@
>  #define SFC_VDPA_DEFAULT_MCDI_IOVA		0x200000000000
> 
>  /* Broadcast & Unicast MAC filters are supported */
> -#define SFC_MAX_SUPPORTED_FILTERS		2
> +#define SFC_MAX_SUPPORTED_FILTERS		3
> 
>  /*
>   * Get function-local index of the associated VI from the
> @@ -32,6 +32,7 @@
>  enum sfc_vdpa_filter_type {
>  	SFC_VDPA_BCAST_MAC_FILTER = 0,
>  	SFC_VDPA_UCAST_MAC_FILTER = 1,
> +	SFC_VDPA_MCAST_DST_FILTER = 2,
>  	SFC_VDPA_FILTER_NTYPE
>  };
> 
> diff --git a/drivers/vdpa/sfc/sfc_vdpa_filter.c
> b/drivers/vdpa/sfc/sfc_vdpa_filter.c
> index 03b6a5d..74204d3 100644
> --- a/drivers/vdpa/sfc/sfc_vdpa_filter.c
> +++ b/drivers/vdpa/sfc/sfc_vdpa_filter.c
> @@ -39,8 +39,12 @@
>  	spec->efs_flags = EFX_FILTER_FLAG_RX;
>  	spec->efs_dmaq_id = qid;
> 
> -	rc = efx_filter_spec_set_eth_local(spec, EFX_FILTER_SPEC_VID_UNSPEC,
> -					   eth_addr);
> +	if (eth_addr == NULL)
> +		rc = efx_filter_spec_set_mc_def(spec);
> +	else
> +		rc = efx_filter_spec_set_eth_local(spec,
> +						   EFX_FILTER_SPEC_VID_UNSPEC,
> +						   eth_addr);
>  	if (rc != 0)
>  		return rc;
> 
> @@ -114,6 +118,17 @@ int sfc_vdpa_filter_config(struct sfc_vdpa_ops_data
> *ops_data)
>  	else
>  		sva->filters.filter_cnt++;
> 
> +	sfc_vdpa_log_init(sva, "insert unknown mcast filter");
> +	spec = &sva->filters.spec[SFC_VDPA_MCAST_DST_FILTER];
> +
> +	rc = sfc_vdpa_set_mac_filter(nic, spec, qid, NULL);
> +	if (rc != 0)
> +		sfc_vdpa_err(sva,
> +			     "mcast filter insertion failed: %s",
> +			     rte_strerror(rc));

Can improve to use two lines.

With this fixed:

Reviewed-by: Chenbo Xia <chenbo.xia at intel.com>

> +	else
> +		sva->filters.filter_cnt++;
> +
>  	sfc_vdpa_log_init(sva, "done");
> 
>  	return rc;
> --
> 1.8.3.1



More information about the dev mailing list