diff options
author | Hans Dedecker <dedeckeh@gmail.com> | 2015-08-04 16:22:45 +0200 |
---|---|---|
committer | Steven Barth <steven@midlink.org> | 2015-08-25 08:23:40 +0200 |
commit | 5f0e4070402ff056584eac5afed490cd0a407697 (patch) | |
tree | b8e2344f88591dc4ab4a56ec34fa53d7705788ff | |
parent | 0b32f960b8b073fdf983430723d675a31a110784 (diff) | |
download | netifd-5f0e4070402ff056584eac5afed490cd0a407697.tar.gz |
netifd: Spawn device events when registering dependency in device_replace
Spawn device events when adding dependency in device_replace so the dependency installer gets
the actual device status
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
-rw-r--r-- | device.c | 29 |
1 files changed, 17 insertions, 12 deletions
@@ -534,19 +534,11 @@ static int device_refcount(struct device *dev) return count; } -void device_add_user(struct device_user *dep, struct device *dev) +static void +__device_add_user(struct device_user *dep, struct device *dev) { struct safe_list *head; - if (dep->dev == dev) - return; - - if (dep->dev) - device_remove_user(dep); - - if (!dev) - return; - dep->dev = dev; if (dep->alias) @@ -567,6 +559,20 @@ void device_add_user(struct device_user *dep, struct device *dev) } } +void device_add_user(struct device_user *dep, struct device *dev) +{ + if (dep->dev == dev) + return; + + if (dep->dev) + device_remove_user(dep); + + if (!dev) + return; + + __device_add_user(dep, dev); +} + void device_free(struct device *dev) { @@ -710,8 +716,7 @@ device_replace(struct device *dev, struct device *odev) list_for_each_entry_safe(dep, tmp, &odev->users.list, list.list) { device_release(dep); safe_list_del(&dep->list); - safe_list_add(&dep->list, &dev->users); - dep->dev = dev; + __device_add_user(dep, dev); } __devlock--; |