From patchwork Thu Jul 2 13:07:30 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 490610 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 49EF41402BA for ; Thu, 2 Jul 2015 23:08:04 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b=TXT4kPhd; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753339AbbGBNIA (ORCPT ); Thu, 2 Jul 2015 09:08:00 -0400 Received: from mail-ie0-f169.google.com ([209.85.223.169]:33990 "EHLO mail-ie0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752897AbbGBNH5 (ORCPT ); Thu, 2 Jul 2015 09:07:57 -0400 Received: by iebmu5 with SMTP id mu5so55834004ieb.1 for ; Thu, 02 Jul 2015 06:07:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZUxi/uwj6CTERU6jc2oLmP3sUJgv811M5BYbXtmGW2E=; b=TXT4kPhdbEmylqB2wMrucUk7z1BKhWu6iTbZPu9eo2en8mrLl6AcTkZNF+/4dEgrQQ pNfuKw6oR4Iv6D59vRirDVI1VHCj3l5NuI0pXlKAuIgwGM3x7PF4qAiadOpiYyA6Cw6m EaVIqCwTD4L065PbM3gBZnpqu5fq/3KQtBTrMiKGvIvF1QXB8yzt8+H76ky8FfWzEUNk a5XK1q1HEblLSmb8UTHT2vrPq0qDhgsEd+MqC6RICA+EuLpzDVCmgSta35EgQABZAMux 5NnvGvsvEIsOwn8YFu2GzN7lQZtN5QWL9n4DrnBCfvNCEIwSDuzpREvSp9U1jSWFsXr0 VpTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ZUxi/uwj6CTERU6jc2oLmP3sUJgv811M5BYbXtmGW2E=; b=UvAy+Yu06d9qtHu/X4M2o6W/ypWOAfXphSnWSYlEnhXZbqGAhhjss2ksCjlzEl8Etp GK+S+/k/yZr0tifOxTWAG9UNxmMO6t1T8v/BMeY+moxruu1YkB8KlSoTTOHIyc55zVc0 QgEWpvlNpgNalQH5z8erZYMgow5k5Q/YJT9JkrHcXqm/KtshMg068E1MONR4WfWSrIjk WVeHnGWuukkJ0UTdIKfWrYse8PYNovOGeo+TcfqWNPbI1Q72dJH9ebUZwQ+78aiTgS/b GB1kCWDPua0IgYFFlM7AHTtadnHVGyiqBlfmcvLmA/sAgYGxQcsc9WgbzLUcDnml+X+v jLbw== X-Gm-Message-State: ALoCoQn6ILC8bYzTXmtPKwj+6B8RJS3ZsorQf5mepHdY9UT4u60a4fZAqjFCCWlnN9IlUQc++bA1 X-Received: by 10.107.138.201 with SMTP id c70mr47551395ioj.24.1435842476628; Thu, 02 Jul 2015 06:07:56 -0700 (PDT) Received: from localhost ([2620:0:1000:3002:6cc8:f910:19be:3676]) by mx.google.com with ESMTPSA id p8sm1075978iga.13.2015.07.02.06.07.54 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 02 Jul 2015 06:07:55 -0700 (PDT) From: Eric Dumazet To: "David S. Miller" Cc: netdev , Alexei Starovoitov , Jamal Hadi Salim , John Fastabend , Eric Dumazet , Eric Dumazet Subject: [PATCH net-next 1/6] net: sched: extend percpu stats helpers Date: Thu, 2 Jul 2015 06:07:30 -0700 Message-Id: <1435842455-30501-2-git-send-email-edumazet@google.com> X-Mailer: git-send-email 2.4.3.573.g4eafbef In-Reply-To: <1435842455-30501-1-git-send-email-edumazet@google.com> References: <1435842455-30501-1-git-send-email-edumazet@google.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org qdisc_bstats_update_cpu() and other helpers were added to support percpu stats for qdisc. We want to add percpu stats for tc action, so this patch add common helpers. qdisc_bstats_update_cpu() is renamed to qdisc_bstats_cpu_update() qdisc_qstats_drop_cpu() is renamed to qdisc_qstats_cpu_drop() Signed-off-by: Eric Dumazet Cc: Alexei Starovoitov Cc: Jamal Hadi Salim Cc: John Fastabend Acked-by: John Fastabend Acked-by: Jamal Hadi Salim --- include/net/sch_generic.h | 27 +++++++++++++++++---------- net/core/dev.c | 4 ++-- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 2738f6f87908..0cd49b21b211 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -513,17 +513,21 @@ static inline void bstats_update(struct gnet_stats_basic_packed *bstats, bstats->packets += skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1; } -static inline void qdisc_bstats_update_cpu(struct Qdisc *sch, - const struct sk_buff *skb) +static inline void bstats_cpu_update(struct gnet_stats_basic_cpu *bstats, + const struct sk_buff *skb) { - struct gnet_stats_basic_cpu *bstats = - this_cpu_ptr(sch->cpu_bstats); - u64_stats_update_begin(&bstats->syncp); bstats_update(&bstats->bstats, skb); u64_stats_update_end(&bstats->syncp); } +static inline void qdisc_bstats_cpu_update(struct Qdisc *sch, + const struct sk_buff *skb) +{ + bstats_cpu_update(this_cpu_ptr(sch->cpu_bstats), skb); + +} + static inline void qdisc_bstats_update(struct Qdisc *sch, const struct sk_buff *skb) { @@ -547,16 +551,19 @@ static inline void __qdisc_qstats_drop(struct Qdisc *sch, int count) sch->qstats.drops += count; } -static inline void qdisc_qstats_drop(struct Qdisc *sch) +static inline void qstats_drop_inc(struct gnet_stats_queue *qstats) { - sch->qstats.drops++; + qstats->drops++; } -static inline void qdisc_qstats_drop_cpu(struct Qdisc *sch) +static inline void qdisc_qstats_drop(struct Qdisc *sch) { - struct gnet_stats_queue *qstats = this_cpu_ptr(sch->cpu_qstats); + qstats_drop_inc(&sch->qstats); +} - qstats->drops++; +static inline void qdisc_qstats_cpu_drop(struct Qdisc *sch) +{ + qstats_drop_inc(this_cpu_ptr(sch->cpu_qstats)); } static inline void qdisc_qstats_overlimit(struct Qdisc *sch) diff --git a/net/core/dev.c b/net/core/dev.c index 6778a9999d52..e0d270143fc7 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3646,7 +3646,7 @@ static inline struct sk_buff *handle_ing(struct sk_buff *skb, qdisc_skb_cb(skb)->pkt_len = skb->len; skb->tc_verd = SET_TC_AT(skb->tc_verd, AT_INGRESS); - qdisc_bstats_update_cpu(cl->q, skb); + qdisc_bstats_cpu_update(cl->q, skb); switch (tc_classify(skb, cl, &cl_res)) { case TC_ACT_OK: @@ -3654,7 +3654,7 @@ static inline struct sk_buff *handle_ing(struct sk_buff *skb, skb->tc_index = TC_H_MIN(cl_res.classid); break; case TC_ACT_SHOT: - qdisc_qstats_drop_cpu(cl->q); + qdisc_qstats_cpu_drop(cl->q); case TC_ACT_STOLEN: case TC_ACT_QUEUED: kfree_skb(skb);