[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200930161503.GF3833404@ulmo>
Date: Wed, 30 Sep 2020 18:15:03 +0200
From: Thierry Reding <thierry.reding@...il.com>
To: Dmitry Osipenko <digetx@...il.com>
Cc: Nicolin Chen <nicoleotsuka@...il.com>, joro@...tes.org,
krzk@...nel.org, vdumpa@...dia.com, jonathanh@...dia.com,
linux-tegra@...r.kernel.org, iommu@...ts.linux-foundation.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 1/3] memory: tegra: Add
devm_tegra_get_memory_controller()
On Wed, Sep 30, 2020 at 07:06:27PM +0300, Dmitry Osipenko wrote:
> 30.09.2020 19:03, Thierry Reding пишет:
> > On Wed, Sep 30, 2020 at 06:53:06PM +0300, Dmitry Osipenko wrote:
> >> 30.09.2020 18:23, Thierry Reding пишет:
> >>> On Wed, Sep 30, 2020 at 01:42:56AM -0700, Nicolin Chen wrote:
> >>>> From: Dmitry Osipenko <digetx@...il.com>
> >>>>
> >>>> Multiple Tegra drivers need to retrieve Memory Controller and hence there
> >>>> is quite some duplication of the retrieval code among the drivers. Let's
> >>>> add a new common helper for the retrieval of the MC.
> >>>>
> >>>> Signed-off-by: Dmitry Osipenko <digetx@...il.com>
> >>>> Signed-off-by: Nicolin Chen <nicoleotsuka@...il.com>
> >>>> ---
> >>>>
> >>>> Changelog
> >>>> v2->v3:
> >>>> * Replaced with Dimtry's devm_tegra_get_memory_controller()
> >>>> v1->v2:
> >>>> * N/A
> >>>>
> >>>> drivers/memory/tegra/mc.c | 39 +++++++++++++++++++++++++++++++++++++++
> >>>> include/soc/tegra/mc.h | 17 +++++++++++++++++
> >>>> 2 files changed, 56 insertions(+)
> >>>
> >>> Let's not add this helper, please. If a device needs a reference to the
> >>> memory controller, it should have a phandle to the memory controller in
> >>> device tree so that it can be looked up explicitly.
> >>>
> >>> Adding this helper is officially sanctioning that it's okay not to have
> >>> that reference and that's a bad idea.
> >>
> >> And please explain why it's a bad idea, I don't see anything bad here at
> >> all.
> >
> > Well, you said yourself in a recent comment that we should avoid global
> > variables. devm_tegra_get_memory_controller() is nothing but a glorified
> > global variable.
>
> This is not a variable, but a common helper function which will remove
> the duplicated code and will help to avoid common mistakes like a missed
> put_device().
Yeah, you're right: this is actually much worse than a global variable.
It's a helper function that needs 50+ lines in order to effectively
access a global variable.
You could write this much simpler by doing something like this:
static struct tegra_mc *global_mc;
int tegra_mc_probe(...)
{
...
global_mc = mc;
...
}
struct tegra_mc *tegra_get_memory_controller(void)
{
return global_mc;
}
The result is *exactly* the same, except that this is actually more
honest. Nicolin's patch *pretends* that it isn't using a global variable
by wrapping a lot of complicated code around it.
But that doesn't change the fact that this accesses a singleton object
without actually being able to tie it to the device in the first place.
Thierry
Download attachment "signature.asc" of type "application/pgp-signature" (834 bytes)
Powered by blists - more mailing lists