From: Jamal Hadi Salim <hadi@mojatatu.com>
To: Dan Carpenter <dan.carpenter@linaro.org>
Cc: Simon Horman <simon.horman@corigine.com>,
netdev@vger.kernel.org, deb.chatterjee@intel.com,
tom@sipanda.io, p4tc-discussions@netdevconf.info,
Mahesh.Shirshyad@amd.com, Vipin.Jain@amd.com,
tomasz.osinski@intel.com, xiyou.wangcong@gmail.com,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, khalidm@nvidia.com, toke@redhat.com
Subject: Re: [p4tc-discussions] Re: [PATCH RFC v2 net-next 04/28] net/sched: act_api: add init_ops to struct tc_action_op
Date: Mon, 5 Jun 2023 10:01:44 -0400 [thread overview]
Message-ID: <CAAFAkD-N4qeYpPMOf7WFORjnt0CDztBzHF2aF2iD+qRNLdCqbA@mail.gmail.com> (raw)
In-Reply-To: <9a777d0b-b212-4487-b5ac-9a05fafac6c7@kadam.mountain>
On Mon, Jun 5, 2023 at 7:39 AM Dan Carpenter via p4tc-discussions
<p4tc-discussions@netdevconf.info> wrote:
>
> On Mon, Jun 05, 2023 at 11:51:14AM +0200, Simon Horman wrote:
> > > @@ -1494,8 +1494,13 @@ struct tc_action *tcf_action_init_1(struct net *net, struct tcf_proto *tp,
> > > }
> > > }
> > >
> > > - err = a_o->init(net, tb[TCA_ACT_OPTIONS], est, &a, tp,
> > > - userflags.value | flags, extack);
> > > + if (a_o->init)
> > > + err = a_o->init(net, tb[TCA_ACT_OPTIONS], est, &a, tp,
> > > + userflags.value | flags, extack);
> > > + else if (a_o->init_ops)
> > > + err = a_o->init_ops(net, tb[TCA_ACT_OPTIONS], est, &a,
> > > + tp, a_o, userflags.value | flags,
> > > + extack);
> >
> > By my reading the initialisation of a occurs here.
> > Which is now conditional.
> >
>
> Right. Presumably the author knows that one (and only one) of the
> ->init or ->init_ops pointers is set.
Yes, this is correct and the code above checks i.e
- if (!act->act || !act->dump || !act->init)
+ if (!act->act || !act->dump || (!act->init && !act->init_ops))
return -EINVAL;
> This kind of relationship between
> two variables is something that Smatch tries to track inside a function
> but outside of functions, like here, then Smatch doesn't track it.
> I can't really think of a scalable way to track this.
Could you have used the statement i referred to above as part of the state?
> So there are a couple options:
>
> 1) Ignore the warning.
> 2) Remove the second if.
>
> if (a_o->init)
> err = a_o->init();
> else
> err = a_o->init_ops();
>
> I kind of like this, because I think it communicates the if ->init()
> isn't set then ->init_ops() must be.
I like this approach - we'll refactor to remove the !police. (note
police using some old tc versions is still a pariah and has typically
to be checked separately, at some point we should audit the code and
remove any police specific checks).
cheers,
jamal
> 3) Add a return.
>
> if (a_o->init) {
> err = a_o->init();
> } else if (a_o->init_ops) {
> err = a_o->init_ops();
> } else {
> WARN_ON(1);
> return ERR_PTR(-EINVAL);
> }
>
> 4) Add an unreachable. But the last time I suggested this it led to
> link errors and I didn't get a chance to investigate so probably don't
> do this:
>
> if (a_o->init) {
> err = a_o->init();
> } else if (a_o->init_ops) {
> err = a_o->init_ops();
> } else {
> unreachable();
> }
>
> regards,
> dan carpenter
>
> _______________________________________________
> p4tc-discussions mailing list -- p4tc-discussions@netdevconf.info
> To unsubscribe send an email to p4tc-discussions-leave@netdevconf.info
next prev parent reply other threads:[~2023-06-05 14:01 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-17 11:02 [PATCH RFC v2 net-next 01/28] net: sched: act_api: Add dynamic actions IDR Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 02/28] net/sched: act_api: increase action kind string length Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 03/28] net/sched: act_api: increase TCA_ID_MAX Jamal Hadi Salim
2023-06-02 14:19 ` Marcelo Ricardo Leitner
2023-06-03 13:03 ` Jamal Hadi Salim
2023-06-05 17:39 ` Jakub Kicinski
2023-06-06 17:04 ` [p4tc-discussions] " Jamal Hadi Salim
2023-06-06 17:15 ` Jakub Kicinski
2023-06-06 18:52 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 04/28] net/sched: act_api: add init_ops to struct tc_action_op Jamal Hadi Salim
2023-06-05 9:51 ` Simon Horman
2023-06-05 11:09 ` Dan Carpenter
2023-06-05 14:01 ` Jamal Hadi Salim [this message]
2023-06-05 14:57 ` [p4tc-discussions] " Dan Carpenter
2023-06-05 15:27 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 05/28] net/sched: act_api: introduce tc_lookup_action_byid() Jamal Hadi Salim
2023-06-02 19:36 ` Marcelo Ricardo Leitner
2023-06-03 13:10 ` Jamal Hadi Salim
2023-06-03 13:14 ` Jamal Hadi Salim
2023-06-05 12:08 ` Marcelo Ricardo Leitner
2023-06-05 14:55 ` [p4tc-discussions] " Jamal Hadi Salim
2023-06-05 9:55 ` Simon Horman
2023-06-05 14:17 ` [p4tc-discussions] " Jamal Hadi Salim
2023-06-05 14:31 ` Simon Horman
2023-06-05 15:04 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 06/28] net/sched: act_api: export generic tc action searcher Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 07/28] net/sched: act_api: add struct p4tc_action_ops as a parameter to lookup callback Jamal Hadi Salim
2023-06-02 19:43 ` Marcelo Ricardo Leitner
2023-06-03 13:17 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 08/28] net: introduce rcu_replace_pointer_rtnl Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 09/28] p4tc: add P4 data types Jamal Hadi Salim
2023-06-02 20:30 ` Marcelo Ricardo Leitner
2023-06-03 13:54 ` Jamal Hadi Salim
2023-06-05 10:08 ` Simon Horman
2023-06-05 14:26 ` [p4tc-discussions] " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 10/28] p4tc: add pipeline create, get, update, delete Jamal Hadi Salim
2023-06-05 10:12 ` Simon Horman
2023-06-05 14:32 ` [p4tc-discussions] " Jamal Hadi Salim
2023-06-05 14:35 ` Simon Horman
2023-06-05 15:13 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 11/28] p4tc: add metadata create, update, delete, get, flush and dump Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 12/28] p4tc: add header field create, get, delete, " Jamal Hadi Salim
2023-06-05 10:24 ` Simon Horman
2023-06-05 14:48 ` [p4tc-discussions] " Jamal Hadi Salim
2023-06-05 15:14 ` Simon Horman
2023-06-05 15:34 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 13/28] p4tc: add action template create, update, delete, get, " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 14/28] p4tc: add table " Jamal Hadi Salim
2023-06-02 21:54 ` Marcelo Ricardo Leitner
2023-06-03 14:15 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 15/28] p4tc: add table entry create, update, get, delete, " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 16/28] p4tc: add register create, update, delete, get, " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 17/28] p4tc: add dynamic action commands Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 18/28] p4tc: add P4 classifier Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 19/28] selftests: tc-testing: add JSON introspection file directory for P4TC Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 20/28] selftests: tc-testing: Don't assume ENVIR is declared in local config Jamal Hadi Salim
2023-06-02 22:08 ` Marcelo Ricardo Leitner
2023-06-03 14:17 ` Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 21/28] selftests: tc-testing: add P4TC pipeline control path tdc tests Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 22/28] selftests: tc-testing: add P4TC metadata " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 23/28] selftests: tc-testing: add P4TC action templates " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 24/28] selftests: tc-testing: add P4TC table control path " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 25/28] selftests: tc-testing: add P4TC table entries " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 26/28] selftests: tc-testing: add P4TC register " Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 27/28] p4tc: add set of P4TC table lookup kfuncs Jamal Hadi Salim
2023-05-17 11:02 ` [PATCH RFC v2 net-next 28/28] MAINTAINERS: add p4tc entry Jamal Hadi Salim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAAFAkD-N4qeYpPMOf7WFORjnt0CDztBzHF2aF2iD+qRNLdCqbA@mail.gmail.com \
--to=hadi@mojatatu.com \
--cc=Mahesh.Shirshyad@amd.com \
--cc=Vipin.Jain@amd.com \
--cc=dan.carpenter@linaro.org \
--cc=davem@davemloft.net \
--cc=deb.chatterjee@intel.com \
--cc=edumazet@google.com \
--cc=khalidm@nvidia.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=p4tc-discussions@netdevconf.info \
--cc=pabeni@redhat.com \
--cc=simon.horman@corigine.com \
--cc=toke@redhat.com \
--cc=tom@sipanda.io \
--cc=tomasz.osinski@intel.com \
--cc=xiyou.wangcong@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).