CC: [email protected]
In-Reply-To: <[email protected]>
References: <[email protected]>
TO: Maxim Mikityanskiy <[email protected]>
TO: "David S. Miller" <[email protected]>
CC: [email protected]
TO: Jamal Hadi Salim <[email protected]>
TO: Cong Wang <[email protected]>
TO: Jiri Pirko <[email protected]>
TO: David Ahern <[email protected]>
CC: Saeed Mahameed <[email protected]>
CC: Jakub Kicinski <[email protected]>
CC: Tariq Toukan <[email protected]>
CC: Yossi Kuperman <[email protected]>

Hi Maxim,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    
https://github.com/0day-ci/linux/commits/Maxim-Mikityanskiy/net-sched-Add-multi-queue-support-to-sch_tree_lock/20201215-164306
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 
efd5a1584537698220578227e6467638307c2a0b
:::::: branch date: 13 days ago
:::::: commit date: 13 days ago
config: i386-randconfig-m021-20201227 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:474 mlx5e_htb_root_add() warn: 
passing a valid pointer to 'PTR_ERR'
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:576 
mlx5e_htb_leaf_alloc_queue() warn: passing a valid pointer to 'PTR_ERR'
drivers/net/ethernet/mellanox/mlx5/core/en/qos.c:631 mlx5e_htb_leaf_to_inner() 
warn: passing a valid pointer to 'PTR_ERR'

vim +/PTR_ERR +474 drivers/net/ethernet/mellanox/mlx5/core/en/qos.c

d34a73d10048450 Maxim Mikityanskiy 2020-12-15  453  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  454  int 
mlx5e_htb_root_add(struct mlx5e_priv *priv, u16 htb_maj_id, u16 htb_defcls)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  455  {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  456      struct mlx5e_qos_node 
*root;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  457      bool opened;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  458      int err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  459  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  460      qos_dbg(priv->mdev, 
"TC_HTB_CREATE handle %04x:, default :%04x\n", htb_maj_id, htb_defcls);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  461  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  462      if 
(!mlx5_qos_is_supported(priv->mdev))
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  463              return 
-EOPNOTSUPP;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  464  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  465      opened = 
test_bit(MLX5E_STATE_OPENED, &priv->state);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  466      if (opened) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  467              err = 
mlx5e_qos_alloc_queues(priv, &priv->channels);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  468              if (err)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  469                      return 
err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  470      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  471  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  472      root = 
mlx5e_sw_node_create_root(priv);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  473      if (IS_ERR(root)) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15 @474              err = 
PTR_ERR(root);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  475              goto 
err_free_queues;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  476      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  477  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  478      err = 
mlx5_qos_create_root_node(priv->mdev, &root->hw_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  479      if (err)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  480              goto 
err_sw_node_delete;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  481  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  482      
WRITE_ONCE(priv->htb.defcls, htb_defcls);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  483      /* Order maj_id after 
defcls - pairs with
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  484       * 
mlx5e_select_queue/mlx5e_select_htb_queues.
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  485       */
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  486      
smp_store_release(&priv->htb.maj_id, htb_maj_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  487  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  488      return 0;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  489  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  490  err_sw_node_delete:
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  491      
mlx5e_sw_node_delete(priv, root);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  492  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  493  err_free_queues:
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  494      if (opened)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  495              
mlx5e_qos_close_all_queues(&priv->channels);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  496      return err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  497  }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  498  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  499  int 
mlx5e_htb_root_del(struct mlx5e_priv *priv)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  500  {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  501      struct mlx5e_qos_node 
*root;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  502      int err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  503  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  504      qos_dbg(priv->mdev, 
"TC_HTB_DESTROY\n");
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  505  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  506      
WRITE_ONCE(priv->htb.maj_id, 0);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  507      synchronize_rcu(); /* 
Sync with mlx5e_select_htb_queue and TX data path. */
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  508  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  509      root = 
mlx5e_sw_node_find(priv, MLX5E_HTB_CLASSID_ROOT);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  510      if (!root) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  511              
qos_warn(priv->mdev, "Failed to find the root node in the QoS tree\n");
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  512              return -ENOENT;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  513      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  514      err = 
mlx5_qos_destroy_node(priv->mdev, root->hw_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  515      if (err)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  516              
qos_warn(priv->mdev, "Failed to destroy root node %u, err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  517                       
root->hw_id, err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  518      
mlx5e_sw_node_delete(priv, root);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  519  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  520      
mlx5e_qos_deactivate_all_queues(&priv->channels);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  521      
mlx5e_qos_close_all_queues(&priv->channels);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  522  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  523      return err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  524  }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  525  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  526  static int 
mlx5e_htb_convert_rate(struct mlx5e_priv *priv, u64 rate,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  527                              
  struct mlx5e_qos_node *parent, u32 *bw_share)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  528  {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  529      u64 share = 0;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  530  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  531      while (parent->classid 
!= MLX5E_HTB_CLASSID_ROOT && !parent->max_average_bw)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  532              parent = 
parent->parent;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  533  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  534      if 
(parent->max_average_bw)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  535              share = 
div64_u64(div_u64(rate * 100, BYTES_IN_MBIT),
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  536                              
  parent->max_average_bw);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  537      else
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  538              share = 101;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  539  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  540      *bw_share = share == 0 
? 1 : share > 100 ? 0 : share;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  541  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  542      qos_dbg(priv->mdev, 
"Convert: rate %llu, parent ceil %llu -> bw_share %u\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  543              rate, 
(u64)parent->max_average_bw * BYTES_IN_MBIT, *bw_share);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  544  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  545      return 0;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  546  }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  547  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  548  static void 
mlx5e_htb_convert_ceil(struct mlx5e_priv *priv, u64 ceil, u32 *max_average_bw)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  549  {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  550      *max_average_bw = 
div_u64(ceil, BYTES_IN_MBIT);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  551  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  552      qos_dbg(priv->mdev, 
"Convert: ceil %llu -> max_average_bw %u\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  553              ceil, 
*max_average_bw);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  554  }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  555  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  556  int 
mlx5e_htb_leaf_alloc_queue(struct mlx5e_priv *priv, u16 classid,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  557                             
u32 parent_classid, u64 rate, u64 ceil)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  558  {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  559      struct mlx5e_qos_node 
*node, *parent;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  560      int qid;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  561      int err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  562  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  563      qos_dbg(priv->mdev, 
"TC_HTB_LEAF_ALLOC_QUEUE classid %04x, parent %04x, rate %llu, ceil %llu\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  564              classid, 
parent_classid, rate, ceil);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  565  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  566      qid = 
mlx5e_find_unused_qos_qid(priv);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  567      if (qid < 0)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  568              return qid;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  569  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  570      parent = 
mlx5e_sw_node_find(priv, parent_classid);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  571      if (!parent)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  572              return -EINVAL;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  573  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  574      node = 
mlx5e_sw_node_create_leaf(priv, classid, qid, parent);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  575      if (IS_ERR(node))
d34a73d10048450 Maxim Mikityanskiy 2020-12-15 @576              return 
PTR_ERR(node);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  577  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  578      node->rate = rate;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  579      
mlx5e_htb_convert_rate(priv, rate, node->parent, &node->bw_share);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  580      
mlx5e_htb_convert_ceil(priv, ceil, &node->max_average_bw);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  581  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  582      err = 
mlx5_qos_create_leaf_node(priv->mdev, node->parent->hw_id,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  583                              
        node->bw_share, node->max_average_bw,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  584                              
        &node->hw_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  585      if (err) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  586              
qos_warn(priv->mdev, "Failed to create a leaf node (class %04x), err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  587                       
classid, err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  588              
mlx5e_sw_node_delete(priv, node);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  589              return err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  590      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  591  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  592      if 
(test_bit(MLX5E_STATE_OPENED, &priv->state)) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  593              err = 
mlx5e_open_qos_sq(priv, &priv->channels, node);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  594              if (err)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  595                      
qos_warn(priv->mdev, "Failed to create a QoS SQ (class %04x), err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  596                              
 classid, err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  597              else
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  598                      
mlx5e_activate_qos_sq(priv, node);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  599      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  600  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  601      return 
mlx5e_qid_from_qos(&priv->channels, node->qid);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  602  }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  603  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  604  int 
mlx5e_htb_leaf_to_inner(struct mlx5e_priv *priv, u16 classid, u16 child_classid,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  605                          u64 
rate, u64 ceil)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  606  {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  607      struct mlx5e_qos_node 
*node, *child;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  608      int err, tmp_err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  609      u32 new_hw_id;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  610      u16 qid;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  611  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  612      qos_dbg(priv->mdev, 
"TC_HTB_LEAF_TO_INNER classid %04x, upcoming child %04x, rate %llu, ceil 
%llu\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  613              classid, 
child_classid, rate, ceil);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  614  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  615      node = 
mlx5e_sw_node_find(priv, classid);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  616      if (!node)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  617              return -ENOENT;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  618  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  619      err = 
mlx5_qos_create_inner_node(priv->mdev, node->parent->hw_id,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  620                              
         node->bw_share, node->max_average_bw,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  621                              
         &new_hw_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  622      if (err) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  623              
qos_warn(priv->mdev, "Failed to create an inner node (class %04x), err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  624                       
classid, err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  625              return err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  626      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  627  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  628      /* Intentionally reuse 
the qid for the upcoming first child. */
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  629      child = 
mlx5e_sw_node_create_leaf(priv, child_classid, node->qid, node);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  630      if (IS_ERR(child)) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15 @631              err = 
PTR_ERR(child);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  632              goto 
err_destroy_hw_node;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  633      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  634  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  635      child->rate = rate;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  636      
mlx5e_htb_convert_rate(priv, rate, node, &child->bw_share);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  637      
mlx5e_htb_convert_ceil(priv, ceil, &child->max_average_bw);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  638  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  639      err = 
mlx5_qos_create_leaf_node(priv->mdev, new_hw_id, child->bw_share,
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  640                              
        child->max_average_bw, &child->hw_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  641      if (err) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  642              
qos_warn(priv->mdev, "Failed to create a leaf node (class %04x), err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  643                       
classid, err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  644              goto 
err_delete_sw_node;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  645      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  646  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  647      /* No fail point. */
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  648  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  649      qid = node->qid;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  650      /* Pairs with 
mlx5e_get_txq_by_classid. */
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  651      WRITE_ONCE(node->qid, 
MLX5E_QOS_QID_INNER);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  652  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  653      if 
(test_bit(MLX5E_STATE_OPENED, &priv->state)) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  654              
mlx5e_deactivate_qos_sq(priv, qid);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  655              
mlx5e_close_qos_sq(priv, qid);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  656      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  657  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  658      err = 
mlx5_qos_destroy_node(priv->mdev, node->hw_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  659      if (err) /* Not fatal. 
*/
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  660              
qos_warn(priv->mdev, "Failed to destroy leaf node %u (class %04x), err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  661                       
node->hw_id, classid, err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  662  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  663      node->hw_id = new_hw_id;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  664  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  665      if 
(test_bit(MLX5E_STATE_OPENED, &priv->state)) {
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  666              err = 
mlx5e_open_qos_sq(priv, &priv->channels, child);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  667              if (err)
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  668                      
qos_warn(priv->mdev, "Failed to create a QoS SQ (class %04x), err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  669                              
 classid, err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  670              else
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  671                      
mlx5e_activate_qos_sq(priv, child);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  672      }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  673  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  674      return 0;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  675  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  676  err_delete_sw_node:
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  677      child->qid = 
MLX5E_QOS_QID_INNER;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  678      
mlx5e_sw_node_delete(priv, child);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  679  
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  680  err_destroy_hw_node:
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  681      tmp_err = 
mlx5_qos_destroy_node(priv->mdev, new_hw_id);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  682      if (tmp_err) /* Not 
fatal. */
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  683              
qos_warn(priv->mdev, "Failed to roll back creation of an inner node %u (class 
%04x), err = %d\n",
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  684                       
new_hw_id, classid, tmp_err);
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  685      return err;
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  686  }
d34a73d10048450 Maxim Mikityanskiy 2020-12-15  687  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to