> -----Original Message-----
> From: Intel-wired-lan <[email protected]> On Behalf Of
> Jacob Keller
> Sent: Wednesday, January 31, 2024 10:52 PM
> To: Intel Wired LAN <[email protected]>; Nguyen, Anthony L
> <[email protected]>
> Cc: Keller, Jacob E <[email protected]>; Brady, Alan
> <[email protected]>
> Subject: [Intel-wired-lan] [PATCH iwl-net] ice: virtchnl: stop pretending to
> support RSS over AQ or registers
> 
> The E800 series hardware uses the same iAVF driver as older devices, including
> the virtchnl negotiation scheme.
> 
> This negotiation scheme includes a mechanism to determine what type of RSS
> should be supported, including RSS over PF virtchnl messages, RSS over
> firmware AdminQ messages, and RSS via direct register access.
> 
> The PF driver will always prefer VIRTCHNL_VF_OFFLOAD_RSS_PF if its
> supported by the VF driver. However, if an older VF driver is loaded, it may
> request only VIRTCHNL_VF_OFFLOAD_RSS_REG or
> VIRTCHNL_VF_OFFLOAD_RSS_AQ.
> 
> The ice driver happily agrees to support these methods. Unfortunately, the
> underlying hardware does not support these mechanisms. The E800 series
> VFs don't have the appropriate registers for RSS_REG. The mailbox queue used
> by VFs for VF to PF communication blocks messages which do not have the
> VF-to-PF opcode.
> 
> Stop lying to the VF that it could support RSS over AdminQ or registers, as
> these interfaces do not work when the hardware is operating on an E800
> series device.
> 
> In practice this is unlikely to be hit by any normal user. The iAVF driver has
> supported RSS over PF virtchnl commands since 2016, and always defaults to
> using RSS_PF if possible.
> 
> In principle, nothing actually stops the existing VF from attempting to access
> the registers or send an AQ command. However a properly coded VF will check
> the capability flags and will report a more useful error if it detects a case 
> where
> the driver does not support the RSS offloads that it does.
> 
> Fixes: 1071a8358a28 ("ice: Implement virtchnl commands for AVF support")
> Signed-off-by: Jacob Keller <[email protected]>
> Reviewed-by: Alan Brady <[email protected]>
> ---
>  drivers/net/ethernet/intel/ice/ice_virtchnl.c           | 9 +--------
>  drivers/net/ethernet/intel/ice/ice_virtchnl_allowlist.c | 2 --
>  2 files changed, 1 insertion(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl.c
> b/drivers/net/ethernet/intel/ice/ice_virtchnl.c
> index c925813ec9ca..6f2328a049bf 100644
> --- a/drivers/net/ethernet/intel/ice/ice_virtchnl.c
> +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl.c
> @@ -440,7 +440,6 @@ static int ice_vc_get_vf_res_msg(struct ice_vf *vf, u8
> *msg)
>               vf->driver_caps = *(u32 *)msg;
>       else
>               vf->driver_caps = VIRTCHNL_VF_OFFLOAD_L2 |
> -                               VIRTCHNL_VF_OFFLOAD_RSS_REG |
>                                 VIRTCHNL_VF_OFFLOAD_VLAN;
> 
>       vfres->vf_cap_flags = VIRTCHNL_VF_OFFLOAD_L2; @@ -453,14
> +452,8 @@ static int ice_vc_get_vf_res_msg(struct ice_vf *vf, u8 *msg)
>       vfres->vf_cap_flags |= ice_vc_get_vlan_caps(hw, vf, vsi,
>                                                   vf->driver_caps);
> 
> -     if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_PF) {
> +     if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_PF)
>               vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_PF;
> -     } else {
> -             if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_AQ)
> -                     vfres->vf_cap_flags |=
> VIRTCHNL_VF_OFFLOAD_RSS_AQ;
> -             else
> -                     vfres->vf_cap_flags |=
> VIRTCHNL_VF_OFFLOAD_RSS_REG;
> -     }
> 
>       if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC)
>               vfres->vf_cap_flags |=
> VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC; diff --git
> a/drivers/net/ethernet/intel/ice/ice_virtchnl_allowlist.c
> b/drivers/net/ethernet/intel/ice/ice_virtchnl_allowlist.c
> index 5e19d48a05b4..d796dbd2a440 100644
> --- a/drivers/net/ethernet/intel/ice/ice_virtchnl_allowlist.c
> +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_allowlist.c
> @@ -13,8 +13,6 @@
>   * - opcodes needed by VF when caps are activated
>   *
>   * Caps that don't use new opcodes (no opcodes should be allowed):
> - * - VIRTCHNL_VF_OFFLOAD_RSS_AQ
> - * - VIRTCHNL_VF_OFFLOAD_RSS_REG
>   * - VIRTCHNL_VF_OFFLOAD_WB_ON_ITR
>   * - VIRTCHNL_VF_OFFLOAD_CRC
>   * - VIRTCHNL_VF_OFFLOAD_RX_POLLING
> 
> base-commit: d0005e76b73b095138cee9d662831761ffde84a8
> --
> 2.41.0


Tested-by: Rafal Romanowski <[email protected]>


Reply via email to