On 21/10/2020 10:40, Andy Shevchenko wrote: > On Tue, Oct 20, 2020 at 11:52:56PM +0100, Dan Scally wrote: >> On 20/10/2020 11:05, Sakari Ailus wrote: >>> On Mon, Oct 19, 2020 at 11:58:55PM +0100, Daniel Scally wrote: >>>> Software nodes that are children of another software node should be >>>> unregistered before their parent. To allow easy unregistering of an array >>>> of software_nodes ordered parent to child, add a helper function to loop >>>> over and unregister nodes in such an array in reverse order. > ... > >>>> + * software_node_unregister_nodes_reverse - Unregister an array of software >>>> + * nodes in reverse order. >>>> + * @nodes: Array of software nodes to be unregistered. >>>> + * >>>> + * NOTE: The same warning applies as with software_node_unregister_nodes. >>>> + * Unless you are _sure_ that the array of nodes is ordered parent to child >>>> + * it is wiser to remove them individually in the correct order. >>> Could the default order in software_node_unregister_nodes() be reversed >>> instead? There are no users so this should be easy to change. >>> >>> Doing this only one way may require enforcing the registration order in >>> software_node_register_nodes(), but the end result would be safer. >>> >>> What do you think? >> Yeah fine by me. We can just use software_node_to_swnode(node->parent) >> within software_node_unregister_nodes() to check that children come >> after their parents have already been processed. I'll add a patch to do >> that in the next version of this series, and another changing the >> ordering of software_node_unregister_node_group() as Andy suggests for >> consistency. > I remember it was a big discussion between Rafael, Heikki and Greg KH about > child-parent release in kobjects. That ended up with few patches to device > object handling along with one that reversed the order of swnode unregistering > in test_printf.c. So here is the question who is maintaining the order: a kref > (via kobject) or a caller? I would expect the caller to maintain the order correctly, and just have the register() function validate that the ordering is good and complain if not.