diff options
author | David S. Miller <davem@davemloft.net> | 2019-11-02 21:12:51 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-11-02 21:54:56 +0100 |
commit | d31e95585ca697fb31440c6fe30113adc85ecfbd (patch) | |
tree | 4936ea0aaa6b2aeeee4db51e3c60d938c9b9ed96 /drivers/net/netdevsim | |
parent | tc-testing: added tests with cookie for conntrack TC action (diff) | |
parent | Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net (diff) | |
download | linux-d31e95585ca697fb31440c6fe30113adc85ecfbd.tar.xz linux-d31e95585ca697fb31440c6fe30113adc85ecfbd.zip |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
The only slightly tricky merge conflict was the netdevsim because the
mutex locking fix overlapped a lot of driver reload reorganization.
The rest were (relatively) trivial in nature.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/netdevsim')
-rw-r--r-- | drivers/net/netdevsim/dev.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c index 468e157a7cb1..e59a8826f36d 100644 --- a/drivers/net/netdevsim/dev.c +++ b/drivers/net/netdevsim/dev.c @@ -681,9 +681,11 @@ static void nsim_dev_port_del_all(struct nsim_dev *nsim_dev) { struct nsim_dev_port *nsim_dev_port, *tmp; + mutex_lock(&nsim_dev->port_list_lock); list_for_each_entry_safe(nsim_dev_port, tmp, &nsim_dev->port_list, list) __nsim_dev_port_del(nsim_dev_port); + mutex_unlock(&nsim_dev->port_list_lock); } static int nsim_dev_port_add_all(struct nsim_dev *nsim_dev, @@ -874,13 +876,28 @@ static void nsim_dev_destroy(struct nsim_dev *nsim_dev) int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev) { struct nsim_dev *nsim_dev; + int i; + int err; nsim_dev = nsim_dev_create(nsim_bus_dev); if (IS_ERR(nsim_dev)) return PTR_ERR(nsim_dev); dev_set_drvdata(&nsim_bus_dev->dev, nsim_dev); + mutex_lock(&nsim_dev->port_list_lock); + for (i = 0; i < nsim_bus_dev->port_count; i++) { + err = __nsim_dev_port_add(nsim_dev, i); + if (err) + goto err_port_del_all; + } + mutex_unlock(&nsim_dev->port_list_lock); return 0; + +err_port_del_all: + mutex_unlock(&nsim_dev->port_list_lock); + nsim_dev_port_del_all(nsim_dev); + nsim_dev_destroy(nsim_dev); + return err; } void nsim_dev_remove(struct nsim_bus_dev *nsim_bus_dev) |