From patchwork Wed Dec 30 17:53:58 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 561785 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 70F87140BD4 for ; Thu, 31 Dec 2015 04:54:21 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=UIvqvRNr; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755121AbbL3RyR (ORCPT ); Wed, 30 Dec 2015 12:54:17 -0500 Received: from mail-pa0-f54.google.com ([209.85.220.54]:36159 "EHLO mail-pa0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754866AbbL3RyP (ORCPT ); Wed, 30 Dec 2015 12:54:15 -0500 Received: by mail-pa0-f54.google.com with SMTP id yy13so48730459pab.3 for ; Wed, 30 Dec 2015 09:54:14 -0800 (PST) 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-type:content-transfer-encoding; bh=ynSWOFdKOyxQ6G2DuCbtjoKUyklHKjx6eSK03K4vgww=; b=UIvqvRNrXeFhKwnrHvmAnhoD6gfeSK6WPAYUu+FgRcP20d2TsAdU8ovZrO+qaDuiYj h3PolTFBOK+vMJuBpRFjtpiBdV1TnuNxuXqrNzKR60lCTHT8Jf7xcZ3M6hwXq03bhdaD qpfOo4vx1QPb6Thln5SVB/2/xn29yHGLvYNSM+a3KBLvJ81xf0Fnv9aGXJ7HwMrUxIPC 7sjves6UoAFGwP5K188+OfqKZ66TnRcUizXt2fc5iYUeppX6sTR3vVoD4fcmrCT8vcRO I5aKQGd0xJDz+1MF6YMks7ze55pZneBNKV2VEsuhIzEh5hxxJs4AvBHmfuOIa7xcVSjz dihw== X-Received: by 10.66.55.6 with SMTP id n6mr95163063pap.33.1451498054670; Wed, 30 Dec 2015 09:54:14 -0800 (PST) Received: from [127.0.1.1] ([72.168.144.108]) by smtp.gmail.com with ESMTPSA id ix2sm96350900pac.15.2015.12.30.09.54.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Dec 2015 09:54:14 -0800 (PST) From: John Fastabend X-Google-Original-From: John Fastabend Subject: [RFC PATCH 08/12] net: sched: a dflt qdisc may be used with per cpu stats To: daniel@iogearbox.net, eric.dumazet@gmail.com, jhs@mojatatu.com, aduyck@mirantis.com, brouer@redhat.com, davem@davemloft.net Cc: john.r.fastabend@intel.com, netdev@vger.kernel.org, john.fastabend@gmail.com Date: Wed, 30 Dec 2015 09:53:58 -0800 Message-ID: <20151230175358.26257.12220.stgit@john-Precision-Tower-5810> In-Reply-To: <20151230175000.26257.41532.stgit@john-Precision-Tower-5810> References: <20151230175000.26257.41532.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(-) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 134fb95..be5d63a 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -641,18 +641,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);