* [PATCH] of/platform: depopulate devices in the reverse order of creation @ 2016-12-12 18:39 Jason Gunthorpe [not found] ` <20161212183905.GA30702-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> 0 siblings, 1 reply; 4+ messages in thread From: Jason Gunthorpe @ 2016-12-12 18:39 UTC (permalink / raw) To: Rob Herring, Frank Rowand Cc: Pawel Moll, Grant Likely, devicetree-u79uwXL29TY76Z2rM5mHXA, linux-kernel-u79uwXL29TY76Z2rM5mHXA If the DT has inter-dependencies, then the devices need to be removed in the right order to avoid removal problems. Assuming the DT is constructed so that EPROBE_DEFER doesn't happen during creating then a good way to avoid removal problems is reversing the order during depopulation. Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> --- drivers/of/platform.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) In my specific case I have a gpio driver, followed by a i2c bitbang using that driver. So gpiolib prints an error if it the gpio driver is removed before the gpio client.. diff --git a/drivers/of/platform.c b/drivers/of/platform.c index cd72c0156db2ba..5720fe44f991e9 100644 --- a/drivers/of/platform.c +++ b/drivers/of/platform.c @@ -568,7 +568,8 @@ static int of_platform_device_destroy(struct device *dev, void *data) void of_platform_depopulate(struct device *parent) { if (parent->of_node && of_node_check_flag(parent->of_node, OF_POPULATED_BUS)) { - device_for_each_child(parent, NULL, of_platform_device_destroy); + device_for_each_child_reverse(parent, NULL, + of_platform_device_destroy); of_node_clear_flag(parent->of_node, OF_POPULATED_BUS); } } -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply related [flat|nested] 4+ messages in thread
[parent not found: <20161212183905.GA30702-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>]
* Re: [PATCH] of/platform: depopulate devices in the reverse order of creation [not found] ` <20161212183905.GA30702-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> @ 2016-12-14 20:54 ` Rob Herring [not found] ` <CAL_Jsq+JdmKj88Tp=N+V781qj+muEB6nuGpjDCgiPsrzB9tWMg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 0 siblings, 1 reply; 4+ messages in thread From: Rob Herring @ 2016-12-14 20:54 UTC (permalink / raw) To: Jason Gunthorpe Cc: Frank Rowand, Pawel Moll, Grant Likely, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Mon, Dec 12, 2016 at 12:39 PM, Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> wrote: > If the DT has inter-dependencies, then the devices need to be removed > in the right order to avoid removal problems. > > Assuming the DT is constructed so that EPROBE_DEFER doesn't happen > during creating then a good way to avoid removal problems is reversing > the order during depopulation. I assume you mean by sorting the nodes to get lucky with the init order. Not sure I want any patches that help that. I'm tempted to randomize the device creation order instead. > Signed-off-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> > --- > drivers/of/platform.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > In my specific case I have a gpio driver, followed by a i2c bitbang > using that driver. So gpiolib prints an error if it the gpio driver is > removed before the gpio client.. Good news, functional dependencies are going into 4.10. Let's fix GPIO and use that. Rob -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <CAL_Jsq+JdmKj88Tp=N+V781qj+muEB6nuGpjDCgiPsrzB9tWMg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH] of/platform: depopulate devices in the reverse order of creation [not found] ` <CAL_Jsq+JdmKj88Tp=N+V781qj+muEB6nuGpjDCgiPsrzB9tWMg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> @ 2016-12-14 21:40 ` Jason Gunthorpe 2016-12-15 14:57 ` Rob Herring 0 siblings, 1 reply; 4+ messages in thread From: Jason Gunthorpe @ 2016-12-14 21:40 UTC (permalink / raw) To: Rob Herring Cc: Frank Rowand, Pawel Moll, Grant Likely, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org On Wed, Dec 14, 2016 at 02:54:02PM -0600, Rob Herring wrote: > On Mon, Dec 12, 2016 at 12:39 PM, Jason Gunthorpe > <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> wrote: > > If the DT has inter-dependencies, then the devices need to be removed > > in the right order to avoid removal problems. > > > > Assuming the DT is constructed so that EPROBE_DEFER doesn't happen > > during creating then a good way to avoid removal problems is reversing > > the order during depopulation. > > I assume you mean by sorting the nodes to get lucky with the init > order. Not quite, the init order doesn't matter, just that the device list/DT is ordered topologically. The driver bind order can still be randomized. No luck needed. > > In my specific case I have a gpio driver, followed by a i2c bitbang > > using that driver. So gpiolib prints an error if it the gpio driver is > > removed before the gpio client.. > > Good news, functional dependencies are going into 4.10. Let's fix GPIO > and use that. Sure, but it will be some time until that is used everwhere.. You don't think there is some value in 'hiding' the problem with ordering until that work is done? IIRC that was essentially how EPROBE_DEFER was introduced? Jason -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] of/platform: depopulate devices in the reverse order of creation 2016-12-14 21:40 ` Jason Gunthorpe @ 2016-12-15 14:57 ` Rob Herring 0 siblings, 0 replies; 4+ messages in thread From: Rob Herring @ 2016-12-15 14:57 UTC (permalink / raw) To: Jason Gunthorpe Cc: Frank Rowand, Pawel Moll, Grant Likely, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org On Wed, Dec 14, 2016 at 3:40 PM, Jason Gunthorpe <jgunthorpe@obsidianresearch.com> wrote: > On Wed, Dec 14, 2016 at 02:54:02PM -0600, Rob Herring wrote: >> On Mon, Dec 12, 2016 at 12:39 PM, Jason Gunthorpe >> <jgunthorpe@obsidianresearch.com> wrote: >> > If the DT has inter-dependencies, then the devices need to be removed >> > in the right order to avoid removal problems. >> > >> > Assuming the DT is constructed so that EPROBE_DEFER doesn't happen >> > during creating then a good way to avoid removal problems is reversing >> > the order during depopulation. >> >> I assume you mean by sorting the nodes to get lucky with the init >> order. > > Not quite, the init order doesn't matter, just that the device list/DT > is ordered topologically. The driver bind order can still be > randomized. No luck needed. I meant init in a generic sense > >> > In my specific case I have a gpio driver, followed by a i2c bitbang >> > using that driver. So gpiolib prints an error if it the gpio driver is >> > removed before the gpio client.. >> >> Good news, functional dependencies are going into 4.10. Let's fix GPIO >> and use that. > > Sure, but it will be some time until that is used everwhere.. > > You don't think there is some value in 'hiding' the problem with > ordering until that work is done? IIRC that was essentially how > EPROBE_DEFER was introduced? > > Jason ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2016-12-15 14:57 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-12-12 18:39 [PATCH] of/platform: depopulate devices in the reverse order of creation Jason Gunthorpe [not found] ` <20161212183905.GA30702-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org> 2016-12-14 20:54 ` Rob Herring [not found] ` <CAL_Jsq+JdmKj88Tp=N+V781qj+muEB6nuGpjDCgiPsrzB9tWMg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2016-12-14 21:40 ` Jason Gunthorpe 2016-12-15 14:57 ` Rob Herring
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).