diff options
author | Arnd Bergmann <arnd@arndb.de> | 2010-06-02 08:28:52 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2010-10-05 09:01:04 -0400 |
commit | 613655fa39ff6957754fa8ceb8559980920eb8ee (patch) | |
tree | ad19600cb81207b24188683d7fc4ae88013339d1 /drivers/hwmon | |
parent | 609146fdb319cebce93be550938ab852f7bade90 (diff) |
drivers: 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.
These drivers do not seem to be under active
maintainance from my brief investigation. Apologies
to those maintainers that I have missed.
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>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/fschmd.c | 6 | ||||
-rw-r--r-- | drivers/hwmon/w83793.c | 6 |
2 files changed, 6 insertions, 6 deletions
diff --git a/drivers/hwmon/fschmd.c b/drivers/hwmon/fschmd.c index b7ca2a9676cf..d4d4ca65d371 100644 --- a/drivers/hwmon/fschmd.c +++ b/drivers/hwmon/fschmd.c | |||
@@ -38,7 +38,6 @@ | |||
38 | #include <linux/i2c.h> | 38 | #include <linux/i2c.h> |
39 | #include <linux/hwmon.h> | 39 | #include <linux/hwmon.h> |
40 | #include <linux/hwmon-sysfs.h> | 40 | #include <linux/hwmon-sysfs.h> |
41 | #include <linux/smp_lock.h> | ||
42 | #include <linux/err.h> | 41 | #include <linux/err.h> |
43 | #include <linux/mutex.h> | 42 | #include <linux/mutex.h> |
44 | #include <linux/sysfs.h> | 43 | #include <linux/sysfs.h> |
@@ -50,6 +49,7 @@ | |||
50 | #include <linux/kref.h> | 49 | #include <linux/kref.h> |
51 | 50 | ||
52 | /* Addresses to scan */ | 51 | /* Addresses to scan */ |
52 | static DEFINE_MUTEX(watchdog_mutex); | ||
53 | static const unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; | 53 | static const unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END }; |
54 | 54 | ||
55 | /* Insmod parameters */ | 55 | /* Insmod parameters */ |
@@ -858,7 +858,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd, unsigned long ar | |||
858 | int i, ret = 0; | 858 | int i, ret = 0; |
859 | struct fschmd_data *data = filp->private_data; | 859 | struct fschmd_data *data = filp->private_data; |
860 | 860 | ||
861 | lock_kernel(); | 861 | mutex_lock(&watchdog_mutex); |
862 | switch (cmd) { | 862 | switch (cmd) { |
863 | case WDIOC_GETSUPPORT: | 863 | case WDIOC_GETSUPPORT: |
864 | ident.firmware_version = data->revision; | 864 | ident.firmware_version = data->revision; |
@@ -915,7 +915,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd, unsigned long ar | |||
915 | default: | 915 | default: |
916 | ret = -ENOTTY; | 916 | ret = -ENOTTY; |
917 | } | 917 | } |
918 | unlock_kernel(); | 918 | mutex_unlock(&watchdog_mutex); |
919 | return ret; | 919 | return ret; |
920 | } | 920 | } |
921 | 921 | ||
diff --git a/drivers/hwmon/w83793.c b/drivers/hwmon/w83793.c index 697202e27891..8e540ada47d2 100644 --- a/drivers/hwmon/w83793.c +++ b/drivers/hwmon/w83793.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <linux/slab.h> | 35 | #include <linux/slab.h> |
36 | #include <linux/i2c.h> | 36 | #include <linux/i2c.h> |
37 | #include <linux/hwmon.h> | 37 | #include <linux/hwmon.h> |
38 | #include <linux/smp_lock.h> | ||
39 | #include <linux/hwmon-vid.h> | 38 | #include <linux/hwmon-vid.h> |
40 | #include <linux/hwmon-sysfs.h> | 39 | #include <linux/hwmon-sysfs.h> |
41 | #include <linux/err.h> | 40 | #include <linux/err.h> |
@@ -52,6 +51,7 @@ | |||
52 | #define WATCHDOG_TIMEOUT 2 /* 2 minute default timeout */ | 51 | #define WATCHDOG_TIMEOUT 2 /* 2 minute default timeout */ |
53 | 52 | ||
54 | /* Addresses to scan */ | 53 | /* Addresses to scan */ |
54 | static DEFINE_MUTEX(watchdog_mutex); | ||
55 | static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, | 55 | static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, |
56 | I2C_CLIENT_END }; | 56 | I2C_CLIENT_END }; |
57 | 57 | ||
@@ -1333,7 +1333,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd, | |||
1333 | int val, ret = 0; | 1333 | int val, ret = 0; |
1334 | struct w83793_data *data = filp->private_data; | 1334 | struct w83793_data *data = filp->private_data; |
1335 | 1335 | ||
1336 | lock_kernel(); | 1336 | mutex_lock(&watchdog_mutex); |
1337 | switch (cmd) { | 1337 | switch (cmd) { |
1338 | case WDIOC_GETSUPPORT: | 1338 | case WDIOC_GETSUPPORT: |
1339 | if (!nowayout) | 1339 | if (!nowayout) |
@@ -1387,7 +1387,7 @@ static long watchdog_ioctl(struct file *filp, unsigned int cmd, | |||
1387 | default: | 1387 | default: |
1388 | ret = -ENOTTY; | 1388 | ret = -ENOTTY; |
1389 | } | 1389 | } |
1390 | unlock_kernel(); | 1390 | mutex_unlock(&watchdog_mutex); |
1391 | return ret; | 1391 | return ret; |
1392 | } | 1392 | } |
1393 | 1393 | ||