On Wed, Jun 28, 2017 at 06:28:17PM -0700, Jakub Kicinski wrote:
> 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 :(
Sorry about that, will fix.