From: Nuno Sa <nuno.sa@analog.com> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, "Rafael J. Wysocki" <rafael@kernel.org>, Frank Rowand <frowand.list@gmail.com>, Rob Herring <robh+dt@kernel.org>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Daniel Scally <djrscally@gmail.com>, Heikki Krogerus <heikki.krogerus@linux.intel.com>, Sakari Ailus <sakari.ailus@linux.intel.com>, Len Brown <lenb@kernel.org> Cc: linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] of: dynamic: flush devlinks workqueue before destroying the changeset Date: Mon, 05 Feb 2024 13:09:33 +0100 [thread overview] Message-ID: <20240205-fix-device-links-overlays-v2-2-5344f8c79d57@analog.com> (raw) In-Reply-To: <20240205-fix-device-links-overlays-v2-0-5344f8c79d57@analog.com> Device links will drop their supplier + consumer refcounts asynchronously. That means that the refcount of the of_node attached to these devices will also be dropped asynchronously and so we cannot guarantee the DT overlay assumption that the of_node refcount must be 1 in __of_changeset_entry_destroy(). Given the above, call the new fwnode_links_flush_queue() helper to flush the devlink workqueue so we can be sure that all links are dropped before doing the proper checks. Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- drivers/of/dynamic.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index 3bf27052832f..b7153c72c9c9 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c @@ -14,6 +14,7 @@ #include <linux/slab.h> #include <linux/string.h> #include <linux/proc_fs.h> +#include <linux/fwnode.h> #include "of_private.h" @@ -518,6 +519,13 @@ EXPORT_SYMBOL(of_changeset_create_node); static void __of_changeset_entry_destroy(struct of_changeset_entry *ce) { + /* + * device links drop their device references (and hence their of_node + * references) asynchronously on a dedicated workqueue. Hence we need + * to flush it to make sure everything is done before doing the below + * checks. + */ + fwnode_links_flush_queue(); if (ce->action == OF_RECONFIG_ATTACH_NODE && of_node_check_flag(ce->np, OF_OVERLAY)) { if (kref_read(&ce->np->kobj.kref) > 1) { -- 2.43.0
WARNING: multiple messages have this Message-ID (diff)
From: Nuno Sa via B4 Relay <devnull+nuno.sa.analog.com@kernel.org> To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, "Rafael J. Wysocki" <rafael@kernel.org>, Frank Rowand <frowand.list@gmail.com>, Rob Herring <robh+dt@kernel.org>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Daniel Scally <djrscally@gmail.com>, Heikki Krogerus <heikki.krogerus@linux.intel.com>, Sakari Ailus <sakari.ailus@linux.intel.com>, Len Brown <lenb@kernel.org> Cc: linux-acpi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/2] of: dynamic: flush devlinks workqueue before destroying the changeset Date: Mon, 05 Feb 2024 13:09:33 +0100 [thread overview] Message-ID: <20240205-fix-device-links-overlays-v2-2-5344f8c79d57@analog.com> (raw) In-Reply-To: <20240205-fix-device-links-overlays-v2-0-5344f8c79d57@analog.com> From: Nuno Sa <nuno.sa@analog.com> Device links will drop their supplier + consumer refcounts asynchronously. That means that the refcount of the of_node attached to these devices will also be dropped asynchronously and so we cannot guarantee the DT overlay assumption that the of_node refcount must be 1 in __of_changeset_entry_destroy(). Given the above, call the new fwnode_links_flush_queue() helper to flush the devlink workqueue so we can be sure that all links are dropped before doing the proper checks. Signed-off-by: Nuno Sa <nuno.sa@analog.com> --- drivers/of/dynamic.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/of/dynamic.c b/drivers/of/dynamic.c index 3bf27052832f..b7153c72c9c9 100644 --- a/drivers/of/dynamic.c +++ b/drivers/of/dynamic.c @@ -14,6 +14,7 @@ #include <linux/slab.h> #include <linux/string.h> #include <linux/proc_fs.h> +#include <linux/fwnode.h> #include "of_private.h" @@ -518,6 +519,13 @@ EXPORT_SYMBOL(of_changeset_create_node); static void __of_changeset_entry_destroy(struct of_changeset_entry *ce) { + /* + * device links drop their device references (and hence their of_node + * references) asynchronously on a dedicated workqueue. Hence we need + * to flush it to make sure everything is done before doing the below + * checks. + */ + fwnode_links_flush_queue(); if (ce->action == OF_RECONFIG_ATTACH_NODE && of_node_check_flag(ce->np, OF_OVERLAY)) { if (kref_read(&ce->np->kobj.kref) > 1) { -- 2.43.0
next prev parent reply other threads:[~2024-02-05 12:09 UTC|newest] Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-02-05 12:09 [PATCH v2 0/2] fix DT overlays when device links are released Nuno Sa 2024-02-05 12:09 ` Nuno Sa via B4 Relay 2024-02-05 12:09 ` [PATCH v2 1/2] driver: core: add dedicated workqueue for devlink removal Nuno Sa 2024-02-05 12:09 ` Nuno Sa via B4 Relay 2024-02-05 12:35 ` Andy Shevchenko 2024-02-05 14:32 ` Nuno Sá 2024-02-05 13:37 ` Rafael J. Wysocki 2024-02-05 12:09 ` Nuno Sa [this message] 2024-02-05 12:09 ` [PATCH v2 2/2] of: dynamic: flush devlinks workqueue before destroying the changeset Nuno Sa via B4 Relay 2024-02-05 12:36 ` Andy Shevchenko 2024-02-05 13:10 ` Sa, Nuno 2024-02-12 12:10 ` Nuno Sá 2024-02-13 14:51 ` Rob Herring 2024-02-13 15:01 ` Nuno Sá 2024-02-14 3:44 ` Saravana Kannan 2024-02-14 12:51 ` Nuno Sá 2024-02-21 0:39 ` Saravana Kannan 2024-02-21 6:58 ` Nuno Sá 2024-02-21 7:13 ` Nuno Sá
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=20240205-fix-device-links-overlays-v2-2-5344f8c79d57@analog.com \ --to=nuno.sa@analog.com \ --cc=andriy.shevchenko@linux.intel.com \ --cc=devicetree@vger.kernel.org \ --cc=djrscally@gmail.com \ --cc=frowand.list@gmail.com \ --cc=gregkh@linuxfoundation.org \ --cc=heikki.krogerus@linux.intel.com \ --cc=lenb@kernel.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=rafael@kernel.org \ --cc=robh+dt@kernel.org \ --cc=sakari.ailus@linux.intel.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: linkBe 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.