From: "Nuno Sá" <noname.nuno@gmail.com>
To: Herve Codina <herve.codina@bootlin.com>,
Saravana Kannan <saravanak@google.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Nuno Sa <nuno.sa@analog.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Rob Herring <robh+dt@kernel.org>,
Frank Rowand <frowand.list@gmail.com>,
Lizhi Hou <lizhi.hou@amd.com>, Max Zhen <max.zhen@amd.com>,
Sonal Santan <sonal.santan@amd.com>,
Stefano Stabellini <stefano.stabellini@xilinx.com>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
Allan Nielsen <allan.nielsen@microchip.com>,
Horatiu Vultur <horatiu.vultur@microchip.com>,
Steen Hegelund <steen.hegelund@microchip.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Android Kernel Team <kernel-team@android.com>
Subject: Re: [PATCH 2/2] of: overlay: Synchronize of_overlay_remove() with the devlink removals
Date: Tue, 27 Feb 2024 17:55:07 +0100 [thread overview]
Message-ID: <86f2262d059db84070745e299d96dde3e6078220.camel@gmail.com> (raw)
In-Reply-To: <20240227162422.76a00f11@bootlin.com>
On Tue, 2024-02-27 at 16:24 +0100, Herve Codina wrote:
> Hi Saravana, Luca, Nuno,
>
> On Tue, 20 Feb 2024 16:37:05 -0800
> Saravana Kannan <saravanak@google.com> wrote:
>
> ...
>
> > >
> > > diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
> > > index a9a292d6d59b..5c5f808b163e 100644
> > > --- a/drivers/of/overlay.c
> > > +++ b/drivers/of/overlay.c
> > > @@ -1202,6 +1202,12 @@ int of_overlay_remove(int *ovcs_id)
> > > goto out;
> > > }
> > >
> > > + /*
> > > + * Wait for any ongoing device link removals before removing some of
> > > + * nodes
> > > + */
> > > + device_link_wait_removal();
> > > +
> >
> > Nuno in his patch[1] had this "wait" happen inside
> > __of_changeset_entry_destroy(). Which seems to be necessary to not hit
> > the issue that Luca reported[2] in this patch series. Is there any
> > problem with doing that?
> >
> > Luca for some reason did a unlock/lock(of_mutex) in his test patch and
> > I don't think that's necessary.
>
> I think the unlock/lock in Luca's case and so in Nuno's case is needed.
>
> I do the device_link_wait_removal() wihout having the of_mutex locked.
>
> Now, suppose I do the device_link_wait_removal() call with the of_mutex locked.
> The following flow is allowed and a deadlock is present.
>
> of_overlay_remove()
> lock(of_mutex)
> device_link_wait_removal()
>
> And, from the workqueue jobs execution:
> ...
> device_put()
> some_driver->remove()
> of_overlay_remove() <--- The job will never end.
> It is waiting for of_mutex.
> Deadlock
>
We may need some input from Saravana (and others) on this. I might be missing
something but can a put_device() lead into a driver remove callback? Driver code is
not device code and put_device() leads to device_release() which will either call the
device ->release(), ->type->release() or the class ->dev_release(). And, IMO, calling
of_overlay_remove() or something like that (like something that would lead to
unbinding a device from it's driver) in a device release callback would be at the
very least very questionable. Typically, what you see in there is of_node_put() and
things like kfree() of the device itself or any other data.
The driver remove callback should be called when unbinding the device from it's
drivers and devlinks should also be removed after device_unbind_cleanup() (i.e, after
the driver remove callback).
Having said the above, the driver core has lots of subtleties so, again, I can be
missing something. But at this point I'm still not seeing any deadlock...
- Nuno Sá
next prev parent reply other threads:[~2024-02-27 16:55 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-30 17:41 [PATCH 0/2] Synchronize DT overlay removal with devlink removals Herve Codina
2023-11-30 17:41 ` [PATCH 1/2] driver core: Introduce device_link_wait_removal() Herve Codina
2024-02-21 0:31 ` Saravana Kannan
2024-02-21 6:56 ` Nuno Sá
2024-02-23 1:08 ` Saravana Kannan
2024-02-23 8:13 ` Nuno Sá
2024-02-23 8:46 ` Herve Codina
2024-02-23 8:56 ` Nuno Sá
2024-02-23 9:11 ` Herve Codina
2024-02-23 10:45 ` Nuno Sá
2024-02-29 23:26 ` Saravana Kannan
2024-03-01 7:14 ` Nuno Sá
2023-11-30 17:41 ` [PATCH 2/2] of: overlay: Synchronize of_overlay_remove() with the devlink removals Herve Codina
2024-02-21 0:37 ` Saravana Kannan
2024-02-21 7:03 ` Nuno Sá
2024-02-23 9:45 ` Herve Codina
2024-02-23 10:35 ` Nuno Sá
2024-02-27 15:24 ` Herve Codina
2024-02-27 16:55 ` Nuno Sá [this message]
2024-02-27 17:54 ` Herve Codina
2024-02-27 19:07 ` Nuno Sá
2024-02-27 19:13 ` Rafael J. Wysocki
2024-02-27 19:28 ` Nuno Sá
2023-12-06 17:15 ` [PATCH 0/2] Synchronize DT overlay removal with " Rob Herring
2023-12-07 3:09 ` Saravana Kannan
2023-12-20 17:16 ` Luca Ceresoli
2023-12-20 18:12 ` Herve Codina
2024-02-21 0:19 ` Saravana Kannan
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=86f2262d059db84070745e299d96dde3e6078220.camel@gmail.com \
--to=noname.nuno@gmail.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=allan.nielsen@microchip.com \
--cc=devicetree@vger.kernel.org \
--cc=frowand.list@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=herve.codina@bootlin.com \
--cc=horatiu.vultur@microchip.com \
--cc=kernel-team@android.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizhi.hou@amd.com \
--cc=luca.ceresoli@bootlin.com \
--cc=max.zhen@amd.com \
--cc=nuno.sa@analog.com \
--cc=rafael@kernel.org \
--cc=robh+dt@kernel.org \
--cc=saravanak@google.com \
--cc=sonal.santan@amd.com \
--cc=steen.hegelund@microchip.com \
--cc=stefano.stabellini@xilinx.com \
--cc=thomas.petazzoni@bootlin.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).