diff options
author | Heikki Krogerus <heikki.krogerus@linux.intel.com> | 2021-03-01 17:30:12 +0300 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2021-03-10 15:25:02 +0100 |
commit | 2a92c90f2ecca4475d6050f2f938a1755a8954cc (patch) | |
tree | 33e536927813e403369f2ffa9096276a19f1424c /include | |
parent | 8891123f9cbb9c1ee531e5a87fa116f0af685c48 (diff) | |
download | linux-stable-2a92c90f2ecca4475d6050f2f938a1755a8954cc.tar.gz linux-stable-2a92c90f2ecca4475d6050f2f938a1755a8954cc.tar.bz2 linux-stable-2a92c90f2ecca4475d6050f2f938a1755a8954cc.zip |
software node: Fix device_add_software_node()
The function device_add_software_node() was meant to
register the node supplied to it, but only if that node
wasn't already registered. Right now the function attempts
to always register the node. That will cause a failure with
nodes that are already registered.
Fixing that by incrementing the reference count of the nodes
that have already been registered, and only registering the
new nodes. Also, clarifying the behaviour in the function
documentation.
Fixes: e68d0119e328 ("software node: Introduce device_add_software_node()")
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/property.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/property.h b/include/linux/property.h index dafccfce0262..dd4687b56239 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -488,7 +488,7 @@ fwnode_create_software_node(const struct property_entry *properties, const struct fwnode_handle *parent); void fwnode_remove_software_node(struct fwnode_handle *fwnode); -int device_add_software_node(struct device *dev, const struct software_node *swnode); +int device_add_software_node(struct device *dev, const struct software_node *node); void device_remove_software_node(struct device *dev); int device_create_managed_software_node(struct device *dev, |