All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding@gmail.com>
To: Dmitry Osipenko <digetx@gmail.com>
Cc: Nicolin Chen <nicoleotsuka@gmail.com>,
	joro@8bytes.org, krzk@kernel.org, vdumpa@nvidia.com,
	jonathanh@nvidia.com, linux-tegra@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/3] memory: tegra: Add devm_tegra_get_memory_controller()
Date: Wed, 30 Sep 2020 18:38:42 +0200	[thread overview]
Message-ID: <20200930163842.GA3852280@ulmo> (raw)
In-Reply-To: <29a989b3-a8cc-5c1f-ba12-47ed0d667e8e@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4311 bytes --]

On Wed, Sep 30, 2020 at 07:26:00PM +0300, Dmitry Osipenko wrote:
> 30.09.2020 19:15, Thierry Reding пишет:
> > 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@gmail.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@gmail.com>
> >>>>>> Signed-off-by: Nicolin Chen <nicoleotsuka@gmail.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.
> 
> I don't think that the MC driver will stay built-in forever, although
> its modularization is complicated right now. Hence something shall keep
> the reference to the MC device resources while they are in use and this
> patch takes care of doing that.

It looks to me like all the other places where we get a reference to the
MC also keep a reference to the device. That's obviously not going to be
enough once the code is turned into a module. At that point we need to
make sure to also grab a reference to the module. But that's orthogonal
to this discussion.

> Secondly, the Nicolin's patch doesn't pretend on anything, but rather

Yes, the patch does pretend to "look up" the memory controller device,
but in reality it will always return a singleton object, which can just
as easily be achieved by using a global variable.

> brings the already existing duplicated code to a single common place.

Where exactly is that duplicated code? The only places I see where we
get a reference to the memory controller are from the EMC drivers and
they properly look up the MC via the nvidia,memory-controller device
tree property.

But that's not what this new helper does. This code will use the OF
lookup table to find any match and then returns that, completely
ignoring any links established by the device tree.

Thierry

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Thierry Reding <thierry.reding@gmail.com>
To: Dmitry Osipenko <digetx@gmail.com>
Cc: linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org,
	krzk@kernel.org, jonathanh@nvidia.com,
	linux-tegra@vger.kernel.org
Subject: Re: [PATCH v3 1/3] memory: tegra: Add devm_tegra_get_memory_controller()
Date: Wed, 30 Sep 2020 18:38:42 +0200	[thread overview]
Message-ID: <20200930163842.GA3852280@ulmo> (raw)
In-Reply-To: <29a989b3-a8cc-5c1f-ba12-47ed0d667e8e@gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 4311 bytes --]

On Wed, Sep 30, 2020 at 07:26:00PM +0300, Dmitry Osipenko wrote:
> 30.09.2020 19:15, Thierry Reding пишет:
> > 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@gmail.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@gmail.com>
> >>>>>> Signed-off-by: Nicolin Chen <nicoleotsuka@gmail.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.
> 
> I don't think that the MC driver will stay built-in forever, although
> its modularization is complicated right now. Hence something shall keep
> the reference to the MC device resources while they are in use and this
> patch takes care of doing that.

It looks to me like all the other places where we get a reference to the
MC also keep a reference to the device. That's obviously not going to be
enough once the code is turned into a module. At that point we need to
make sure to also grab a reference to the module. But that's orthogonal
to this discussion.

> Secondly, the Nicolin's patch doesn't pretend on anything, but rather

Yes, the patch does pretend to "look up" the memory controller device,
but in reality it will always return a singleton object, which can just
as easily be achieved by using a global variable.

> brings the already existing duplicated code to a single common place.

Where exactly is that duplicated code? The only places I see where we
get a reference to the memory controller are from the EMC drivers and
they properly look up the MC via the nvidia,memory-controller device
tree property.

But that's not what this new helper does. This code will use the OF
lookup table to find any match and then returns that, completely
ignoring any links established by the device tree.

Thierry

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

[-- Attachment #2: Type: text/plain, Size: 156 bytes --]

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

  reply	other threads:[~2020-09-30 16:38 UTC|newest]

Thread overview: 132+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-30  8:42 [PATCH v3 0/3] iommu/tegra-smmu: Add PCI support Nicolin Chen
2020-09-30  8:42 ` Nicolin Chen
2020-09-30  8:42 ` [PATCH v3 1/3] memory: tegra: Add devm_tegra_get_memory_controller() Nicolin Chen
2020-09-30  8:42   ` Nicolin Chen
2020-09-30  9:07   ` Krzysztof Kozlowski
2020-09-30  9:07     ` Krzysztof Kozlowski
2020-09-30  9:41     ` Nicolin Chen
2020-09-30  9:41       ` Nicolin Chen
2020-09-30 10:27       ` Krzysztof Kozlowski
2020-09-30 10:27         ` Krzysztof Kozlowski
2020-09-30 14:41   ` Dmitry Osipenko
2020-09-30 14:41     ` Dmitry Osipenko
2020-09-30 14:45     ` Krzysztof Kozlowski
2020-09-30 14:45       ` Krzysztof Kozlowski
2020-09-30 15:22       ` Dmitry Osipenko
2020-09-30 15:22         ` Dmitry Osipenko
2020-09-30 15:23   ` Thierry Reding
2020-09-30 15:23     ` Thierry Reding
2020-09-30 15:27     ` Dmitry Osipenko
2020-09-30 15:27       ` Dmitry Osipenko
2020-09-30 15:53     ` Dmitry Osipenko
2020-09-30 15:53       ` Dmitry Osipenko
2020-09-30 16:03       ` Thierry Reding
2020-09-30 16:03         ` Thierry Reding
2020-09-30 16:06         ` Dmitry Osipenko
2020-09-30 16:06           ` Dmitry Osipenko
2020-09-30 16:15           ` Thierry Reding
2020-09-30 16:15             ` Thierry Reding
2020-09-30 16:26             ` Dmitry Osipenko
2020-09-30 16:26               ` Dmitry Osipenko
2020-09-30 16:38               ` Thierry Reding [this message]
2020-09-30 16:38                 ` Thierry Reding
2020-09-30 17:32                 ` Dmitry Osipenko
2020-09-30 17:32                   ` Dmitry Osipenko
2020-09-30  8:42 ` [PATCH v3 2/3] iommu/tegra-smmu: Rework .probe_device and .attach_dev Nicolin Chen
2020-09-30  8:42   ` Nicolin Chen
2020-09-30  9:21   ` Krzysztof Kozlowski
2020-09-30  9:21     ` Krzysztof Kozlowski
2020-09-30  9:40     ` Nicolin Chen
2020-09-30  9:40       ` Nicolin Chen
2020-09-30 10:19       ` Krzysztof Kozlowski
2020-09-30 10:19         ` Krzysztof Kozlowski
2020-09-30 14:41   ` Dmitry Osipenko
2020-09-30 14:41     ` Dmitry Osipenko
2020-09-30 15:09   ` Dmitry Osipenko
2020-09-30 15:09     ` Dmitry Osipenko
2020-09-30 20:51     ` Nicolin Chen
2020-09-30 20:51       ` Nicolin Chen
2020-09-30 15:31   ` Thierry Reding
2020-09-30 15:31     ` Thierry Reding
2020-09-30 15:36     ` Dmitry Osipenko
2020-09-30 15:36       ` Dmitry Osipenko
2020-09-30 16:06       ` Thierry Reding
2020-09-30 16:06         ` Thierry Reding
2020-09-30 16:25         ` Dmitry Osipenko
2020-09-30 16:25           ` Dmitry Osipenko
2020-09-30 16:47           ` Thierry Reding
2020-09-30 16:47             ` Thierry Reding
2020-10-01  2:11             ` Dmitry Osipenko
2020-10-01  2:11               ` Dmitry Osipenko
2020-10-01  7:58               ` Thierry Reding
2020-10-01  7:58                 ` Thierry Reding
2020-10-01 19:04                 ` Dmitry Osipenko
2020-10-01 19:04                   ` Dmitry Osipenko
2020-10-05  9:16                   ` Thierry Reding
2020-10-05  9:16                     ` Thierry Reding
2020-10-05  9:38                     ` Dmitry Osipenko
2020-10-05  9:38                       ` Dmitry Osipenko
2020-10-05 10:27                       ` Thierry Reding
2020-10-05 10:27                         ` Thierry Reding
2020-09-30 16:10       ` Thierry Reding
2020-09-30 16:10         ` Thierry Reding
2020-09-30 16:29         ` Dmitry Osipenko
2020-09-30 16:29           ` Dmitry Osipenko
2020-10-01  7:59           ` Thierry Reding
2020-10-01  7:59             ` Thierry Reding
2020-09-30 20:36     ` Nicolin Chen
2020-09-30 20:36       ` Nicolin Chen
2020-09-30 21:24       ` Dmitry Osipenko
2020-09-30 21:24         ` Dmitry Osipenko
2020-09-30 21:32         ` Nicolin Chen
2020-09-30 21:32           ` Nicolin Chen
2020-09-30 21:56           ` Dmitry Osipenko
2020-09-30 21:56             ` Dmitry Osipenko
2020-10-01  1:26             ` Nicolin Chen
2020-10-01  1:26               ` Nicolin Chen
2020-10-01  2:06               ` Dmitry Osipenko
2020-10-01  2:06                 ` Dmitry Osipenko
2020-10-01  2:48                 ` Nicolin Chen
2020-10-01  2:48                   ` Nicolin Chen
2020-10-01  4:04                   ` Dmitry Osipenko
2020-10-01  4:04                     ` Dmitry Osipenko
2020-10-01 10:23                   ` Thierry Reding
2020-10-01 10:23                     ` Thierry Reding
2020-10-01 11:04                     ` Nicolin Chen
2020-10-01 11:04                       ` Nicolin Chen
2020-10-01 20:33                       ` Dmitry Osipenko
2020-10-01 20:33                         ` Dmitry Osipenko
2020-10-02  1:07                         ` Nicolin Chen
2020-10-02  1:07                           ` Nicolin Chen
2020-10-02  1:55                           ` Dmitry Osipenko
2020-10-02  1:55                             ` Dmitry Osipenko
2020-10-02  2:54                             ` Nicolin Chen
2020-10-02  2:54                               ` Nicolin Chen
2020-10-05  7:24                             ` Thierry Reding
2020-10-05  7:24                               ` Thierry Reding
2020-10-05  7:13                         ` Thierry Reding
2020-10-05  7:13                           ` Thierry Reding
2020-10-05  8:14                           ` Dmitry Osipenko
2020-10-05  8:14                             ` Dmitry Osipenko
2020-10-05  9:31                             ` Thierry Reding
2020-10-05  9:31                               ` Thierry Reding
2020-10-01  9:54                 ` Thierry Reding
2020-10-01  9:54                   ` Thierry Reding
2020-10-01  9:51               ` Thierry Reding
2020-10-01  9:51                 ` Thierry Reding
2020-10-01 10:33                 ` Nicolin Chen
2020-10-01 10:33                   ` Nicolin Chen
2020-10-01 10:42                   ` Thierry Reding
2020-10-01 10:42                     ` Thierry Reding
2020-10-01  9:47       ` Thierry Reding
2020-10-01  9:47         ` Thierry Reding
2020-10-01 10:46       ` Thierry Reding
2020-10-01 10:46         ` Thierry Reding
2020-10-02  1:29         ` Nicolin Chen
2020-10-02  1:29           ` Nicolin Chen
2020-09-30  8:42 ` [PATCH v3 3/3] iommu/tegra-smmu: Add PCI support Nicolin Chen
2020-09-30  8:42   ` Nicolin Chen
2020-09-30 14:53   ` Dmitry Osipenko
2020-09-30 14:53     ` Dmitry Osipenko
2020-09-30 20:03     ` Nicolin Chen
2020-09-30 20:03       ` Nicolin Chen

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=20200930163842.GA3852280@ulmo \
    --to=thierry.reding@gmail.com \
    --cc=digetx@gmail.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jonathanh@nvidia.com \
    --cc=joro@8bytes.org \
    --cc=krzk@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=nicoleotsuka@gmail.com \
    --cc=vdumpa@nvidia.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 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.