Skip to content

Commit 384f5a8

Browse files
committed
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 <[email protected]> Reviewed-by: Greg Kroah-Hartman <[email protected]> Reviewed-by: Heikki Krogerus <[email protected]> Reviewed-by: Andy Shevchenko <[email protected]>
1 parent d0b8e39 commit 384f5a8

File tree

4 files changed

+39
-36
lines changed

4 files changed

+39
-36
lines changed

drivers/base/base.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,6 @@ int devtmpfs_delete_node(struct device *dev);
202202
static inline int devtmpfs_create_node(struct device *dev) { return 0; }
203203
static inline int devtmpfs_delete_node(struct device *dev) { return 0; }
204204
#endif
205+
206+
void software_node_notify(struct device *dev);
207+
void software_node_notify_remove(struct device *dev);

drivers/base/core.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2003,16 +2003,15 @@ static inline int device_is_not_partition(struct device *dev)
20032003
static int
20042004
device_platform_notify(struct device *dev, enum kobject_action action)
20052005
{
2006-
int ret;
2007-
20082006
if (action == KOBJ_ADD)
20092007
acpi_device_notify(dev);
20102008
else if (action == KOBJ_REMOVE)
20112009
acpi_device_notify_remove(dev);
20122010

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);
20162015

20172016
if (platform_notify && action == KOBJ_ADD)
20182017
platform_notify(dev);

drivers/base/swnode.c

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include <linux/property.h>
1212
#include <linux/slab.h>
1313

14+
#include "base.h"
15+
1416
struct swnode {
1517
struct kobject kobj;
1618
struct fwnode_handle fwnode;
@@ -1053,7 +1055,7 @@ int device_add_software_node(struct device *dev, const struct software_node *nod
10531055
* balance.
10541056
*/
10551057
if (device_is_registered(dev))
1056-
software_node_notify(dev, KOBJ_ADD);
1058+
software_node_notify(dev);
10571059

10581060
return 0;
10591061
}
@@ -1074,7 +1076,8 @@ void device_remove_software_node(struct device *dev)
10741076
return;
10751077

10761078
if (device_is_registered(dev))
1077-
software_node_notify(dev, KOBJ_REMOVE);
1079+
software_node_notify_remove(dev);
1080+
10781081
set_secondary_fwnode(dev, NULL);
10791082
kobject_put(&swnode->kobj);
10801083
}
@@ -1117,44 +1120,44 @@ int device_create_managed_software_node(struct device *dev,
11171120
}
11181121
EXPORT_SYMBOL_GPL(device_create_managed_software_node);
11191122

1120-
int software_node_notify(struct device *dev, unsigned long action)
1123+
void software_node_notify(struct device *dev)
11211124
{
11221125
struct swnode *swnode;
11231126
int ret;
11241127

11251128
swnode = dev_to_swnode(dev);
11261129
if (!swnode)
1127-
return 0;
1130+
return;
11281131

1129-
switch (action) {
1130-
case KOBJ_ADD:
1131-
ret = sysfs_create_link(&dev->kobj, &swnode->kobj, "software_node");
1132-
if (ret)
1133-
break;
1132+
ret = sysfs_create_link(&dev->kobj, &swnode->kobj, "software_node");
1133+
if (ret)
1134+
return;
11341135

1135-
ret = sysfs_create_link(&swnode->kobj, &dev->kobj,
1136-
dev_name(dev));
1137-
if (ret) {
1138-
sysfs_remove_link(&dev->kobj, "software_node");
1139-
break;
1140-
}
1141-
kobject_get(&swnode->kobj);
1142-
break;
1143-
case KOBJ_REMOVE:
1144-
sysfs_remove_link(&swnode->kobj, dev_name(dev));
1136+
ret = sysfs_create_link(&swnode->kobj, &dev->kobj, dev_name(dev));
1137+
if (ret) {
11451138
sysfs_remove_link(&dev->kobj, "software_node");
1146-
kobject_put(&swnode->kobj);
1147-
1148-
if (swnode->managed) {
1149-
set_secondary_fwnode(dev, NULL);
1150-
kobject_put(&swnode->kobj);
1151-
}
1152-
break;
1153-
default:
1154-
break;
1139+
return;
11551140
}
11561141

1157-
return 0;
1142+
kobject_get(&swnode->kobj);
1143+
}
1144+
1145+
void software_node_notify_remove(struct device *dev)
1146+
{
1147+
struct swnode *swnode;
1148+
1149+
swnode = dev_to_swnode(dev);
1150+
if (!swnode)
1151+
return;
1152+
1153+
sysfs_remove_link(&swnode->kobj, dev_name(dev));
1154+
sysfs_remove_link(&dev->kobj, "software_node");
1155+
kobject_put(&swnode->kobj);
1156+
1157+
if (swnode->managed) {
1158+
set_secondary_fwnode(dev, NULL);
1159+
kobject_put(&swnode->kobj);
1160+
}
11581161
}
11591162

11601163
static int __init software_node_init(void)

include/linux/property.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,8 +484,6 @@ void software_node_unregister_node_group(const struct software_node **node_group
484484
int software_node_register(const struct software_node *node);
485485
void software_node_unregister(const struct software_node *node);
486486

487-
int software_node_notify(struct device *dev, unsigned long action);
488-
489487
struct fwnode_handle *
490488
fwnode_create_software_node(const struct property_entry *properties,
491489
const struct fwnode_handle *parent);

0 commit comments

Comments
 (0)