On Thu, Jan 20, 2005 at 06:24:25PM -0700, Moore, Eric Dean wrote:
> On Thursday, January 20, 2005 2:38 AM, Andi Kleen wrote:
> >
> > Sorry. I swear it compiled at one point, but some last minute
> > changes must have broken it. Please try this version.
> >
> >
> > Convert mptctl to compat_ioctl. I also changed it to unlocked_ioctl
> > while I was on it.
> >
> > Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
> >
>
> This test compilies, and I have tested it today with both 32bit and 64bit
> apps on x86_64. Works fine.
Thanks.
>
> One request is in compat_mptctl_ioctl:
>
> Can you add MPTTEST added back in the switch/case? It was there before in
> the register_ioctl32_conversion/unregister_ioctl32_conversion 's.
New patch with this changed.
Convert mptctl to compat_ioctl. I also changed it to unlocked_ioctl
while I was on it.
Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
diff -u linux-2.6.11-rc1-bk4/drivers/message/fusion/mptctl.c-o
linux-2.6.11-rc1-bk4/drivers/message/fusion/mptctl.c
--- linux-2.6.11-rc1-bk4/drivers/message/fusion/mptctl.c-o 2005-01-04
12:12:51.000000000 +0100
+++ linux-2.6.11-rc1-bk4/drivers/message/fusion/mptctl.c 2005-01-18
12:11:30.000000000 +0100
@@ -142,6 +142,10 @@
static int mptctl_probe(struct pci_dev *, const struct pci_device_id *);
static void mptctl_remove(struct pci_dev *);
+#ifdef CONFIG_COMPAT
+static long compat_mpctl_ioctl(struct file *f, unsigned cmd, unsigned long
arg);
+#endif
+
/*
* Private function calls.
*/
@@ -552,8 +556,8 @@
* cmd - specify the particular IOCTL command to be issued
* arg - data specific to the command. Must not be null.
*/
-static int
-mptctl_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg)
+static long
+__mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
mpt_ioctl_header __user *uhdr = (void __user *) arg;
mpt_ioctl_header khdr;
@@ -637,6 +641,16 @@
return ret;
}
+static long
+mptctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+{
+ long ret;
+ lock_kernel();
+ ret = __mptctl_ioctl(file, cmd, arg);
+ unlock_kernel();
+ return ret;
+}
+
static int mptctl_do_reset(unsigned long arg)
{
struct mpt_ioctl_diag_reset __user *urinfo = (void __user *) arg;
@@ -2669,7 +2683,10 @@
static struct file_operations mptctl_fops = {
.owner = THIS_MODULE,
.llseek = no_llseek,
- .ioctl = mptctl_ioctl,
+ .unlocked_ioctl = mptctl_ioctl,
+#ifdef CONFIG_COMPAT
+ .compat_ioctl = compat_mpctl_ioctl,
+#endif
};
static struct miscdevice mptctl_miscdev = {
@@ -2691,22 +2708,10 @@
* does contain pointer(s), then the specialized function is used
* to ensure the structure contents is properly processed by mptctl.
*/
-static int
-compat_mptctl_ioctl(unsigned int fd, unsigned int cmd,
- unsigned long arg, struct file *filp)
-{
- int ret;
-
- lock_kernel();
- dctlprintk((KERN_INFO MYNAM "::compat_mptctl_ioctl() called\n"));
- ret = mptctl_ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
- unlock_kernel();
- return ret;
-}
static int
-compat_mptfwxfer_ioctl(unsigned int fd, unsigned int cmd,
- unsigned long arg, struct file *filp)
+compat_mptfwxfer_ioctl(struct file *filp, unsigned int cmd,
+ unsigned long arg)
{
struct mpt_fw_xfer32 kfw32;
struct mpt_fw_xfer kfw;
@@ -2744,8 +2749,8 @@
}
static int
-compat_mpt_command(unsigned int fd, unsigned int cmd,
- unsigned long arg, struct file *filp)
+compat_mpt_command(struct file *filp, unsigned int cmd,
+ unsigned long arg)
{
struct mpt_ioctl_command32 karg32;
struct mpt_ioctl_command32 __user *uarg = (struct mpt_ioctl_command32
__user *) arg;
@@ -2797,6 +2802,38 @@
return ret;
}
+static long compat_mpctl_ioctl(struct file *f, unsigned int cmd, unsigned long
arg)
+{
+ int ret;
+ lock_kernel();
+ switch (cmd) {
+ case MPTIOCINFO:
+ case MPTIOCINFO1:
+ case MPTIOCINFO2:
+ case MPTTARGETINFO:
+ case MPTEVENTQUERY:
+ case MPTEVENTENABLE:
+ case MPTEVENTREPORT:
+ case MPTHARDRESET:
+ case HP_GETHOSTINFO:
+ case HP_GETTARGETINFO:
+ case MPTTEST:
+ ret = __mptctl_ioctl(f, cmd, arg);
+ break;
+ case MPTCOMMAND32:
+ ret = compat_mpt_command(f, cmd, arg);
+ break;
+ case MPTFWDOWNLOAD32:
+ ret = compat_mptfwxfer_ioctl(f, cmd, arg);
+ break;
+ default:
+ ret = -ENOIOCTLCMD;
+ break;
+ }
+ unlock_kernel();
+ return ret;
+}
+
#endif
@@ -2879,35 +2916,6 @@
": failed to register dd callbacks\n"));
}
-#ifdef CONFIG_COMPAT
- err = register_ioctl32_conversion(MPTIOCINFO, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTIOCINFO1, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTIOCINFO2, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTTARGETINFO, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTTEST, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTEVENTQUERY, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTEVENTENABLE, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTEVENTREPORT, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTHARDRESET, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTCOMMAND32, compat_mpt_command);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(MPTFWDOWNLOAD32,
- compat_mptfwxfer_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(HP_GETHOSTINFO, compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
- err = register_ioctl32_conversion(HP_GETTARGETINFO,
compat_mptctl_ioctl);
- if (++where && err) goto out_fail;
-#endif
/* Register this device */
err = misc_register(&mptctl_miscdev);
@@ -2940,23 +2948,6 @@
out_fail:
-#ifdef CONFIG_COMPAT
- printk(KERN_ERR MYNAM ": ERROR: Failed to register ioctl32_conversion!"
- " (%d:err=%d)\n", where, err);
- unregister_ioctl32_conversion(MPTIOCINFO);
- unregister_ioctl32_conversion(MPTIOCINFO1);
- unregister_ioctl32_conversion(MPTIOCINFO2);
- unregister_ioctl32_conversion(MPTTARGETINFO);
- unregister_ioctl32_conversion(MPTTEST);
- unregister_ioctl32_conversion(MPTEVENTQUERY);
- unregister_ioctl32_conversion(MPTEVENTENABLE);
- unregister_ioctl32_conversion(MPTEVENTREPORT);
- unregister_ioctl32_conversion(MPTHARDRESET);
- unregister_ioctl32_conversion(MPTCOMMAND32);
- unregister_ioctl32_conversion(MPTFWDOWNLOAD32);
- unregister_ioctl32_conversion(HP_GETHOSTINFO);
- unregister_ioctl32_conversion(HP_GETTARGETINFO);
-#endif
mpt_device_driver_deregister(MPTCTL_DRIVER);
@@ -2980,22 +2971,6 @@
mpt_device_driver_deregister(MPTCTL_DRIVER);
-#ifdef CONFIG_COMPAT
- unregister_ioctl32_conversion(MPTIOCINFO);
- unregister_ioctl32_conversion(MPTIOCINFO1);
- unregister_ioctl32_conversion(MPTIOCINFO2);
- unregister_ioctl32_conversion(MPTTARGETINFO);
- unregister_ioctl32_conversion(MPTTEST);
- unregister_ioctl32_conversion(MPTEVENTQUERY);
- unregister_ioctl32_conversion(MPTEVENTENABLE);
- unregister_ioctl32_conversion(MPTEVENTREPORT);
- unregister_ioctl32_conversion(MPTHARDRESET);
- unregister_ioctl32_conversion(MPTCOMMAND32);
- unregister_ioctl32_conversion(MPTFWDOWNLOAD32);
- unregister_ioctl32_conversion(HP_GETHOSTINFO);
- unregister_ioctl32_conversion(HP_GETTARGETINFO);
-#endif
-
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html