From patchwork Wed Feb 28 09:45:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 879020 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=resnulli.us Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="oFQAP6+f"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zrrKP37JXz9ryF for ; Wed, 28 Feb 2018 20:45:45 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752485AbeB1Jpi (ORCPT ); Wed, 28 Feb 2018 04:45:38 -0500 Received: from mail-wr0-f193.google.com ([209.85.128.193]:34648 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752378AbeB1JpP (ORCPT ); Wed, 28 Feb 2018 04:45:15 -0500 Received: by mail-wr0-f193.google.com with SMTP id m5so1677144wrg.1 for ; Wed, 28 Feb 2018 01:45:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=wbZdvqMmXcA2q6OvxtVgUvQSa4Q0GVxLTh7h4cdqeZY=; b=oFQAP6+f1gXijmRd80Ve8r3T6OR8kYY1fChmor+opodp0syzQm8Zfv4CA7upFbWrPG GRlTeAEneS24O1t6QSEFIwsqUXAqs/CLej6is4Ec6+fr0ci5TwuHkXNMu5ctFP8wbG+3 LuExHwP3SlsqEXxgZossoLvuqB06K8rPWgGpJdgMIzOCB0REaQVcAs5c73T1NWAYn12F DCwvmGI47QWGMKedLZJ5+u/nzLK0g1OpzWXHuVJLOFtFMZwv0OCQg8RKAhG67ukiK+2i nRup1SAB3BaPTrHHm/8iwzUFi4z2Nah0XisQR+UN4VN0pWRh/Ayo8C+mFTvXbg9e5WW0 1llw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=wbZdvqMmXcA2q6OvxtVgUvQSa4Q0GVxLTh7h4cdqeZY=; b=nvVpwCyoHC7Wey68yLfI/uK9SSr7F7Vp9+QlG/UzQXIjSwqPRXIm8HTZEIEDJfRS7O 2vYaY0B7AQ7WctMi/JEdKbLR8PQY3ycKyZjj4uYDEAsiJG2GJPSaoPEaeCpxY8zPX6uB CDPlvRqehELfPMON/EyE89UmAgKoUCQGbXXuqstiYPYJUGGP+HmomX8wHAaI5QWAXo8r 5EhZtQV0Lv/U3Dar27aUKtkvrGYYOg/+OmreeEE1HcQXx//GsHhSj9Yuq7QyQd5oNNyg kIxtkQusAk269eWl2i2wbGdeOfqZAm1c+D4PoF85DsppUHr8Nx78t5hcsmkJ13wWYyPJ lPyg== X-Gm-Message-State: APf1xPC7BRd5OLQL/uyt+ZTobPHwNcCstFtuoIYR6fySUB4+eMW6yEqx kt0uDO6xq2Yb5Xgm924ApoYwOVeU X-Google-Smtp-Source: AH8x227uDkTB9U7Oi3WV6jiQ9/rFEQrhvVqBjidBfl/sKNuTgm5hyaRwI6YA0U6R7tTow0Kw8mXLcA== X-Received: by 10.223.153.215 with SMTP id y81mr15374166wrb.144.1519811114154; Wed, 28 Feb 2018 01:45:14 -0800 (PST) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id y34sm3992352wry.19.2018.02.28.01.45.13 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 28 Feb 2018 01:45:13 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: nogahf@mellanox.com, yuvalm@mellanox.com, davem@davemloft.net, idosch@mellanox.com, mlxsw@mellanox.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, kubakici@wp.pl Subject: [patch net-next 05/10] mlxsw: spectrum: qdiscs: Update backlog handling of a child qdiscs Date: Wed, 28 Feb 2018 10:45:02 +0100 Message-Id: <20180228094507.22354-6-jiri@resnulli.us> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180228094507.22354-1-jiri@resnulli.us> References: <20180228094507.22354-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Nogah Frankel When removing a child qdisc its backlog will be decreased from the parent backlog. The driver backlog count should do the same. When the parent changes its configuration, the child might need to clean its stats. However, the backlog can't be cleaned with the rest of the stats, because it reflects a momentary value that needs to be synced with the core, not the history of the qdisc. Signed-off-by: Nogah Frankel Reviewed-by: Yuval Mintz Signed-off-by: Jiri Pirko --- drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c index b722af360475..5ddaafc8aa18 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c @@ -294,6 +294,12 @@ static int mlxsw_sp_qdisc_red_destroy(struct mlxsw_sp_port *mlxsw_sp_port, struct mlxsw_sp_qdisc *mlxsw_sp_qdisc) { + struct mlxsw_sp_qdisc *root_qdisc = mlxsw_sp_port->root_qdisc; + + if (root_qdisc != mlxsw_sp_qdisc) + root_qdisc->stats_base.backlog -= + mlxsw_sp_qdisc->stats_base.backlog; + return mlxsw_sp_tclass_congestion_disable(mlxsw_sp_port, mlxsw_sp_qdisc->tclass_num); } @@ -358,6 +364,7 @@ mlxsw_sp_qdisc_red_unoffload(struct mlxsw_sp_port *mlxsw_sp_port, backlog = mlxsw_sp_cells_bytes(mlxsw_sp_port->mlxsw_sp, mlxsw_sp_qdisc->stats_base.backlog); p->qstats->backlog -= backlog; + mlxsw_sp_qdisc->stats_base.backlog = 0; } static int @@ -512,7 +519,7 @@ mlxsw_sp_qdisc_prio_replace(struct mlxsw_sp_port *mlxsw_sp_port, { struct tc_prio_qopt_offload_params *p = params; struct mlxsw_sp_qdisc *child_qdisc; - int tclass, i, band; + int tclass, i, band, backlog; u8 old_priomap; int err; @@ -533,9 +540,12 @@ mlxsw_sp_qdisc_prio_replace(struct mlxsw_sp_port *mlxsw_sp_port, } } if (old_priomap != child_qdisc->prio_bitmap && - child_qdisc->ops && child_qdisc->ops->clean_stats) + child_qdisc->ops && child_qdisc->ops->clean_stats) { + backlog = child_qdisc->stats_base.backlog; child_qdisc->ops->clean_stats(mlxsw_sp_port, child_qdisc); + child_qdisc->stats_base.backlog = backlog; + } } return 0;