Message ID | 20240415132054.3822230-4-edumazet@google.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net_sched: first series for RTNL-less qdisc dumps | expand |
+ Vinicius Costa Gomes On Mon, Apr 15, 2024 at 01:20:43PM +0000, Eric Dumazet wrote: > Instead of relying on RTNL, cbs_dump() can use READ_ONCE() > annotations, paired with WRITE_ONCE() ones in cbs_change(). > > Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Simon Horman <horms@kernel.org> (Eric, I need to step away from my desk for a while. So there will be a bit of a delay in reviewing the rest of the series.) > --- > net/sched/sch_cbs.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/net/sched/sch_cbs.c b/net/sched/sch_cbs.c > index 69001eff0315584df23a24f81ae3b4cf7bf5fd79..939425da18955bc8a3f3d2d5b852b2585e9bcaee 100644 > --- a/net/sched/sch_cbs.c > +++ b/net/sched/sch_cbs.c > @@ -389,11 +389,11 @@ static int cbs_change(struct Qdisc *sch, struct nlattr *opt, > } > > /* Everything went OK, save the parameters used. */ > - q->hicredit = qopt->hicredit; > - q->locredit = qopt->locredit; > - q->idleslope = qopt->idleslope * BYTES_PER_KBIT; > - q->sendslope = qopt->sendslope * BYTES_PER_KBIT; > - q->offload = qopt->offload; > + WRITE_ONCE(q->hicredit, qopt->hicredit); > + WRITE_ONCE(q->locredit, qopt->locredit); > + WRITE_ONCE(q->idleslope, qopt->idleslope * BYTES_PER_KBIT); > + WRITE_ONCE(q->sendslope, qopt->sendslope * BYTES_PER_KBIT); > + WRITE_ONCE(q->offload, qopt->offload); > > return 0; > } > @@ -459,11 +459,11 @@ static int cbs_dump(struct Qdisc *sch, struct sk_buff *skb) > if (!nest) > goto nla_put_failure; > > - opt.hicredit = q->hicredit; > - opt.locredit = q->locredit; > - opt.sendslope = div64_s64(q->sendslope, BYTES_PER_KBIT); > - opt.idleslope = div64_s64(q->idleslope, BYTES_PER_KBIT); > - opt.offload = q->offload; > + opt.hicredit = READ_ONCE(q->hicredit); > + opt.locredit = READ_ONCE(q->locredit); > + opt.sendslope = div64_s64(READ_ONCE(q->sendslope), BYTES_PER_KBIT); > + opt.idleslope = div64_s64(READ_ONCE(q->idleslope), BYTES_PER_KBIT); > + opt.offload = READ_ONCE(q->offload); > > if (nla_put(skb, TCA_CBS_PARMS, sizeof(opt), &opt)) > goto nla_put_failure; > -- > 2.44.0.683.g7961c838ac-goog > >
diff --git a/net/sched/sch_cbs.c b/net/sched/sch_cbs.c index 69001eff0315584df23a24f81ae3b4cf7bf5fd79..939425da18955bc8a3f3d2d5b852b2585e9bcaee 100644 --- a/net/sched/sch_cbs.c +++ b/net/sched/sch_cbs.c @@ -389,11 +389,11 @@ static int cbs_change(struct Qdisc *sch, struct nlattr *opt, } /* Everything went OK, save the parameters used. */ - q->hicredit = qopt->hicredit; - q->locredit = qopt->locredit; - q->idleslope = qopt->idleslope * BYTES_PER_KBIT; - q->sendslope = qopt->sendslope * BYTES_PER_KBIT; - q->offload = qopt->offload; + WRITE_ONCE(q->hicredit, qopt->hicredit); + WRITE_ONCE(q->locredit, qopt->locredit); + WRITE_ONCE(q->idleslope, qopt->idleslope * BYTES_PER_KBIT); + WRITE_ONCE(q->sendslope, qopt->sendslope * BYTES_PER_KBIT); + WRITE_ONCE(q->offload, qopt->offload); return 0; } @@ -459,11 +459,11 @@ static int cbs_dump(struct Qdisc *sch, struct sk_buff *skb) if (!nest) goto nla_put_failure; - opt.hicredit = q->hicredit; - opt.locredit = q->locredit; - opt.sendslope = div64_s64(q->sendslope, BYTES_PER_KBIT); - opt.idleslope = div64_s64(q->idleslope, BYTES_PER_KBIT); - opt.offload = q->offload; + opt.hicredit = READ_ONCE(q->hicredit); + opt.locredit = READ_ONCE(q->locredit); + opt.sendslope = div64_s64(READ_ONCE(q->sendslope), BYTES_PER_KBIT); + opt.idleslope = div64_s64(READ_ONCE(q->idleslope), BYTES_PER_KBIT); + opt.offload = READ_ONCE(q->offload); if (nla_put(skb, TCA_CBS_PARMS, sizeof(opt), &opt)) goto nla_put_failure;
Instead of relying on RTNL, cbs_dump() can use READ_ONCE() annotations, paired with WRITE_ONCE() ones in cbs_change(). Signed-off-by: Eric Dumazet <edumazet@google.com> --- net/sched/sch_cbs.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)