On Tue, Jun 04, 2024 at 09:13:52AM -0400, Mateusz Polchlopek wrote:
> From: Jacob Keller <[email protected]>
> 
> Enable support for VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC, to enable the VF
> driver the ability to determine what Rx descriptor formats are
> available. This requires sending an additional message during
> initialization and reset, the VIRTCHNL_OP_GET_SUPPORTED_RXDIDS. This
> operation requests the supported Rx descriptor IDs available from the
> PF.
> 
> This is treated the same way that VLAN V2 capabilities are handled. Add
> a new set of extended capability flags, used to process send and receipt
> of the VIRTCHNL_OP_GET_SUPPORTED_RXDIDS message.
> 
> This ensures we finish negotiating for the supported descriptor formats
> prior to beginning configuration of receive queues.
> 
> This change stores the supported format bitmap into the iavf_adapter
> structure. Additionally, if VIRTCHNL_VF_OFFLOAD_RX_FLEX_DESC is enabled
> by the PF, we need to make sure that the Rx queue configuration
> specifies the format.
> 
> Signed-off-by: Jacob Keller <[email protected]>
> Reviewed-by: Wojciech Drewek <[email protected]>
> Co-developed-by: Mateusz Polchlopek <[email protected]>
> Signed-off-by: Mateusz Polchlopek <[email protected]>

Hi Mateusz, Jacob, all,

The nit below notwithstanding, this looks good to me.

Reviewed-by: Simon Horman <[email protected]>

...

> @@ -262,6 +276,45 @@ int iavf_get_vf_vlan_v2_caps(struct iavf_adapter 
> *adapter)
>       return err;
>  }
>  
> +int iavf_get_vf_supported_rxdids(struct iavf_adapter *adapter)
> +{
> +     struct iavf_hw *hw = &adapter->hw;
> +     struct iavf_arq_event_info event;
> +     enum virtchnl_ops op;
> +     enum iavf_status err;
> +     u16 len;
> +
> +     len =  sizeof(struct virtchnl_supported_rxdids);
> +     event.buf_len = len;
> +     event.msg_buf = kzalloc(event.buf_len, GFP_KERNEL);
> +     if (!event.msg_buf) {
> +             err = -ENOMEM;
> +             goto out;
> +     }
> +
> +     while (1) {
> +             /* When the AQ is empty, iavf_clean_arq_element will return
> +              * nonzero and this loop will terminate.
> +              */
> +             err = iavf_clean_arq_element(hw, &event, NULL);
> +             if (err != IAVF_SUCCESS)
> +                     goto out_alloc;
> +             op = (enum virtchnl_ops)le32_to_cpu(event.desc.cookie_high);
> +             if (op == VIRTCHNL_OP_GET_SUPPORTED_RXDIDS)
> +                     break;
> +     }
> +
> +     err = (enum iavf_status)le32_to_cpu(event.desc.cookie_low);
> +     if (err)
> +             goto out_alloc;
> +
> +     memcpy(&adapter->supported_rxdids, event.msg_buf, min(event.msg_len, 
> len));

If you need to respin for some other reason,
please consider wrapping the above to <= 80 columns wide.

Likewise for the 2nd call to iavf_ptp_cap_supported() in
iavf_ptp_process_caps() in
[PATCH v7 06/12] iavf: add initial framework for registering PTP clock

Flagged by: checkpatch.pl --max-line-length=80

> +out_alloc:
> +     kfree(event.msg_buf);
> +out:
> +     return err;
> +}
> +
>  /**
>   * iavf_configure_queues
>   * @adapter: adapter structure

...

Reply via email to