net: sched: set TCQ_F_OFFLOADED flag for MQ
authorJakub Kicinski <jakub.kicinski@netronome.com>
Thu, 8 Nov 2018 01:33:36 +0000 (17:33 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Nov 2018 00:19:48 +0000 (16:19 -0800)
PRIO and RED mark the qdisc with TCQ_F_OFFLOADED upon successful offload,
make MQ do the same.  The consistency will help with consistent
graft callback behaviour.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: John Hurley <john.hurley@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_mq.c

index f20f3a0f842432a8c2672b7137bf8975a1de0218..1db5c1bf6ddd3a8e65875c7bb4f5591edadec0a9 100644 (file)
@@ -38,9 +38,8 @@ static int mq_offload(struct Qdisc *sch, enum tc_mq_command cmd)
        return dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_QDISC_MQ, &opt);
 }
 
-static void mq_offload_stats(struct Qdisc *sch)
+static int mq_offload_stats(struct Qdisc *sch)
 {
-       struct net_device *dev = qdisc_dev(sch);
        struct tc_mq_qopt_offload opt = {
                .command = TC_MQ_STATS,
                .handle = sch->handle,
@@ -50,8 +49,7 @@ static void mq_offload_stats(struct Qdisc *sch)
                },
        };
 
-       if (tc_can_offload(dev) && dev->netdev_ops->ndo_setup_tc)
-               dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_QDISC_MQ, &opt);
+       return qdisc_offload_dump_helper(sch, TC_SETUP_QDISC_MQ, &opt);
 }
 
 static void mq_destroy(struct Qdisc *sch)
@@ -171,9 +169,8 @@ static int mq_dump(struct Qdisc *sch, struct sk_buff *skb)
 
                spin_unlock_bh(qdisc_lock(qdisc));
        }
-       mq_offload_stats(sch);
 
-       return 0;
+       return mq_offload_stats(sch);
 }
 
 static struct netdev_queue *mq_queue_get(struct Qdisc *sch, unsigned long cl)