On Wed, 28 Jun 2017 22:30:01 +0200, Simon Horman wrote:
> @@ -288,7 +292,21 @@ nfp_flower_del_offload(struct nfp_app *app, struct
> net_device *netdev,
> static int
> nfp_flower_get_stats(struct nfp_app *app, struct tc_cls_flower_offload *flow)
> {
> - return -EOPNOTSUPP;
> + struct nfp_fl_payload *nfp_flow;
> +
> + nfp_flow = nfp_flower_find_in_fl_table(app, flow->cookie);
> + if (!nfp_flow)
> + return -EINVAL;
> +
> + spin_lock(&nfp_flow->lock);
> + tcf_exts_stats_update(flow->exts, nfp_flow->stats.bytes,
> + nfp_flow->stats.pkts, nfp_flow->stats.used);
> +
> + nfp_flow->stats.pkts = 0;
> + nfp_flow->stats.bytes = 0;
> + spin_unlock(&nfp_flow->lock);
> +
> + return 0;
> }
This needs to take spin_lock_bh() to lock out the RX path safely :(