From patchwork Wed Dec 20 17:35:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Aring X-Patchwork-Id: 851573 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=mojatatu-com.20150623.gappssmtp.com header.i=@mojatatu-com.20150623.gappssmtp.com header.b="s5Xc6Qbw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3z224l20Gkz9s72 for ; Thu, 21 Dec 2017 04:36:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755944AbdLTRgV (ORCPT ); Wed, 20 Dec 2017 12:36:21 -0500 Received: from mail-io0-f195.google.com ([209.85.223.195]:39738 "EHLO mail-io0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755850AbdLTRfw (ORCPT ); Wed, 20 Dec 2017 12:35:52 -0500 Received: by mail-io0-f195.google.com with SMTP id g70so5584873ioj.6 for ; Wed, 20 Dec 2017 09:35:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mCwIVjUU08TmC5/6FZe1yK/xu0tWp9e9wNIyzHs0gFU=; b=s5Xc6Qbw8/WaBz1FiC838VE+WYe6u6JX4CkXtzLPk2psWXNcePdn5gHQb6HLRVQQmP fs8TvxpOKKQxg2++sZmkM1Y72bqqefTPh1IF62d+X6DlHbX51VeF0wBN/C54BXnNFOKj Cx6tIVH0wulXpCY0f0Ag5fXC71O2qeodj8b4jtILgM3I9lbHqilhRhKz7tpm7TgqTxV5 2//ZsNBisTqDz4YD6vBq6XL45pn/OlkPDC0SW6OiaicKY51kGIpMLjenFCDhSl+r0UEo oMgvE1ZyDvfXUpdKq+X9ezlfibKjh8TGEZN1dtwPMpempCAN/nuAhCVn/dZwRKgSE8OD z16w== 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=mCwIVjUU08TmC5/6FZe1yK/xu0tWp9e9wNIyzHs0gFU=; b=sMMy0VCgcm+LznHiiRlHD95A7N8PmKg8V/gch/Zkq7o00GbDHtvZtuODstET4JozeB PhRJgeV65MMFzsrGV3JkHGzmirQtlSSayK8HoG4ZaI7s696xeHCvqE9d1K8NGVZ/hYPP XpgMRv7VzN3QLq/l1r+27ZGvVXhX3bnxN9gM97q1jtj39ZYecI/ztvoT06l/JU4U7hqG dV20bVipuDez9kHPdYYRqLPUZ/fPEJ5gC5EFiPLX3Ebj5BBfATf/NMjR7vFHBJg0sZaD PYPGFsURHcqLGCd5R2YlXwdCxhlmQOeQ93Qg8RPFaj5EUBaVCQZuHBo5UKlTyGq2fXCY +Ksw== X-Gm-Message-State: AKGB3mLx+1Qsw10nyvHNDg+hOvuNDsJD3LvIhFdi4q+nBdw2fg80QBRb AHjc7uH7OuLmErntB36x26mhKw== X-Google-Smtp-Source: ACJfBot5QMUOYQzebgZPyiKMbIpRKeh9r0e06nFYPM/3vn1VQekYBcpHxFj5pGRHeR83X6w2956gzA== X-Received: by 10.107.149.133 with SMTP id x127mr9512788iod.286.1513791352008; Wed, 20 Dec 2017 09:35:52 -0800 (PST) Received: from x220t.lan ([64.26.149.125]) by smtp.gmail.com with ESMTPSA id w75sm9687740iod.66.2017.12.20.09.35.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 20 Dec 2017 09:35:51 -0800 (PST) From: Alexander Aring To: jhs@mojatatu.com Cc: xiyou.wangcong@gmail.com, jiri@resnulli.us, davem@davemloft.net, netdev@vger.kernel.org, kernel@mojatatu.com, Alexander Aring , David Ahern Subject: [PATCHv4 net-next 13/14] net: sch: sch_cbs: add extack support Date: Wed, 20 Dec 2017 12:35:23 -0500 Message-Id: <20171220173524.25874-14-aring@mojatatu.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171220173524.25874-1-aring@mojatatu.com> References: <20171220173524.25874-1-aring@mojatatu.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds extack support for the cbs qdisc implementation by adding NL_SET_ERR_MSG in validation of user input. Also it serves to illustrate a use case of how the infrastructure ops api changes are to be used by individual qdiscs. Cc: David Ahern Acked-by: Jamal Hadi Salim Signed-off-by: Alexander Aring --- net/sched/sch_cbs.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/net/sched/sch_cbs.c b/net/sched/sch_cbs.c index 8bf6e163d29c..cdd96b9a27bc 100644 --- a/net/sched/sch_cbs.c +++ b/net/sched/sch_cbs.c @@ -219,14 +219,17 @@ static void cbs_disable_offload(struct net_device *dev, } static int cbs_enable_offload(struct net_device *dev, struct cbs_sched_data *q, - const struct tc_cbs_qopt *opt) + const struct tc_cbs_qopt *opt, + struct netlink_ext_ack *extack) { const struct net_device_ops *ops = dev->netdev_ops; struct tc_cbs_qopt_offload cbs = { }; int err; - if (!ops->ndo_setup_tc) + if (!ops->ndo_setup_tc) { + NL_SET_ERR_MSG(extack, "Specified device does not support cbs offload"); return -EOPNOTSUPP; + } cbs.queue = q->queue; @@ -237,8 +240,10 @@ static int cbs_enable_offload(struct net_device *dev, struct cbs_sched_data *q, cbs.sendslope = opt->sendslope; err = ops->ndo_setup_tc(dev, TC_SETUP_QDISC_CBS, &cbs); - if (err < 0) + if (err < 0) { + NL_SET_ERR_MSG(extack, "Specified device failed to setup cbs hardware offload"); return err; + } q->enqueue = cbs_enqueue_offload; q->dequeue = cbs_dequeue_offload; @@ -255,12 +260,14 @@ static int cbs_change(struct Qdisc *sch, struct nlattr *opt, struct tc_cbs_qopt *qopt; int err; - err = nla_parse_nested(tb, TCA_CBS_MAX, opt, cbs_policy, NULL); + err = nla_parse_nested(tb, TCA_CBS_MAX, opt, cbs_policy, extack); if (err < 0) return err; - if (!tb[TCA_CBS_PARMS]) + if (!tb[TCA_CBS_PARMS]) { + NL_SET_ERR_MSG(extack, "Missing CBS parameter which are mandatory"); return -EINVAL; + } qopt = nla_data(tb[TCA_CBS_PARMS]); @@ -277,7 +284,7 @@ static int cbs_change(struct Qdisc *sch, struct nlattr *opt, cbs_disable_offload(dev, q); } else { - err = cbs_enable_offload(dev, q, qopt); + err = cbs_enable_offload(dev, q, qopt, extack); if (err < 0) return err; } @@ -298,8 +305,10 @@ static int cbs_init(struct Qdisc *sch, struct nlattr *opt, struct cbs_sched_data *q = qdisc_priv(sch); struct net_device *dev = qdisc_dev(sch); - if (!opt) + if (!opt) { + NL_SET_ERR_MSG(extack, "Missing CBS qdisc options which are mandatory"); return -EINVAL; + } q->queue = sch->dev_queue - netdev_get_tx_queue(dev, 0);