mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 22:20:50 +07:00
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
This commit is contained in:
parent
5aa82940b2
commit
d851b6e04e
@ -24,7 +24,6 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/adb.h>
|
||||
#include <linux/cuda.h>
|
||||
#include <linux/pmu.h>
|
||||
@ -55,6 +54,7 @@ extern struct adb_driver adb_iop_driver;
|
||||
extern struct adb_driver via_pmu_driver;
|
||||
extern struct adb_driver macio_adb_driver;
|
||||
|
||||
static DEFINE_MUTEX(adb_mutex);
|
||||
static struct adb_driver *adb_driver_list[] = {
|
||||
#ifdef CONFIG_ADB_MACII
|
||||
&via_macii_driver,
|
||||
@ -647,7 +647,7 @@ static int adb_open(struct inode *inode, struct file *file)
|
||||
struct adbdev_state *state;
|
||||
int ret = 0;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&adb_mutex);
|
||||
if (iminor(inode) > 0 || adb_controller == NULL) {
|
||||
ret = -ENXIO;
|
||||
goto out;
|
||||
@ -665,7 +665,7 @@ static int adb_open(struct inode *inode, struct file *file)
|
||||
state->inuse = 1;
|
||||
|
||||
out:
|
||||
unlock_kernel();
|
||||
mutex_unlock(&adb_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -674,7 +674,7 @@ static int adb_release(struct inode *inode, struct file *file)
|
||||
struct adbdev_state *state = file->private_data;
|
||||
unsigned long flags;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&adb_mutex);
|
||||
if (state) {
|
||||
file->private_data = NULL;
|
||||
spin_lock_irqsave(&state->lock, flags);
|
||||
@ -687,7 +687,7 @@ static int adb_release(struct inode *inode, struct file *file)
|
||||
spin_unlock_irqrestore(&state->lock, flags);
|
||||
}
|
||||
}
|
||||
unlock_kernel();
|
||||
mutex_unlock(&adb_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,6 @@
|
||||
* the userland interface
|
||||
*/
|
||||
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/device.h>
|
||||
@ -97,6 +96,7 @@ struct smu_device {
|
||||
* I don't think there will ever be more than one SMU, so
|
||||
* for now, just hard code that
|
||||
*/
|
||||
static DEFINE_MUTEX(smu_mutex);
|
||||
static struct smu_device *smu;
|
||||
static DEFINE_MUTEX(smu_part_access);
|
||||
static int smu_irq_inited;
|
||||
@ -1095,12 +1095,12 @@ static int smu_open(struct inode *inode, struct file *file)
|
||||
pp->mode = smu_file_commands;
|
||||
init_waitqueue_head(&pp->wait);
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&smu_mutex);
|
||||
spin_lock_irqsave(&smu_clist_lock, flags);
|
||||
list_add(&pp->list, &smu_clist);
|
||||
spin_unlock_irqrestore(&smu_clist_lock, flags);
|
||||
file->private_data = pp;
|
||||
unlock_kernel();
|
||||
mutex_unlock(&smu_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
*
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kernel.h>
|
||||
@ -73,6 +73,7 @@
|
||||
/* How many iterations between battery polls */
|
||||
#define BATTERY_POLLING_COUNT 2
|
||||
|
||||
static DEFINE_MUTEX(pmu_info_proc_mutex);
|
||||
static volatile unsigned char __iomem *via;
|
||||
|
||||
/* VIA registers - spaced 0x200 bytes apart */
|
||||
@ -2078,7 +2079,7 @@ pmu_open(struct inode *inode, struct file *file)
|
||||
pp->rb_get = pp->rb_put = 0;
|
||||
spin_lock_init(&pp->lock);
|
||||
init_waitqueue_head(&pp->wait);
|
||||
lock_kernel();
|
||||
mutex_lock(&pmu_info_proc_mutex);
|
||||
spin_lock_irqsave(&all_pvt_lock, flags);
|
||||
#if defined(CONFIG_INPUT_ADBHID) && defined(CONFIG_PMAC_BACKLIGHT)
|
||||
pp->backlight_locker = 0;
|
||||
@ -2086,7 +2087,7 @@ pmu_open(struct inode *inode, struct file *file)
|
||||
list_add(&pp->list, &all_pmu_pvt);
|
||||
spin_unlock_irqrestore(&all_pvt_lock, flags);
|
||||
file->private_data = pp;
|
||||
unlock_kernel();
|
||||
mutex_unlock(&pmu_info_proc_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2343,9 +2344,9 @@ static long pmu_unlocked_ioctl(struct file *filp,
|
||||
{
|
||||
int ret;
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&pmu_info_proc_mutex);
|
||||
ret = pmu_ioctl(filp, cmd, arg);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&pmu_info_proc_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user