diff options
author | Arnd Bergmann <arnd@arndb.de> | 2010-07-11 07:18:57 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-12 23:21:47 -0400 |
commit | 15fd0cd9a2ad24a78fbee369dec8ca660979d57e (patch) | |
tree | d81059460702ebfe4617ec6efd6efa7886ac673b /drivers/net/wan | |
parent | 76a64921dad9acd76270dc74249f0dfe11c84bb8 (diff) |
net: autoconvert trivial BKL users to private mutex
All these files use the big kernel lock in a trivial
way to serialize their private file operations,
typically resulting from an earlier semi-automatic
pushdown from VFS.
None of these drivers appears to want to lock against
other code, and they all use the BKL as the top-level
lock in their file operations, meaning that there
is no lock-order inversion problem.
Consequently, we can remove the BKL completely,
replacing it with a per-file mutex in every case.
Using a scripted approach means we can avoid
typos.
file=$1
name=$2
if grep -q lock_kernel ${file} ; then
if grep -q 'include.*linux.mutex.h' ${file} ; then
sed -i '/include.*<linux\/smp_lock.h>/d' ${file}
else
sed -i 's/include.*<linux\/smp_lock.h>.*$/include <linux\/mutex.h>/g' ${file}
fi
sed -i ${file} \
-e "/^#include.*linux.mutex.h/,$ {
1,/^\(static\|int\|long\)/ {
/^\(static\|int\|long\)/istatic DEFINE_MUTEX(${name}_mutex);
} }" \
-e "s/\(un\)*lock_kernel\>[ ]*()/mutex_\1lock(\&${name}_mutex)/g" \
-e '/[ ]*cycle_kernel_lock();/d'
else
sed -i -e '/include.*\<smp_lock.h\>/d' ${file} \
-e '/cycle_kernel_lock()/d'
fi
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wan')
-rw-r--r-- | drivers/net/wan/cosa.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c index f0bd70fb650c..04c6cd4333f1 100644 --- a/drivers/net/wan/cosa.c +++ b/drivers/net/wan/cosa.c | |||
@@ -89,7 +89,6 @@ | |||
89 | #include <linux/spinlock.h> | 89 | #include <linux/spinlock.h> |
90 | #include <linux/mutex.h> | 90 | #include <linux/mutex.h> |
91 | #include <linux/device.h> | 91 | #include <linux/device.h> |
92 | #include <linux/smp_lock.h> | ||
93 | #include <asm/io.h> | 92 | #include <asm/io.h> |
94 | #include <asm/dma.h> | 93 | #include <asm/dma.h> |
95 | #include <asm/byteorder.h> | 94 | #include <asm/byteorder.h> |
@@ -174,6 +173,7 @@ struct cosa_data { | |||
174 | * Character device major number. 117 was allocated for us. | 173 | * Character device major number. 117 was allocated for us. |
175 | * The value of 0 means to allocate a first free one. | 174 | * The value of 0 means to allocate a first free one. |
176 | */ | 175 | */ |
176 | static DEFINE_MUTEX(cosa_chardev_mutex); | ||
177 | static int cosa_major = 117; | 177 | static int cosa_major = 117; |
178 | 178 | ||
179 | /* | 179 | /* |
@@ -944,7 +944,7 @@ static int cosa_open(struct inode *inode, struct file *file) | |||
944 | int n; | 944 | int n; |
945 | int ret = 0; | 945 | int ret = 0; |
946 | 946 | ||
947 | lock_kernel(); | 947 | mutex_lock(&cosa_chardev_mutex); |
948 | if ((n=iminor(file->f_path.dentry->d_inode)>>CARD_MINOR_BITS) | 948 | if ((n=iminor(file->f_path.dentry->d_inode)>>CARD_MINOR_BITS) |
949 | >= nr_cards) { | 949 | >= nr_cards) { |
950 | ret = -ENODEV; | 950 | ret = -ENODEV; |
@@ -976,7 +976,7 @@ static int cosa_open(struct inode *inode, struct file *file) | |||
976 | chan->rx_done = chrdev_rx_done; | 976 | chan->rx_done = chrdev_rx_done; |
977 | spin_unlock_irqrestore(&cosa->lock, flags); | 977 | spin_unlock_irqrestore(&cosa->lock, flags); |
978 | out: | 978 | out: |
979 | unlock_kernel(); | 979 | mutex_unlock(&cosa_chardev_mutex); |
980 | return ret; | 980 | return ret; |
981 | } | 981 | } |
982 | 982 | ||
@@ -1212,10 +1212,10 @@ static long cosa_chardev_ioctl(struct file *file, unsigned int cmd, | |||
1212 | struct cosa_data *cosa; | 1212 | struct cosa_data *cosa; |
1213 | long ret; | 1213 | long ret; |
1214 | 1214 | ||
1215 | lock_kernel(); | 1215 | mutex_lock(&cosa_chardev_mutex); |
1216 | cosa = channel->cosa; | 1216 | cosa = channel->cosa; |
1217 | ret = cosa_ioctl_common(cosa, channel, cmd, arg); | 1217 | ret = cosa_ioctl_common(cosa, channel, cmd, arg); |
1218 | unlock_kernel(); | 1218 | mutex_unlock(&cosa_chardev_mutex); |
1219 | return ret; | 1219 | return ret; |
1220 | } | 1220 | } |
1221 | 1221 | ||