Skip to content

Commit 2652b99

Browse files
jacob-kelleranguy11
authored andcommitted
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: 1071a83 ("ice: Implement virtchnl commands for AVF support") Signed-off-by: Jacob Keller <[email protected]> Reviewed-by: Alan Brady <[email protected]> Tested-by: Rafal Romanowski <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 3300685 commit 2652b99

File tree

2 files changed

+1
-10
lines changed

2 files changed

+1
-10
lines changed

drivers/net/ethernet/intel/ice/ice_virtchnl.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,6 @@ static int ice_vc_get_vf_res_msg(struct ice_vf *vf, u8 *msg)
440440
vf->driver_caps = *(u32 *)msg;
441441
else
442442
vf->driver_caps = VIRTCHNL_VF_OFFLOAD_L2 |
443-
VIRTCHNL_VF_OFFLOAD_RSS_REG |
444443
VIRTCHNL_VF_OFFLOAD_VLAN;
445444

446445
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)
453452
vfres->vf_cap_flags |= ice_vc_get_vlan_caps(hw, vf, vsi,
454453
vf->driver_caps);
455454

456-
if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_PF) {
455+
if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_PF)
457456
vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_PF;
458-
} else {
459-
if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RSS_AQ)
460-
vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_AQ;
461-
else
462-
vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RSS_REG;
463-
}
464457

465458
if (vf->driver_caps & VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC)
466459
vfres->vf_cap_flags |= VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC;

drivers/net/ethernet/intel/ice/ice_virtchnl_allowlist.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
* - opcodes needed by VF when caps are activated
1414
*
1515
* Caps that don't use new opcodes (no opcodes should be allowed):
16-
* - VIRTCHNL_VF_OFFLOAD_RSS_AQ
17-
* - VIRTCHNL_VF_OFFLOAD_RSS_REG
1816
* - VIRTCHNL_VF_OFFLOAD_WB_ON_ITR
1917
* - VIRTCHNL_VF_OFFLOAD_CRC
2018
* - VIRTCHNL_VF_OFFLOAD_RX_POLLING

0 commit comments

Comments
 (0)