You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
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>
This commit is contained in:
@@ -56,7 +56,7 @@
|
||||
#include <linux/serial.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/smp_lock.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/serial_8250.h>
|
||||
#include "smapi.h"
|
||||
@@ -73,6 +73,7 @@ MODULE_LICENSE("GPL");
|
||||
* checks are made against other devices (ie. superio) for conflicts.
|
||||
* We'll depend on users using the tpctl utility to do that for now
|
||||
*/
|
||||
static DEFINE_MUTEX(mwave_mutex);
|
||||
int mwave_debug = 0;
|
||||
int mwave_3780i_irq = 0;
|
||||
int mwave_3780i_io = 0;
|
||||
@@ -101,7 +102,6 @@ static int mwave_open(struct inode *inode, struct file *file)
|
||||
PRINTK_2(TRACE_MWAVE,
|
||||
"mwavedd::mwave_open, exit return retval %x\n", retval);
|
||||
|
||||
cycle_kernel_lock();
|
||||
return retval;
|
||||
}
|
||||
|
||||
@@ -136,9 +136,9 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
PRINTK_1(TRACE_MWAVE,
|
||||
"mwavedd::mwave_ioctl, IOCTL_MW_RESET"
|
||||
" calling tp3780I_ResetDSP\n");
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
retval = tp3780I_ResetDSP(&pDrvData->rBDData);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
PRINTK_2(TRACE_MWAVE,
|
||||
"mwavedd::mwave_ioctl, IOCTL_MW_RESET"
|
||||
" retval %x from tp3780I_ResetDSP\n",
|
||||
@@ -149,9 +149,9 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
PRINTK_1(TRACE_MWAVE,
|
||||
"mwavedd::mwave_ioctl, IOCTL_MW_RUN"
|
||||
" calling tp3780I_StartDSP\n");
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
retval = tp3780I_StartDSP(&pDrvData->rBDData);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
PRINTK_2(TRACE_MWAVE,
|
||||
"mwavedd::mwave_ioctl, IOCTL_MW_RUN"
|
||||
" retval %x from tp3780I_StartDSP\n",
|
||||
@@ -165,10 +165,10 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
"mwavedd::mwave_ioctl,"
|
||||
" IOCTL_MW_DSP_ABILITIES calling"
|
||||
" tp3780I_QueryAbilities\n");
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
retval = tp3780I_QueryAbilities(&pDrvData->rBDData,
|
||||
&rAbilities);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
PRINTK_2(TRACE_MWAVE,
|
||||
"mwavedd::mwave_ioctl, IOCTL_MW_DSP_ABILITIES"
|
||||
" retval %x from tp3780I_QueryAbilities\n",
|
||||
@@ -199,13 +199,13 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
"mwavedd::mwave_ioctl IOCTL_MW_READ_DATA,"
|
||||
" size %lx, ioarg %lx pusBuffer %p\n",
|
||||
rReadData.ulDataLength, ioarg, pusBuffer);
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
|
||||
iocmd,
|
||||
pusBuffer,
|
||||
rReadData.ulDataLength,
|
||||
rReadData.usDspAddress);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -223,12 +223,12 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
" size %lx, ioarg %lx pusBuffer %p\n",
|
||||
rReadData.ulDataLength / 2, ioarg,
|
||||
pusBuffer);
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
|
||||
iocmd, pusBuffer,
|
||||
rReadData.ulDataLength / 2,
|
||||
rReadData.usDspAddress);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -246,12 +246,12 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
" size %lx, ioarg %lx pusBuffer %p\n",
|
||||
rWriteData.ulDataLength, ioarg,
|
||||
pusBuffer);
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
|
||||
iocmd, pusBuffer,
|
||||
rWriteData.ulDataLength,
|
||||
rWriteData.usDspAddress);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -269,12 +269,12 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
" size %lx, ioarg %lx pusBuffer %p\n",
|
||||
rWriteData.ulDataLength, ioarg,
|
||||
pusBuffer);
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
retval = tp3780I_ReadWriteDspIStore(&pDrvData->rBDData,
|
||||
iocmd, pusBuffer,
|
||||
rWriteData.ulDataLength,
|
||||
rWriteData.usDspAddress);
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -295,10 +295,10 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
ipcnum,
|
||||
pDrvData->IPCs[ipcnum].usIntCount);
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
pDrvData->IPCs[ipcnum].bIsHere = FALSE;
|
||||
pDrvData->IPCs[ipcnum].bIsEnabled = TRUE;
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
|
||||
PRINTK_2(TRACE_MWAVE,
|
||||
"mwavedd::mwave_ioctl IOCTL_MW_REGISTER_IPC"
|
||||
@@ -323,7 +323,7 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
ipcnum,
|
||||
pDrvData->IPCs[ipcnum].usIntCount);
|
||||
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
if (pDrvData->IPCs[ipcnum].bIsEnabled == TRUE) {
|
||||
DECLARE_WAITQUEUE(wait, current);
|
||||
|
||||
@@ -364,7 +364,7 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
" processing\n",
|
||||
ipcnum);
|
||||
}
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -383,14 +383,14 @@ static long mwave_ioctl(struct file *file, unsigned int iocmd,
|
||||
ipcnum);
|
||||
return -EINVAL;
|
||||
}
|
||||
lock_kernel();
|
||||
mutex_lock(&mwave_mutex);
|
||||
if (pDrvData->IPCs[ipcnum].bIsEnabled == TRUE) {
|
||||
pDrvData->IPCs[ipcnum].bIsEnabled = FALSE;
|
||||
if (pDrvData->IPCs[ipcnum].bIsHere == TRUE) {
|
||||
wake_up_interruptible(&pDrvData->IPCs[ipcnum].ipc_wait_queue);
|
||||
}
|
||||
}
|
||||
unlock_kernel();
|
||||
mutex_unlock(&mwave_mutex);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user