Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

software nodes: Split software_node_notify()

Split software_node_notify_remove) out of software_node_notify()
and make device_platform_notify() call the latter on device addition
and the former on device removal.

While at it, put the headers of the above functions into base.h,
because they don't need to be present in a global header file.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

+39 -36
+3
drivers/base/base.h
··· 202 202 static inline int devtmpfs_create_node(struct device *dev) { return 0; } 203 203 static inline int devtmpfs_delete_node(struct device *dev) { return 0; } 204 204 #endif 205 + 206 + void software_node_notify(struct device *dev); 207 + void software_node_notify_remove(struct device *dev);
+4 -5
drivers/base/core.c
··· 2003 2003 static int 2004 2004 device_platform_notify(struct device *dev, enum kobject_action action) 2005 2005 { 2006 - int ret; 2007 - 2008 2006 if (action == KOBJ_ADD) 2009 2007 acpi_device_notify(dev); 2010 2008 else if (action == KOBJ_REMOVE) 2011 2009 acpi_device_notify_remove(dev); 2012 2010 2013 - ret = software_node_notify(dev, action); 2014 - if (ret) 2015 - return ret; 2011 + if (action == KOBJ_ADD) 2012 + software_node_notify(dev); 2013 + else if (action == KOBJ_REMOVE) 2014 + software_node_notify_remove(dev); 2016 2015 2017 2016 if (platform_notify && action == KOBJ_ADD) 2018 2017 platform_notify(dev);
+32 -29
drivers/base/swnode.c
··· 11 11 #include <linux/property.h> 12 12 #include <linux/slab.h> 13 13 14 + #include "base.h" 15 + 14 16 struct swnode { 15 17 struct kobject kobj; 16 18 struct fwnode_handle fwnode; ··· 1055 1053 * balance. 1056 1054 */ 1057 1055 if (device_is_registered(dev)) 1058 - software_node_notify(dev, KOBJ_ADD); 1056 + software_node_notify(dev); 1059 1057 1060 1058 return 0; 1061 1059 } ··· 1076 1074 return; 1077 1075 1078 1076 if (device_is_registered(dev)) 1079 - software_node_notify(dev, KOBJ_REMOVE); 1077 + software_node_notify_remove(dev); 1078 + 1080 1079 set_secondary_fwnode(dev, NULL); 1081 1080 kobject_put(&swnode->kobj); 1082 1081 } ··· 1120 1117 } 1121 1118 EXPORT_SYMBOL_GPL(device_create_managed_software_node); 1122 1119 1123 - int software_node_notify(struct device *dev, unsigned long action) 1120 + void software_node_notify(struct device *dev) 1124 1121 { 1125 1122 struct swnode *swnode; 1126 1123 int ret; 1127 1124 1128 1125 swnode = dev_to_swnode(dev); 1129 1126 if (!swnode) 1130 - return 0; 1127 + return; 1131 1128 1132 - switch (action) { 1133 - case KOBJ_ADD: 1134 - ret = sysfs_create_link(&dev->kobj, &swnode->kobj, "software_node"); 1135 - if (ret) 1136 - break; 1129 + ret = sysfs_create_link(&dev->kobj, &swnode->kobj, "software_node"); 1130 + if (ret) 1131 + return; 1137 1132 1138 - ret = sysfs_create_link(&swnode->kobj, &dev->kobj, 1139 - dev_name(dev)); 1140 - if (ret) { 1141 - sysfs_remove_link(&dev->kobj, "software_node"); 1142 - break; 1143 - } 1144 - kobject_get(&swnode->kobj); 1145 - break; 1146 - case KOBJ_REMOVE: 1147 - sysfs_remove_link(&swnode->kobj, dev_name(dev)); 1133 + ret = sysfs_create_link(&swnode->kobj, &dev->kobj, dev_name(dev)); 1134 + if (ret) { 1148 1135 sysfs_remove_link(&dev->kobj, "software_node"); 1149 - kobject_put(&swnode->kobj); 1150 - 1151 - if (swnode->managed) { 1152 - set_secondary_fwnode(dev, NULL); 1153 - kobject_put(&swnode->kobj); 1154 - } 1155 - break; 1156 - default: 1157 - break; 1136 + return; 1158 1137 } 1159 1138 1160 - return 0; 1139 + kobject_get(&swnode->kobj); 1140 + } 1141 + 1142 + void software_node_notify_remove(struct device *dev) 1143 + { 1144 + struct swnode *swnode; 1145 + 1146 + swnode = dev_to_swnode(dev); 1147 + if (!swnode) 1148 + return; 1149 + 1150 + sysfs_remove_link(&swnode->kobj, dev_name(dev)); 1151 + sysfs_remove_link(&dev->kobj, "software_node"); 1152 + kobject_put(&swnode->kobj); 1153 + 1154 + if (swnode->managed) { 1155 + set_secondary_fwnode(dev, NULL); 1156 + kobject_put(&swnode->kobj); 1157 + } 1161 1158 } 1162 1159 1163 1160 static int __init software_node_init(void)
-2
include/linux/property.h
··· 484 484 int software_node_register(const struct software_node *node); 485 485 void software_node_unregister(const struct software_node *node); 486 486 487 - int software_node_notify(struct device *dev, unsigned long action); 488 - 489 487 struct fwnode_handle * 490 488 fwnode_create_software_node(const struct property_entry *properties, 491 489 const struct fwnode_handle *parent);