2011-02-02 10:57:31

by Bernhard Walle

[permalink] [raw]
Subject: [PATCH] spi: spidev: Add 32 bit compat ioctl()

Add the compat_ioctl for operations on /dev/spi* so that 32 bit
userspace applications can access SPI. As far as I can see all data
structure are already prepared for that, so no additional conversion has
to be done.

My use case is MIPS with N32 userspace ABI and toolchain, and that was
also the platform where I tested it successfully (Cavium Octeon).

Signed-off-by: Bernhard Walle <[email protected]>
---
drivers/spi/spidev.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
index 4e6245e..95c3f10 100644
--- a/drivers/spi/spidev.c
+++ b/drivers/spi/spidev.c
@@ -471,6 +471,14 @@ spidev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
return retval;
}

+#ifdef CONFIG_COMPAT
+static long
+spidev_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+ return spidev_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
+}
+#endif /* CONFIG_COMPAT */
+
static int spidev_open(struct inode *inode, struct file *filp)
{
struct spidev_data *spidev;
@@ -543,6 +551,9 @@ static const struct file_operations spidev_fops = {
.write = spidev_write,
.read = spidev_read,
.unlocked_ioctl = spidev_ioctl,
+#ifdef CONFIG_COMPAT
+ .compat_ioctl = spidev_compat_ioctl,
+#endif
.open = spidev_open,
.release = spidev_release,
.llseek = no_llseek,
--
1.7.1


2011-02-02 11:15:36

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] spi: spidev: Add 32 bit compat ioctl()

On Wednesday 02 February 2011, Bernhard Walle wrote:
> Add the compat_ioctl for operations on /dev/spi* so that 32 bit
> userspace applications can access SPI. As far as I can see all data
> structure are already prepared for that, so no additional conversion has
> to be done.
>
> My use case is MIPS with N32 userspace ABI and toolchain, and that was
> also the platform where I tested it successfully (Cavium Octeon).
>
> Signed-off-by: Bernhard Walle <[email protected]>

I think you now need to #include <linux/compat.h> as well, to get the
definition of compat_ptr(). Otherwise looks good.

Arnd

2011-02-02 11:33:28

by Bernhard Walle

[permalink] [raw]
Subject: Re: [PATCH] spi: spidev: Add 32 bit compat ioctl()

Am 02.02.2011 12:15, schrieb Arnd Bergmann:
> On Wednesday 02 February 2011, Bernhard Walle wrote:
>> Add the compat_ioctl for operations on /dev/spi* so that 32 bit
>> userspace applications can access SPI. As far as I can see all data
>> structure are already prepared for that, so no additional conversion has
>> to be done.
>>
>> My use case is MIPS with N32 userspace ABI and toolchain, and that was
>> also the platform where I tested it successfully (Cavium Octeon).
>>
>> Signed-off-by: Bernhard Walle <[email protected]>
>
> I think you now need to #include <linux/compat.h> as well, to get the
> definition of compat_ptr(). Otherwise looks good.

It compiled on my MIPS test environment without that include, but I
adjusted the patch and posted again.

Thanks for reviewing, Arnd!


Regards,
Bernhard