From 9593ef76d9ab2290a4fee7f97651dfa1f57185e6 Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Wed, 20 May 2009 16:33:08 -0700 Subject: [PATCH] SLES10 Fixes (part 8) - Add compat_ioctl() handler, by default 64-bit SLES systems build 32-bit ELF binaries. For the 32-bit binaries to pass ioctl information to a 64-bit kernel a compatibility handler needs to be registered. In our case no additional conversions are needed to convert 32-bit ioctl() commands to 64-bit commands so we can just call the default handler. --- module/splat/splat-ctl.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/module/splat/splat-ctl.c b/module/splat/splat-ctl.c index 2ff62ffb0..c123f5bf9 100644 --- a/module/splat/splat-ctl.c +++ b/module/splat/splat-ctl.c @@ -460,6 +460,15 @@ splat_ioctl(struct inode *inode, struct file *file, return rc; } +#ifdef CONFIG_COMPAT +/* Compatibility handler for ioctls from 32-bit ELF binaries */ +static long +splat_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + return splat_ioctl(NULL, file, cmd, arg); +} +#endif /* CONFIG_COMPAT */ + /* I'm not sure why you would want to write in to this buffer from * user space since its principle use is to pass test status info * back to the user space, but I don't see any reason to prevent it. @@ -573,13 +582,16 @@ static loff_t splat_seek(struct file *file, loff_t offset, int origin) } static struct file_operations splat_fops = { - .owner = THIS_MODULE, - .open = splat_open, - .release = splat_release, - .ioctl = splat_ioctl, - .read = splat_read, - .write = splat_write, - .llseek = splat_seek, + .owner = THIS_MODULE, + .open = splat_open, + .release = splat_release, + .ioctl = splat_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = splat_compat_ioctl, +#endif + .read = splat_read, + .write = splat_write, + .llseek = splat_seek, }; static struct cdev splat_cdev = {