From 4026225a854760fa355e393a386b6c96d794bce2 Mon Sep 17 00:00:00 2001
From: Madalin Bucur <madalin.bucur@nxp.com>
Date: Tue, 24 Apr 2018 17:07:25 +0300
Subject: [PATCH] sdk_dpa: adapt ceetm code to new kernel API

Signed-off-by: Madalin Bucur <madalin.bucur@nxp.com>
---
 .../ethernet/freescale/sdk_dpaa/dpaa_eth_ceetm.c   | 26 +++++++++++++---------
 1 file changed, 16 insertions(+), 10 deletions(-)

--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_ceetm.c
+++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_ceetm.c
@@ -577,7 +577,8 @@ nla_put_failure:
 
 /* Configure a root ceetm qdisc */
 static int ceetm_init_root(struct Qdisc *sch, struct ceetm_qdisc *priv,
-			   struct tc_ceetm_qopt *qopt)
+			   struct tc_ceetm_qopt *qopt,
+			   struct netlink_ext_ack *extack)
 {
 	struct netdev_queue *dev_queue;
 	struct Qdisc *qdisc;
@@ -622,7 +623,7 @@ static int ceetm_init_root(struct Qdisc
 				      TC_H_MIN(i + PFIFO_MIN_OFFSET));
 
 		qdisc = qdisc_create_dflt(dev_queue, &pfifo_qdisc_ops,
-					  parent_id);
+					  parent_id, extack);
 		if (!qdisc) {
 			err = -ENOMEM;
 			goto err_init_root;
@@ -1035,7 +1036,8 @@ err_init_wbfs:
 }
 
 /* Configure a generic ceetm qdisc */
-static int ceetm_init(struct Qdisc *sch, struct nlattr *opt)
+static int ceetm_init(struct Qdisc *sch, struct nlattr *opt,
+		      struct netlink_ext_ack *extack)
 {
 	struct tc_ceetm_qopt *qopt;
 	struct nlattr *tb[TCA_CEETM_QOPS + 1];
@@ -1053,7 +1055,7 @@ static int ceetm_init(struct Qdisc *sch,
 		return -EINVAL;
 	}
 
-	ret = tcf_block_get(&priv->block, &priv->filter_list, sch);
+	ret = tcf_block_get(&priv->block, &priv->filter_list, sch, extack);
 	if (ret)
 		return ret;
 
@@ -1087,7 +1089,7 @@ static int ceetm_init(struct Qdisc *sch,
 
 	switch (priv->type) {
 	case CEETM_ROOT:
-		ret = ceetm_init_root(sch, priv, qopt);
+		ret = ceetm_init_root(sch, priv, qopt, extack);
 		break;
 	case CEETM_PRIO:
 		ret = ceetm_init_prio(sch, priv, qopt);
@@ -1224,7 +1226,8 @@ change_err:
 }
 
 /* Edit a ceetm qdisc */
-static int ceetm_change(struct Qdisc *sch, struct nlattr *opt)
+static int ceetm_change(struct Qdisc *sch, struct nlattr *opt,
+			struct netlink_ext_ack *extack)
 {
 	struct tc_ceetm_qopt *qopt;
 	struct nlattr *tb[TCA_CEETM_QOPS + 1];
@@ -1410,7 +1413,8 @@ static int ceetm_cls_change_wbfs(struct
 
 /* Add a ceetm root class or configure a ceetm root/prio/wbfs class */
 static int ceetm_cls_change(struct Qdisc *sch, u32 classid, u32 parentid,
-			    struct nlattr **tca, unsigned long *arg)
+			    struct nlattr **tca, unsigned long *arg,
+			    struct netlink_ext_ack *extack)
 {
 	int err;
 	u64 bps;
@@ -1505,7 +1509,7 @@ static int ceetm_cls_change(struct Qdisc
 	if (!cl)
 		return -ENOMEM;
 
-	err = tcf_block_get(&cl->block, &cl->filter_list, sch);
+	err = tcf_block_get(&cl->block, &cl->filter_list, sch, extack);
 	if (err) {
 		kfree(cl);
 		return err;
@@ -1699,7 +1703,8 @@ static struct Qdisc *ceetm_cls_leaf(stru
 }
 
 static int ceetm_cls_graft(struct Qdisc *sch, unsigned long arg,
-			   struct Qdisc *new, struct Qdisc **old)
+			   struct Qdisc *new, struct Qdisc **old,
+			   struct netlink_ext_ack *extack)
 {
 	if (new && strcmp(new->ops->id, ceetm_qdisc_ops.id)) {
 		pr_err("CEETM: only ceetm qdiscs can be attached to ceetm classes\n");
@@ -1763,7 +1768,8 @@ static int ceetm_cls_dump_stats(struct Q
 	return gnet_stats_copy_app(d, &xstats, sizeof(xstats));
 }
 
-static struct tcf_block *ceetm_tcf_block(struct Qdisc *sch, unsigned long arg)
+static struct tcf_block *ceetm_tcf_block(struct Qdisc *sch, unsigned long arg,
+					 struct netlink_ext_ack *extack)
 {
 	struct ceetm_qdisc *priv = qdisc_priv(sch);
 	struct ceetm_class *cl = (struct ceetm_class *)arg;
