net/sched: cls_flower: Set egress_dev mark when calling into the HW driver
Commit7091d8c
'(net/sched: cls_flower: Add offload support using egress Hardware device') made sure (when fl_hw_replace_filter is called) to put the egress_dev mark on persisent structure instance. Hence, following calls into the HW driver for stats and deletion will note it and act accordingly. With commitde4784ca03
this property is lost and hence when called, the HW driver failes to operate (stats, delete) on the offloaded flow. Fix it by setting the egress_dev flag whenever the ingress device is different from the hw device since this is exactly the condition under which we're calling into the HW driver through the egress port net-device. Fixes:de4784ca03
('net: sched: get rid of struct tc_to_netdev') Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roi Dayan <roid@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0ad646c81b
commit
c019b5166e
|
@ -234,6 +234,7 @@ static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f)
|
||||||
tc_cls_common_offload_init(&cls_flower.common, tp);
|
tc_cls_common_offload_init(&cls_flower.common, tp);
|
||||||
cls_flower.command = TC_CLSFLOWER_DESTROY;
|
cls_flower.command = TC_CLSFLOWER_DESTROY;
|
||||||
cls_flower.cookie = (unsigned long) f;
|
cls_flower.cookie = (unsigned long) f;
|
||||||
|
cls_flower.egress_dev = f->hw_dev != tp->q->dev_queue->dev;
|
||||||
|
|
||||||
dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER, &cls_flower);
|
dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER, &cls_flower);
|
||||||
}
|
}
|
||||||
|
@ -289,6 +290,7 @@ static void fl_hw_update_stats(struct tcf_proto *tp, struct cls_fl_filter *f)
|
||||||
cls_flower.command = TC_CLSFLOWER_STATS;
|
cls_flower.command = TC_CLSFLOWER_STATS;
|
||||||
cls_flower.cookie = (unsigned long) f;
|
cls_flower.cookie = (unsigned long) f;
|
||||||
cls_flower.exts = &f->exts;
|
cls_flower.exts = &f->exts;
|
||||||
|
cls_flower.egress_dev = f->hw_dev != tp->q->dev_queue->dev;
|
||||||
|
|
||||||
dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER,
|
dev->netdev_ops->ndo_setup_tc(dev, TC_SETUP_CLSFLOWER,
|
||||||
&cls_flower);
|
&cls_flower);
|
||||||
|
|
Loading…
Reference in New Issue