From patchwork Thu Jul 14 06:21:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 648218 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 3rqlwB08Xjz9sCY for ; Thu, 14 Jul 2016 16:21:46 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=bgChSrrZ; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751836AbcGNGVn (ORCPT ); Thu, 14 Jul 2016 02:21:43 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:35072 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751662AbcGNGVl (ORCPT ); Thu, 14 Jul 2016 02:21:41 -0400 Received: by mail-pf0-f195.google.com with SMTP id t190so4295679pfb.2 for ; Wed, 13 Jul 2016 23:21:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:subject:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=t7GxnOk2VKcdTR+ImVrjkiYDOXyonWQwwCDaDXPJWVE=; b=bgChSrrZdFY3TPc3zmrCXfkceDtIkjFp1t8ZHR1+eWctBp2NS7HlAew6CEK6CcYqYn 5nLqyLQov5WqWHG8htYjlmnQjYerXCYqPpsxNicQQyGJ6Bbm7DS2/ctOPsyeGFqFvLMo vLMF9SAqFGDPiTanonHMpkVTEANZog+BDaX0lyHhZmKBfa6LRekyBRFgzr3MhZmPBNqe LR9pNjHxiu2VY1p9UzosjZDpJM2ABQlLb12xNDwUsXFjGHh7GFeZuUsGOkevwp8sm7R/ ZR6kJiobJz/im45+/CzqJla/Fs7nkVGCeS9LcfOTryD8cTUAgadquR+A1h4mMOSHi+RB j4wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:subject:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=t7GxnOk2VKcdTR+ImVrjkiYDOXyonWQwwCDaDXPJWVE=; b=O4rOrAgBjzbubX6Q0OGCMbsb53QJHqL/7ogmQ8FwXnR6F+G7+q9G4gFauBa+5vDuxw dJ85jU+UqqgoP7V0jyt8QF6UdY+IBPV6t6XLN/bAppaSDRNdBno1ljT/dNWQVG6nH6MZ n0NNrpNvEJd/5h5Xoqe3BAv7ZkOONGOfymtFuL7lLfUAnvZMyg/8wKLGLU1iKxC/qlp+ B7W9P8pbazf1XNbokPxUkWYPqd5a0m4dmCcL/f5ZlqEAEqo3SVEPU037OUglu2u+jvEo aViollMVS7BLPtkZxr9VjDTavLaFKmYDo5CSdYh5SeD9t+lxkRv2biEpiiy4VXjLCsiI cJkw== X-Gm-Message-State: ALyK8tKNuWzSL2KA9PV90/H/kqto/07zFds8Wz1i3vnMXV4WmGfp36tTCFEXDiHrK0ZtAw== X-Received: by 10.98.84.197 with SMTP id i188mr9904275pfb.43.1468477300649; Wed, 13 Jul 2016 23:21:40 -0700 (PDT) Received: from [127.0.1.1] ([72.168.144.1]) by smtp.gmail.com with ESMTPSA id o193sm274789pfo.12.2016.07.13.23.21.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 Jul 2016 23:21:40 -0700 (PDT) From: John Fastabend X-Google-Original-From: John Fastabend Subject: [RFC PATCH v2 04/10] net: sched: a dflt qdisc may be used with per cpu stats To: fw@strlen.de, jhs@mojatatu.com, alexei.starovoitov@gmail.com, eric.dumazet@gmail.com, brouer@redhat.com Cc: netdev@vger.kernel.org Date: Wed, 13 Jul 2016 23:21:18 -0700 Message-ID: <20160714062117.8270.16275.stgit@john-Precision-Tower-5810> In-Reply-To: <20160714061852.8270.66271.stgit@john-Precision-Tower-5810> References: <20160714061852.8270.66271.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 Enable dflt qdisc support for per cpu stats before this patch a dflt qdisc was required to use the global statistics qstats and bstats. Signed-off-by: John Fastabend --- net/sched/sch_generic.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 2c3e23b..fc70204 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -647,18 +647,34 @@ struct Qdisc *qdisc_create_dflt(struct netdev_queue *dev_queue, struct Qdisc *sch; if (!try_module_get(ops->owner)) - goto errout; + return NULL; sch = qdisc_alloc(dev_queue, ops); if (IS_ERR(sch)) - goto errout; + return NULL; sch->parent = parentid; - if (!ops->init || ops->init(sch, NULL) == 0) + if (!ops->init) return sch; - qdisc_destroy(sch); + if (ops->init(sch, NULL)) + goto errout; + + /* init() may have set percpu flags so init data structures */ + if (qdisc_is_percpu_stats(sch)) { + sch->cpu_bstats = + netdev_alloc_pcpu_stats(struct gnet_stats_basic_cpu); + if (!sch->cpu_bstats) + goto errout; + + sch->cpu_qstats = alloc_percpu(struct gnet_stats_queue); + if (!sch->cpu_qstats) + goto errout; + } + + return sch; errout: + qdisc_destroy(sch); return NULL; } EXPORT_SYMBOL(qdisc_create_dflt);