spidev: BKL removal
PATCH 1/1 spidev: BKL removal
From: Alan Cox <alan-qBU/[email protected]>
Another step to removing ->ioctl and to removing the BKL
Signed-off-by Alan Cox <[email protected]>
[ [email protected] -- take final step; BKL not needed ]
Signed-off-by David Brownell <[email protected]>
---
Goes on top of the two patches addressing oopsing in "rmmod spi_master".
drivers/spi/spidev.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-)
drivers/spi/spidev.c +13 -6
@@ -229,7 +229,6 @@ static int spidev_message(struct spidev_* We walk the array of user-provided transfers, using each one * to initialize a kernel version of the same transfer. */ -mutex_lock (&spidev->buf_lock); buf = spidev->buffer; total =0 ; for (n = n_xfers, k_tmp = k_xfers, u_tmp = u_xfers;
@@ -297,14 +296,12 @@ static int spidev_message(struct spidev_ status = total; done: -mutex_unlock (&spidev->buf_lock);kfree (k_xfers);return status; } -static int -spidev_ioctl (struct inode *inode,struct file *filp, -unsigned int cmd,unsigned long arg) +static long +spidev_ioctl (struct file *filp,unsigned int cmd,unsigned long arg) {int err =0 ;int retval =0 ;
@@ -342,6 +339,14 @@ spidev_ioctl(struct inode *inode, structif (spi ==NULL )return -ESHUTDOWN ; +/* use the buffer lock here for triple duty: +* - prevent I/O (from us) so calling spi_setup() is safe; +* - prevent concurrent SPI_IOC_WR_* from morphing +* data fields while SPI_IOC_RD_* reads them; +* - SPI_IOC_MESSAGE needs the buffer locked "normally". +*/ +mutex_lock (&spidev->buf_lock); +switch (cmd) {/* read requests */ case SPI_IOC_RD_MODE :
@@ -457,6 +462,8 @@ spidev_ioctl(struct inode *inode, structkfree (ioc);break ; } + +mutex_unlock (&spidev->buf_lock);spi_dev_put (spi);return retval; }
@@ -532,7 +539,7 @@ static struct file_operations spidev_fop*/ .write = spidev_write, .read = spidev_read, - .ioctl = spidev_ioctl, + .unlocked_ioctl = spidev_ioctl, .open = spidev_open, .release = spidev_release, };
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/