Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 909d145f authored by Alan Cox's avatar Alan Cox Committed by Linus Torvalds
Browse files

mwave: ioctl BKL pushdown



Push the BKL down to the point it wraps the actual mwave method handlers

Signed-off-by: default avatarAlan Cox <alan@redhat.com>
Cc: Eric Sesterhenn <snakebyte@gmx.de>
Cc: Yani Ioannou <yani.ioannou@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 47be36a2
Loading
Loading
Loading
Loading
+28 −11
Original line number Diff line number Diff line
@@ -86,8 +86,8 @@ module_param(mwave_uart_io, int, 0);

static int mwave_open(struct inode *inode, struct file *file);
static int mwave_close(struct inode *inode, struct file *file);
static int mwave_ioctl(struct inode *inode, struct file *filp,
                       unsigned int iocmd, unsigned long ioarg);
static long mwave_ioctl(struct file *filp, unsigned int iocmd,
							unsigned long ioarg);

MWAVE_DEVICE_DATA mwave_s_mdd;

@@ -119,16 +119,16 @@ static int mwave_close(struct inode *inode, struct file *file)
	return retval;
}

static int mwave_ioctl(struct inode *inode, struct file *file,
                       unsigned int iocmd, unsigned long ioarg)
static long mwave_ioctl(struct file *file, unsigned int iocmd,
							unsigned long ioarg)
{
	unsigned int retval = 0;
	pMWAVE_DEVICE_DATA pDrvData = &mwave_s_mdd;
	void __user *arg = (void __user *)ioarg;

	PRINTK_5(TRACE_MWAVE,
		"mwavedd::mwave_ioctl, entry inode %p file %p cmd %x arg %x\n",
		 inode,  file, iocmd, (int) ioarg);
	PRINTK_4(TRACE_MWAVE,
		"mwavedd::mwave_ioctl, entry file %p cmd %x arg %x\n",
		file, iocmd, (int) ioarg);

	switch (iocmd) {

@@ -136,7 +136,9 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
			PRINTK_1(TRACE_MWAVE,
				"mwavedd::mwave_ioctl, IOCTL_MW_RESET"
				" calling tp3780I_ResetDSP\n");
			lock_kernel();
			retval = tp3780I_ResetDSP(&pDrvData->rBDData);
			unlock_kernel();
			PRINTK_2(TRACE_MWAVE,
				"mwavedd::mwave_ioctl, IOCTL_MW_RESET"
				" retval %x from tp3780I_ResetDSP\n",
@@ -147,7 +149,9 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
			PRINTK_1(TRACE_MWAVE,
				"mwavedd::mwave_ioctl, IOCTL_MW_RUN"
				" calling tp3780I_StartDSP\n");
			lock_kernel();
			retval = tp3780I_StartDSP(&pDrvData->rBDData);
			unlock_kernel();
			PRINTK_2(TRACE_MWAVE,
				"mwavedd::mwave_ioctl, IOCTL_MW_RUN"
				" retval %x from tp3780I_StartDSP\n",
@@ -161,8 +165,10 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
				"mwavedd::mwave_ioctl,"
				" IOCTL_MW_DSP_ABILITIES calling"
				" tp3780I_QueryAbilities\n");
			lock_kernel();
			retval = tp3780I_QueryAbilities(&pDrvData->rBDData,
					&rAbilities);
			unlock_kernel();
			PRINTK_2(TRACE_MWAVE,
				"mwavedd::mwave_ioctl, IOCTL_MW_DSP_ABILITIES"
				" retval %x from tp3780I_QueryAbilities\n",
@@ -193,11 +199,13 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
				"mwavedd::mwave_ioctl IOCTL_MW_READ_DATA,"
				" size %lx, ioarg %lx pusBuffer %p\n",
				rReadData.ulDataLength, ioarg, pusBuffer);
			lock_kernel();
			retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
					iocmd,
					pusBuffer,
					rReadData.ulDataLength,
					rReadData.usDspAddress);
			unlock_kernel();
		}
			break;
	
@@ -215,10 +223,12 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
				" size %lx, ioarg %lx pusBuffer %p\n",
				rReadData.ulDataLength / 2, ioarg,
				pusBuffer);
			lock_kernel();
			retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
				iocmd, pusBuffer,
				rReadData.ulDataLength / 2,
				rReadData.usDspAddress);
			unlock_kernel();
		}
			break;
	
@@ -236,10 +246,12 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
				" size %lx, ioarg %lx pusBuffer %p\n",
				rWriteData.ulDataLength, ioarg,
				pusBuffer);
			lock_kernel();
			retval = tp3780I_ReadWriteDspDStore(&pDrvData->rBDData,
					iocmd, pusBuffer,
					rWriteData.ulDataLength,
					rWriteData.usDspAddress);
			unlock_kernel();
		}
			break;
	
@@ -257,10 +269,12 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
				" size %lx, ioarg %lx pusBuffer %p\n",
				rWriteData.ulDataLength, ioarg,
				pusBuffer);
			lock_kernel();
			retval = tp3780I_ReadWriteDspIStore(&pDrvData->rBDData,
					iocmd, pusBuffer,
					rWriteData.ulDataLength,
					rWriteData.usDspAddress);
			unlock_kernel();
		}
			break;
	
@@ -281,8 +295,10 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
						ipcnum);
				return -EINVAL;
			}
			lock_kernel();
			pDrvData->IPCs[ipcnum].bIsHere = FALSE;
			pDrvData->IPCs[ipcnum].bIsEnabled = TRUE;
			unlock_kernel();
	
			PRINTK_2(TRACE_MWAVE,
				"mwavedd::mwave_ioctl IOCTL_MW_REGISTER_IPC"
@@ -307,6 +323,7 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
				return -EINVAL;
			}
	
			lock_kernel();
			if (pDrvData->IPCs[ipcnum].bIsEnabled == TRUE) {
				DECLARE_WAITQUEUE(wait, current);

@@ -347,6 +364,7 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
					" processing\n",
					ipcnum);
			}
			unlock_kernel();
		}
			break;
	
@@ -365,19 +383,18 @@ static int mwave_ioctl(struct inode *inode, struct file *file,
						ipcnum);
				return -EINVAL;
			}
			lock_kernel();
			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();
		}
			break;
	
		default:
			PRINTK_ERROR(KERN_ERR_MWAVE "mwavedd::mwave_ioctl:"
					" Error: Unrecognized iocmd %x\n",
					iocmd);
			return -ENOTTY;
			break;
	} /* switch */
@@ -460,7 +477,7 @@ static const struct file_operations mwave_fops = {
	.owner		= THIS_MODULE,
	.read		= mwave_read,
	.write		= mwave_write,
	.ioctl		= mwave_ioctl,
	.unlocked_ioctl	= mwave_ioctl,
	.open		= mwave_open,
	.release	= mwave_close
};