diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-03-15 19:32:31 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2012-03-15 19:32:31 +0000 |
commit | a86e95542d27a6cc5a179fbbd98e020bcb9420f0 (patch) | |
tree | e1b2f1fa1632d1ce781e0cd5534858c33f54dbb3 /target | |
parent | 531638e8392e9a1508dfd35748922c6964e5605c (diff) | |
download | master-187ad058-a86e95542d27a6cc5a179fbbd98e020bcb9420f0.tar.gz master-187ad058-a86e95542d27a6cc5a179fbbd98e020bcb9420f0.tar.bz2 master-187ad058-a86e95542d27a6cc5a179fbbd98e020bcb9420f0.zip |
swconfig: use a mutex instead of a spinlock, many swconfig calls sleep
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@30952 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target')
-rw-r--r-- | target/linux/generic/files/drivers/net/phy/swconfig.c | 10 | ||||
-rw-r--r-- | target/linux/generic/files/include/linux/switch.h | 2 |
2 files changed, 6 insertions, 6 deletions
diff --git a/target/linux/generic/files/drivers/net/phy/swconfig.c b/target/linux/generic/files/drivers/net/phy/swconfig.c index 1baccb1ba3..e772c94481 100644 --- a/target/linux/generic/files/drivers/net/phy/swconfig.c +++ b/target/linux/generic/files/drivers/net/phy/swconfig.c @@ -353,7 +353,7 @@ swconfig_get_dev(struct genl_info *info) break; } if (dev) - spin_lock(&dev->lock); + mutex_lock(&dev->sw_mutex); else DPRINTF("device %d not found\n", id); swconfig_unlock(); @@ -364,7 +364,7 @@ done: static inline void swconfig_put_dev(struct switch_dev *dev) { - spin_unlock(&dev->lock); + mutex_unlock(&dev->sw_mutex); } static int @@ -962,7 +962,7 @@ register_switch(struct switch_dev *dev, struct net_device *netdev) return -ENOMEM; } swconfig_defaults_init(dev); - spin_lock_init(&dev->lock); + mutex_init(&dev->sw_mutex); swconfig_lock(); dev->id = ++swdev_id; @@ -1000,11 +1000,11 @@ unregister_switch(struct switch_dev *dev) { swconfig_destroy_led_trigger(dev); kfree(dev->portbuf); - spin_lock(&dev->lock); + mutex_lock(&dev->sw_mutex); swconfig_lock(); list_del(&dev->dev_list); swconfig_unlock(); - spin_unlock(&dev->lock); + mutex_unlock(&dev->sw_mutex); } EXPORT_SYMBOL_GPL(unregister_switch); diff --git a/target/linux/generic/files/include/linux/switch.h b/target/linux/generic/files/include/linux/switch.h index 2c88bb3276..4f4085ef89 100644 --- a/target/linux/generic/files/include/linux/switch.h +++ b/target/linux/generic/files/include/linux/switch.h @@ -191,7 +191,7 @@ struct switch_dev { struct list_head dev_list; unsigned long def_global, def_port, def_vlan; - spinlock_t lock; + struct mutex sw_mutex; struct switch_port *portbuf; char buf[128]; |