diff options
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 | } |