On Wed, 13 Dec 2017 16:10:33 +0100, Jiri Pirko wrote:
> diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c
> index 69d7e9a..9cf61e7 100644
> --- a/net/sched/cls_bpf.c
> +++ b/net/sched/cls_bpf.c
> @@ -170,8 +170,10 @@ static int cls_bpf_offload_cmd(struct tcf_proto *tp,
> struct cls_bpf_prog *prog,
> cls_bpf_offload_cmd(tp, prog, TC_CLSBPF_DESTROY);
> return err;
> } else if (err > 0) {
> - prog->gen_flags |= TCA_CLS_FLAGS_IN_HW;
> + tcf_block_offload_inc(block, &prog->gen_flags);
> }
> + } else {
> + tcf_block_offload_dec(block, &prog->gen_flags);
> }
>
> if (addorrep && skip_sw && !(prog->gen_flags & TCA_CLS_FLAGS_IN_HW))
The in_hw reporting also seems broken.
tools/testing/selftests/bpf/test_offload.py catches this.