From: Hadar Hen Zion Date: Sun, 4 Dec 2016 13:25:19 +0000 (+0200) Subject: net/sched: cls_flower: Set the filter Hardware device for all use-cases X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=a6e169312971219a34927e8fdece60046fafb8ba;p=linux-beck.git net/sched: cls_flower: Set the filter Hardware device for all use-cases Check if the returned device from tcf_exts_get_dev function supports tc offload and in case the rule can't be offloaded, set the filter hw_dev parameter to the original device given by the user. The filter hw_device parameter should always be set by fl_hw_replace_filter function, since this pointer is used by dump stats and destroy filter for each flower rule (offloaded or not). Fixes: 7091d8c7055d ('net/sched: cls_flower: Add offload support using egress Hardware device') Signed-off-by: Hadar Hen Zion Reported-by: Simon Horman Tested-by: Simon Horman Signed-off-by: David S. Miller --- diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index c5cea78491dc..29a9e6d9f274 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -236,8 +236,11 @@ static int fl_hw_replace_filter(struct tcf_proto *tp, int err; if (!tc_can_offload(dev, tp)) { - if (tcf_exts_get_dev(dev, &f->exts, &f->hw_dev)) + if (tcf_exts_get_dev(dev, &f->exts, &f->hw_dev) || + (f->hw_dev && !tc_can_offload(f->hw_dev, tp))) { + f->hw_dev = dev; return tc_skip_sw(f->flags) ? -EINVAL : 0; + } dev = f->hw_dev; tc->egress_dev = true; } else {