From patchwork Thu Dec 7 17:57:00 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 845738 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; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="etHiR/1F"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yt38v5RK6z9s7B for ; Fri, 8 Dec 2017 04:57:19 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753915AbdLGR5Q (ORCPT ); Thu, 7 Dec 2017 12:57:16 -0500 Received: from mail-pg0-f68.google.com ([74.125.83.68]:38036 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752552AbdLGR5O (ORCPT ); Thu, 7 Dec 2017 12:57:14 -0500 Received: by mail-pg0-f68.google.com with SMTP id f12so4977670pgo.5 for ; Thu, 07 Dec 2017 09:57:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=s65cDOEuJDa2wKJvBJTtWa4n39tHlkD/VH1MMH1UJhs=; b=etHiR/1FdUc0wwMeiE7cS/z7VWd0G9ZLKJGzYXQM/G1NwGuA2PzzdKdztQKNYQsSpj Zpj64bkfjc4SxN7Mbx4LTzAgMPZFj1Hzk25hUI/Xle+UCayYtj/g+CSts/GQ1Zx5k7U9 Dkcf766ByvrvcDE1NGPyIJBNaqbaYqOgaxUrDsiCpX460by/mrZlMyiqrlKeqJnSzuKZ pU61ZafCOezMLi+vbaJ9dDPlTEaCkxdEJCaazNHI/O/dBTguf1Vrhg7qVlEDDSlqqcdg qau1NlqwJG8Rq4EpF5+U8bIe1r9aAvlmQSfbCIx0TBSy6L8aF2v8395GyZB6HBISrU7e bsdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=s65cDOEuJDa2wKJvBJTtWa4n39tHlkD/VH1MMH1UJhs=; b=THKfSypaOKyiPTh1W9L0IWaYsluqslkOXGqD5V1haSMAfDmmAcC2GYq1enDAFLwjq3 ALISzl0/rKdTDFXJw104x8oaM/6e00YTEucm9K3Jtp2ssq4epJ/fEOeEjjHph7uP5cTC UGArygqJ5vV9CrQY9R76yC32AsSC6b8LjvPqxt0TC6MnpPviDS6wJ4wCozgQD2bXe1wQ Ny44EJmRHVZNh4ZBFo5sYOxY+VRn62o9IjRIORCiAKvnSUREq+v+F1EoeLwMRFU+GjCp K/B3Ek1v0ddPetyNDmxtyv5wZtsfFLQ6xPSBo1/huu8FnDn1ugG3Etybjxh25LZZbtgm eKVA== X-Gm-Message-State: AJaThX4zA/vrQdAEuvAZuvJ8MxW7Vi25Ybrmdnwwv2L79s1dtiibGDhQ S9rpR99QbYBbLwNdccqhylg= X-Google-Smtp-Source: AGs4zMb4SCU8EVguIal+VOpFFVCeGfrnAIbArLFA83dn6bLuaOIrimk5Z4Q5agt1Pc8Lkrdw0VI15w== X-Received: by 10.84.133.162 with SMTP id f31mr27394475plf.304.1512669433876; Thu, 07 Dec 2017 09:57:13 -0800 (PST) Received: from [127.0.1.1] ([72.168.144.118]) by smtp.gmail.com with ESMTPSA id k2sm9426500pfg.53.2017.12.07.09.57.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 07 Dec 2017 09:57:13 -0800 (PST) Subject: [net-next PATCH 10/14] net: sched: helpers to sum qlen and qlen for per cpu logic From: John Fastabend To: willemdebruijn.kernel@gmail.com, daniel@iogearbox.net, eric.dumazet@gmail.com, davem@davemloft.net Cc: netdev@vger.kernel.org, jiri@resnulli.us, xiyou.wangcong@gmail.com Date: Thu, 07 Dec 2017 09:57:00 -0800 Message-ID: <20171207175700.5771.39733.stgit@john-Precision-Tower-5810> In-Reply-To: <20171207173500.5771.41198.stgit@john-Precision-Tower-5810> References: <20171207173500.5771.41198.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add qdisc qlen helper routines for lockless qdiscs to use. The qdisc qlen is no longer used in the hotpath but it is reported via stats query on the qdisc so it still needs to be tracked. This adds the per cpu operations needed along with a helper to return the summation of per cpu stats. Signed-off-by: John Fastabend --- include/net/sch_generic.h | 20 ++++++++++++++++++++ net/sched/sch_api.c | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 4717c4b..2fbae2c9 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -291,11 +291,31 @@ static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz) BUILD_BUG_ON(sizeof(qcb->data) < sz); } +static inline int qdisc_qlen_cpu(const struct Qdisc *q) +{ + return this_cpu_ptr(q->cpu_qstats)->qlen; +} + static inline int qdisc_qlen(const struct Qdisc *q) { return q->q.qlen; } +static inline int qdisc_qlen_sum(const struct Qdisc *q) +{ + __u32 qlen = 0; + int i; + + if (q->flags & TCQ_F_NOLOCK) { + for_each_possible_cpu(i) + qlen += per_cpu_ptr(q->cpu_qstats, i)->qlen; + } else { + qlen = q->q.qlen; + } + + return qlen; +} + static inline struct qdisc_skb_cb *qdisc_skb_cb(const struct sk_buff *skb) { return (struct qdisc_skb_cb *)skb->cb; diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index b6c4f53..5cb64d2 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c @@ -797,7 +797,8 @@ static int tc_fill_qdisc(struct sk_buff *skb, struct Qdisc *q, u32 clid, goto nla_put_failure; if (q->ops->dump && q->ops->dump(q, skb) < 0) goto nla_put_failure; - qlen = q->q.qlen; + + qlen = qdisc_qlen_sum(q); stab = rtnl_dereference(q->stab); if (stab && qdisc_dump_stab(skb, stab) < 0)