From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Doug Anderson <dianders@chromium.org>
Cc: Andy Gross <agross@kernel.org>,
David Brown <david.brown@linaro.org>,
Stephen Boyd <swboyd@chromium.org>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
linux-arm-msm <linux-arm-msm@vger.kernel.org>,
devicetree@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v7 2/4] soc: qcom: Add AOSS QMP driver
Date: Thu, 23 May 2019 12:03:38 -0700 [thread overview]
Message-ID: <20190523190338.GT31438@minitux> (raw)
In-Reply-To: <CAD=FV=VVxKSp6e=j8YM8JBrhsF+T=0=8xDjd_817hphOMWHVFA@mail.gmail.com>
On Thu 23 May 09:38 PDT 2019, Doug Anderson wrote:
> Hi,
>
> On Tue, Apr 30, 2019 at 9:38 PM Bjorn Andersson
> <bjorn.andersson@linaro.org> wrote:
> >
> > +static int qmp_qdss_clk_prepare(struct clk_hw *hw)
> > +{
> > + struct qmp *qmp = container_of(hw, struct qmp, qdss_clk);
> > + char buf[QMP_MSG_LEN] = "{class: clock, res: qdss, val: 1}";
>
> nit: "static const" the buf? No need to copy it to the stack each
> time. In qmp_qdss_clk_unprepare() too.
>
Thanks, that makes sense.
> ...your string is also now fixed at 34 bytes big (including the '\0').
> Do we still need to send exactly 96 bytes, or can we dumb this down to
> 36? We'll get a compile error if we overflow, right? If this truly
> needs to be exactly 96 bytes maybe qmp_send()'s error checks should
> check for things being exactly 96 bytes instead of checking for > and
> % 4.
>
I double checked with my contacts and the only requirement here is that
memory has to be word-accessed, so I'll figure out a sane way to write
this.
>
> > +static int qmp_qdss_clk_add(struct qmp *qmp)
> > +{
> > + struct clk_init_data qdss_init = {
> > + .ops = &qmp_qdss_clk_ops,
> > + .name = "qdss",
> > + };
>
> Can't qdss_init be "static const"? That had the advantage of not
> needing to construct it on the stack and also of it having a longer
> lifetime. It looks like clk_register() stores the "hw" pointer in its
> structure and the "hw" structure will have a pointer here. While I
> can believe that it never looks at it again, it's nice if that pointer
> doesn't point somewhere on an old stack.
>
The purpose here was for clk_hw_register() to consume it and never look
back, but I agree that it's a bit fragile. I'll review Stephen's
proposed patch.
> I suppose we could go the other way and try to mark more stuff in this
> module as __init and __initdata, but even then at least the pointer
> won't be onto a stack. ;-)
>
>
> > + int ret;
> > +
> > + qmp->qdss_clk.init = &qdss_init;
> > + ret = clk_hw_register(qmp->dev, &qmp->qdss_clk);
> > + if (ret < 0) {
> > + dev_err(qmp->dev, "failed to register qdss clock\n");
> > + return ret;
> > + }
> > +
> > + return of_clk_add_hw_provider(qmp->dev->of_node, of_clk_hw_simple_get,
> > + &qmp->qdss_clk);
>
> devm_clk_hw_register() and devm_of_clk_add_hw_provider()? If you're
> worried about ordering you could always throw in
> devm_add_action_or_reset() to handle the qmp_pd_remove(), qmp_close()
> and mbox_free_channel().
>
> ...with that you could fully get rid of qmp_remove() and also your
> setting of drvdata.
>
Yeah, I was worried about qmp_close() before unregistering the clock.
I'll take another look, will at least have to fix the error handling on
of_clk_add_hw_provider()
>
> > +static void qmp_pd_remove(struct qmp *qmp)
> > +{
> > + struct genpd_onecell_data *data = &qmp->pd_data;
> > + struct device *dev = qmp->dev;
> > + int i;
> > +
> > + of_genpd_del_provider(dev->of_node);
> > +
> > + for (i = 0; i < data->num_domains; i++)
> > + pm_genpd_remove(data->domains[i]);
>
> Still feels like the above loop would be better as:
> for (i = data->num_domains - 1; i >= 0; i--)
>
To me this carries a message that the removal order is significant,
which I'm unable to convince myself that it is.
>
> (BTW: any way you could add me to the CC list for future patches so I
> notice them earlier?)
>
Yes of course, thanks for your review.
Regards,
Bjorn
next prev parent reply other threads:[~2019-05-23 19:03 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-01 4:37 [PATCH v7 0/4] Qualcomm AOSS QMP driver Bjorn Andersson
2019-05-01 4:37 ` [PATCH v7 1/4] dt-bindings: soc: qcom: Add AOSS QMP binding Bjorn Andersson
2019-05-01 19:42 ` Rob Herring
2019-05-21 10:42 ` Vinod Koul
2019-05-01 4:37 ` [PATCH v7 2/4] soc: qcom: Add AOSS QMP driver Bjorn Andersson
2019-05-13 14:10 ` Sibi Sankar
2019-05-21 8:08 ` Arun Kumar Neelakantam
2019-05-21 11:10 ` Vinod Koul
2019-05-23 16:38 ` Doug Anderson
2019-05-23 18:05 ` Stephen Boyd
2019-05-23 18:35 ` Doug Anderson
2019-05-23 19:09 ` Bjorn Andersson
2019-07-30 22:49 ` Stephen Boyd
2019-05-23 19:03 ` Bjorn Andersson [this message]
2019-05-25 17:53 ` Sai Prakash Ranjan
2019-05-25 18:17 ` Bjorn Andersson
2019-05-01 4:37 ` [PATCH v7 3/4] arm64: dts: qcom: Add AOSS QMP node Bjorn Andersson
2019-05-21 11:12 ` Vinod Koul
2019-05-23 15:12 ` Doug Anderson
2019-05-01 4:37 ` [PATCH v7 4/4] arm64: dts: qcom: sdm845: Add Q6V5 MSS node Bjorn Andersson
2019-05-21 11:13 ` Vinod Koul
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=20190523190338.GT31438@minitux \
--to=bjorn.andersson@linaro.org \
--cc=agross@kernel.org \
--cc=david.brown@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=dianders@chromium.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=robh+dt@kernel.org \
--cc=swboyd@chromium.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.