diff options
author | Arnd Bergmann <arnd@arndb.de> | 2010-06-02 08:28:52 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2010-09-15 15:00:47 -0400 |
commit | d851b6e04ee978b0c1b187bee682592aa72f22ea (patch) | |
tree | 1150757f61e3f4391d058fe2efc171e9fbcf13e2 /drivers/macintosh/via-pmu.c | |
parent | 5aa82940b23d0c6e4083d48e387a16b8ad530a47 (diff) |
mac: 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: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: linuxppc-dev@ozlabs.org
Diffstat (limited to 'drivers/macintosh/via-pmu.c')
-rw-r--r-- | drivers/macintosh/via-pmu.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index 2d17e76066bd..7b8b1de03db4 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c | |||
@@ -18,7 +18,7 @@ | |||
18 | * | 18 | * |
19 | */ | 19 | */ |
20 | #include <stdarg.h> | 20 | #include <stdarg.h> |
21 | #include <linux/smp_lock.h> | 21 | #include <linux/mutex.h> |
22 | #include <linux/types.h> | 22 | #include <linux/types.h> |
23 | #include <linux/errno.h> | 23 | #include <linux/errno.h> |
24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
@@ -73,6 +73,7 @@ | |||
73 | /* How many iterations between battery polls */ | 73 | /* How many iterations between battery polls */ |
74 | #define BATTERY_POLLING_COUNT 2 | 74 | #define BATTERY_POLLING_COUNT 2 |
75 | 75 | ||
76 | static DEFINE_MUTEX(pmu_info_proc_mutex); | ||
76 | static volatile unsigned char __iomem *via; | 77 | static volatile unsigned char __iomem *via; |
77 | 78 | ||
78 | /* VIA registers - spaced 0x200 bytes apart */ | 79 | /* VIA registers - spaced 0x200 bytes apart */ |
@@ -2078,7 +2079,7 @@ pmu_open(struct inode *inode, struct file *file) | |||
2078 | pp->rb_get = pp->rb_put = 0; | 2079 | pp->rb_get = pp->rb_put = 0; |
2079 | spin_lock_init(&pp->lock); | 2080 | spin_lock_init(&pp->lock); |
2080 | init_waitqueue_head(&pp->wait); | 2081 | init_waitqueue_head(&pp->wait); |
2081 | lock_kernel(); | 2082 | mutex_lock(&pmu_info_proc_mutex); |
2082 | spin_lock_irqsave(&all_pvt_lock, flags); | 2083 | spin_lock_irqsave(&all_pvt_lock, flags); |
2083 | #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT) | 2084 | #if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT) |
2084 | pp->backlight_locker = 0; | 2085 | pp->backlight_locker = 0; |
@@ -2086,7 +2087,7 @@ pmu_open(struct inode *inode, struct file *file) | |||
2086 | list_add(&pp->list, &all_pmu_pvt); | 2087 | list_add(&pp->list, &all_pmu_pvt); |
2087 | spin_unlock_irqrestore(&all_pvt_lock, flags); | 2088 | spin_unlock_irqrestore(&all_pvt_lock, flags); |
2088 | file->private_data = pp; | 2089 | file->private_data = pp; |
2089 | unlock_kernel(); | 2090 | mutex_unlock(&pmu_info_proc_mutex); |
2090 | return 0; | 2091 | return 0; |
2091 | } | 2092 | } |
2092 | 2093 | ||
@@ -2343,9 +2344,9 @@ static long pmu_unlocked_ioctl(struct file *filp, | |||
2343 | { | 2344 | { |
2344 | int ret; | 2345 | int ret; |
2345 | 2346 | ||
2346 | lock_kernel(); | 2347 | mutex_lock(&pmu_info_proc_mutex); |
2347 | ret = pmu_ioctl(filp, cmd, arg); | 2348 | ret = pmu_ioctl(filp, cmd, arg); |
2348 | unlock_kernel(); | 2349 | mutex_unlock(&pmu_info_proc_mutex); |
2349 | 2350 | ||
2350 | return ret; | 2351 | return ret; |
2351 | } | 2352 | } |