[Intel-wired-lan] [PATCH iwl-next v3 3/4] ice: Fix VLAN and CRC strip co-existence
Ahmed Zaki
ahmed.zaki at intel.com
Fri Sep 1 16:52:26 UTC 2023
On 2023-09-01 04:50, Drewek, Wojciech wrote:
>
>> -----Original Message-----
>> From: Intel-wired-lan <intel-wired-lan-bounces at osuosl.org> On Behalf Of
>> Ahmed Zaki
>> Sent: piątek, 1 września 2023 01:19
>> To: intel-wired-lan at lists.osuosl.org
>> Cc: Wang, Haiyue <haiyue.wang at intel.com>; Brandeburg, Jesse
>> <jesse.brandeburg at intel.com>
>> Subject: [Intel-wired-lan] [PATCH iwl-next v3 3/4] ice: Fix VLAN and CRC strip
>> co-existence
>>
>> From: Haiyue Wang <haiyue.wang at intel.com>
>>
>> When VLAN strip is enabled, the CRC strip should not be allowed to be
>> disabled. And when CRC strip is disabled, the VLAN strip should not be
>> allowed to be enabled.
>>
>> It needs to check CRC strip disable setting parameter firstly before
>> configuring the Rx/Tx queues, otherwise, in current error handling,
>> the already set Tx queue context doesn't rollback correctly, it will
>> cause the Tx queue setup failure next time:
>> "Failed to set LAN Tx queue context"
>>
>> Signed-off-by: Haiyue Wang <haiyue.wang at intel.com>
>> Reviewed-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
>> Signed-off-by: Ahmed Zaki <ahmed.zaki at intel.com>
>> ---
>> drivers/net/ethernet/intel/ice/ice_vf_lib.h | 3 +
>> drivers/net/ethernet/intel/ice/ice_virtchnl.c | 62 ++++++++++++++++---
>> 2 files changed, 56 insertions(+), 9 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/ice/ice_vf_lib.h
>> b/drivers/net/ethernet/intel/ice/ice_vf_lib.h
>> index 48fea6fa0362..31a082e8a827 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_vf_lib.h
>> +++ b/drivers/net/ethernet/intel/ice/ice_vf_lib.h
>> @@ -123,6 +123,9 @@ struct ice_vf {
>> u8 num_req_qs; /* num of queue pairs
>> requested by VF */
>> u16 num_mac;
>> u16 num_vf_qs; /* num of queue configured
>> per VF */
>> + u8 vlan_strip_ena; /* Outer and Inner VLAN strip enable
>> */
>> +#define ICE_INNER_VLAN_STRIP_ENA BIT(0)
>> +#define ICE_OUTER_VLAN_STRIP_ENA BIT(1)
>> struct ice_mdd_vf_events mdd_rx_events;
>> struct ice_mdd_vf_events mdd_tx_events;
>> DECLARE_BITMAP(opcodes_allowlist, VIRTCHNL_OP_MAX);
>> diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl.c
>> b/drivers/net/ethernet/intel/ice/ice_virtchnl.c
>> index c0c3e524c523..602c18e823c0 100644
>> --- a/drivers/net/ethernet/intel/ice/ice_virtchnl.c
>> +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl.c
>> @@ -1623,6 +1623,15 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8
>> *msg)
>> goto error_param;
>> }
>>
>> + for (i = 0; i < qci->num_queue_pairs; i++) {
>> + if (!qci->qpair[i].rxq.crc_disable)
>> + continue;
>> +
>> + if (!(vf->driver_caps & VIRTCHNL_VF_OFFLOAD_CRC) ||
>> + vf->vlan_strip_ena)
>> + goto error_param;
>> + }
>> +
>> for (i = 0; i < qci->num_queue_pairs; i++) {
>> qpi = &qci->qpair[i];
>> if (qpi->txq.vsi_id != qci->vsi_id ||
>> @@ -1669,11 +1678,6 @@ static int ice_vc_cfg_qs_msg(struct ice_vf *vf, u8
>> *msg)
>> vsi->rx_rings[i]->dma = qpi->rxq.dma_ring_addr;
>> vsi->rx_rings[i]->count = qpi->rxq.ring_len;
>>
>> - if (qpi->rxq.crc_disable &&
>> - !(vf->driver_caps & VIRTCHNL_VF_OFFLOAD_CRC))
>> {
>> - goto error_param;
>> - }
>> -
>> if (qpi->rxq.crc_disable)
>> vsi->rx_rings[q_idx]->flags |=
>> ICE_RX_FLAGS_CRC_STRIP_DIS;
>> @@ -2425,6 +2429,19 @@ static int ice_vc_remove_vlan_msg(struct ice_vf
>> *vf, u8 *msg)
>> return ice_vc_process_vlan_msg(vf, msg, false);
>> }
>>
>> +/**
>> + * ice_vsi_is_rxq_crc_strip_dis - check if Rx queue CRC strip is disabled or not
>> + * @vsi: pointer to the VF VSI info
>> + */
>> +static bool ice_vsi_is_rxq_crc_strip_dis(struct ice_vsi *vsi)
>> +{
>> + for (u16 i = 0; i < vsi->alloc_rxq; i++)
> Can we use ice_for_each_rxq here?
Sure. Will send another version shortly.
More information about the Intel-wired-lan
mailing list