From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: Re: [PATCH net-next v3 4/4] net/mlx5e: Support HTB offload
Date: Mon, 28 Dec 2020 08:57:16 +0800 [thread overview]
Message-ID: <202012280823.gOqwrL4F-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 20653 bytes --]
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20201215074213.32652-6-maximmi@mellanox.com>
References: <20201215074213.32652-6-maximmi@mellanox.com>
TO: Maxim Mikityanskiy <maximmi@mellanox.com>
TO: "David S. Miller" <davem@davemloft.net>
CC: netdev(a)vger.kernel.org
TO: Jamal Hadi Salim <jhs@mojatatu.com>
TO: Cong Wang <xiyou.wangcong@gmail.com>
TO: Jiri Pirko <jiri@resnulli.us>
TO: David Ahern <dsahern@gmail.com>
CC: Saeed Mahameed <saeedm@nvidia.com>
CC: Jakub Kicinski <kuba@kernel.org>
CC: Tariq Toukan <tariqt@nvidia.com>
CC: Yossi Kuperman <yossiku@nvidia.com>
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 <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
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/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30291 bytes --]
next reply other threads:[~2020-12-28 0:57 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-28 0:57 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2020-12-15 7:42 [PATCH iproute2-next] tc/htb: Hierarchical QoS hardware offload Maxim Mikityanskiy
2020-12-15 7:42 ` [PATCH net-next v3 4/4] net/mlx5e: Support HTB offload Maxim Mikityanskiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202012280823.gOqwrL4F-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.