On Thu Jul 16, 2026 at 2:31 PM CEST, Bartosz Golaszewski wrote:
> @@ -723,11 +725,20 @@ EXPORT_SYMBOL_GPL(platform_device_set_of_node);
>   *
>   * Assign a firmware node to this platform device. Internally keep track of 
> the
>   * reference count. Devices created with platform_device_alloc() must use 
> this
> - * function instead of assigning the node manually.
> + * function instead of assigning the node manually. This function must not be
> + * called for a platform device that already has a software node as its 
> primary
> + * firmware node assigned.
>   */
>  void platform_device_set_fwnode(struct platform_device *pdev,
>                               struct fwnode_handle *fwnode)
>  {
> +     /*
> +      * If we call this function for a platform device whose primary
> +      * firmware node is a software node, we'll never end up calling the
> +      * symmetric software_node_notify_remove(). There are no users for this
> +      * right now in the tree so just disallow it.
> +      */
> +     WARN_ON(is_software_node(dev_fwnode(&pdev->dev)));
>       fwnode_handle_put(pdev->dev.fwnode);
>       device_set_node(&pdev->dev, fwnode_handle_get(fwnode));
>  }

When I suggested this I actually meant to never allow to replace an existing
node (not only for swnodes), as I think there's no use-case for this anyway and
it makes the API more consistent.

However, this can be done in a follow-up too; the patch is fine as is, as it
addresses the problem I pointed out about software_node_notify_remove() not
being called independently.

So, I'll pick this up later today.

Thanks,
Danilo

Reply via email to