[Intel-wired-lan] [PATCH net-next v1] i40e: Add check for queue allocation for the VF and refactor VF queue requesting
Nguyen, Anthony L
anthony.l.nguyen at intel.com
Mon Jun 14 21:17:11 UTC 2021
On Mon, 2021-06-14 at 11:46 +0200, Karen Sornek wrote:
> The change implements the search for free space in PF
> queue pair piles and refactors VF queue requesting.
> i40e_set_num_queues and i40e_request_queues_msg
> used similar logic to change number of queues for VF's.
>
> Signed-off-by: Slawomir Laba <slawomirx.laba at intel.com>
> Signed-off-by: Jan Sokolowski <jan.sokolowski at intel.com>
> Signed-off-by: Karen Sornek <karen.sornek at intel.com>
> ---
> drivers/net/ethernet/intel/i40e/i40e.h | 1 +
> drivers/net/ethernet/intel/i40e/i40e_main.c | 33 +++++
> .../ethernet/intel/i40e/i40e_virtchnl_pf.c | 135 ++++++++++++++
> ----
> 3 files changed, 145 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/i40e/i40e.h
> b/drivers/net/ethernet/intel/i40e/i40e.h
> index ea9e301c6..0f2e0e5e0 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e.h
> +++ b/drivers/net/ethernet/intel/i40e/i40e.h
> @@ -1154,6 +1154,7 @@ int i40e_reconfig_rss_queues(struct i40e_pf
> *pf, int queue_count);
> struct i40e_veb *i40e_veb_setup(struct i40e_pf *pf, u16 flags, u16
> uplink_seid,
> u16 downlink_seid, u8 enabled_tc);
> void i40e_veb_release(struct i40e_veb *veb);
> +int i40e_max_lump_qp(struct i40e_pf *pf);
>
> int i40e_veb_config_tc(struct i40e_veb *veb, u8 enabled_tc);
> int i40e_vsi_add_pvid(struct i40e_vsi *vsi, u16 vid);
> diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c
> b/drivers/net/ethernet/intel/i40e/i40e_main.c
> index fce05ad24..5d4d323c9 100644
> --- a/drivers/net/ethernet/intel/i40e/i40e_main.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
> @@ -257,6 +257,39 @@ static int i40e_put_lump(struct
> i40e_lump_tracking *pile, u16 index, u16 id)
> return count;
> }
>
> +/**
> + * i40e_max_lump_qp - find a biggest size of lump available in
> qp_pile
> + * @pf: pointer to private device data structure
> + *
> + * Returns the max size of lump in a qp_pile, or negative for error
> + */
> +int i40e_max_lump_qp(struct i40e_pf *pf)
> +{
> + struct i40e_lump_tracking *pile = pf->qp_pile;
Please run checkpatch and fix the reported indent issues. This patch is
full of these:
ERROR: code indent should use tabs where possible
#130: FILE: drivers/net/ethernet/intel/i40e/i40e_main.c:268:
+ struct i40e_lump_tracking *pile = pf->qp_pile;$
WARNING: please, no spaces at the start of a line
#130: FILE: drivers/net/ethernet/intel/i40e/i40e_main.c:268:
+ struct i40e_lump_tracking *pile = pf->qp_pile;$
<snip>
> --- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> +++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
> @@ -2616,6 +2616,116 @@ error_param:
> aq_ret);
> }
>
> +/**
> + * i40e_find_enough_vf_queues - find enough VF queues
> + * @vf: pointer to the VF info
> + * @needed: the number of items needed
> + *
> + * Returns the base item index of the queue, or negative for error
> + **/
> +static int i40e_find_enough_vf_queues(struct i40e_vf *vf, u16
> needed)
> +{
> + struct i40e_pf *pf = vf->pf;
> + struct i40e_vsi *vsi = pf->vsi[vf->lan_vsi_idx];
> + struct i40e_lump_tracking *pile;
> + u16 cur_queues, more;
> + int i, j;
> +
> + cur_queues = vsi->alloc_queue_pairs;
> +
> + /* if current number of allocated queues is enough */
> + if (cur_queues >= needed)
> + return vsi->base_queue;
> +
> + pile = pf->qp_pile;
> + if (cur_queues > 0) {
> + /*
> + * if number of allocated queues is non-zero, just
> check if
> + * there are enough queues behind the allocated queues
> + * for more.
> + */
WARNING: networking block comments don't use an empty /* line, use /*
Comment...
#190: FILE: drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c:2643:
+ /*
+ * if number of allocated queues is non-zero, just
check if
> + more = needed - cur_queues;
> + for (i = vsi->base_queue + cur_queues;
> + i < pile->num_entries; i++) {
> + if (pile->list[i] & I40E_PILE_VALID_BIT)
> + break;
> +
> + /* there are enough queues */
> + if (more-- == 1)
> + return vsi->base_queue;
> + }
> + /* start the linear search with that queue behind */
> + i++;
> + } else {
> + /* start the linear search with an imperfect hint */
> + i = pile->search_hint;
> + }
> +
> + while (i < pile->num_entries) {
> + /* skip already allocated entries */
> + if (pile->list[i] & I40E_PILE_VALID_BIT) {
> + i++;
> + continue;
> + }
More information about the Intel-wired-lan
mailing list