* [PATCH] Add compat_ioctl to mptctl
@ 2005-01-18 11:22 Andi Kleen
0 siblings, 0 replies; 6+ messages in thread
From: Andi Kleen @ 2005-01-18 11:22 UTC (permalink / raw)
To: emoore, James.Bottomley, linux-scsi
Convert mptctl driver to new compat_ioctl entry point.
Only compile tested.
Signed-off-by: Andi Kleen <ak@muc.de>
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 06:25:50.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 inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
+{
+ long ret;
+ lock_kernel();
+ ret = __mptctl_ioctl(inode, 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,37 @@
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:
+ ret = mptctl_ioctl(NULL, 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 +2915,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 +2947,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 +2970,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
-
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH] Add compat_ioctl to mptctl
@ 2005-01-19 18:25 Moore, Eric Dean
2005-01-20 9:38 ` Andi Kleen
0 siblings, 1 reply; 6+ messages in thread
From: Moore, Eric Dean @ 2005-01-19 18:25 UTC (permalink / raw)
To: Andi Kleen, James.Bottomley, linux-scsi
On Tuesday, January 18, 2005 4:22 AM, Andi Kleen wrote:
>
> Convert mptctl driver to new compat_ioctl entry point.
>
> Only compile tested.
>
> Signed-off-by: Andi Kleen <ak@muc.de>
>
This doesn't compile. Andi - Pls fix, resend, and
I will test.
Three issues are:
(1) incompatible number of paramters being passed
when calling __mptctl_ioctl; look at line 649
(2) definition of unlocked_ioctl is three parameters, however
mptctl_ioctl is having four paramters; line 2686
(3) compat_mptctl_ioctl - is passing NULL pointer to mptctl_ioctl,
this will panic in __mptctl_ioctl; look at line 2820, then line 566
Here is output of compiling:
emoore-test5:/usr/src/linux-2.6.11-rc1-bk7 # make modules
CHK include/linux/version.h
make[1]: `arch/x86_64/kernel/asm-offsets.s' is up to date.
CC [M] drivers/message/fusion/mptctl.o
drivers/message/fusion/mptctl.c: In function `mptctl_ioctl':
drivers/message/fusion/mptctl.c:649: warning: passing arg 1 of
`__mptctl_ioctl' from incompatible pointer type
drivers/message/fusion/mptctl.c:649: warning: passing arg 2 of
`__mptctl_ioctl' makes integer from pointer without a cast
drivers/message/fusion/mptctl.c:649: error: too many arguments to function
`__mptctl_ioctl'
drivers/message/fusion/mptctl.c: At top level:
drivers/message/fusion/mptctl.c:2686: warning: initialization from
incompatible pointer type
make[3]: *** [drivers/message/fusion/mptctl.o] Error 1
make[2]: *** [drivers/message/fusion] Error 2
make[1]: *** [drivers/message] Error 2
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Add compat_ioctl to mptctl
2005-01-19 18:25 Moore, Eric Dean
@ 2005-01-20 9:38 ` Andi Kleen
0 siblings, 0 replies; 6+ messages in thread
From: Andi Kleen @ 2005-01-20 9:38 UTC (permalink / raw)
To: Moore, Eric Dean; +Cc: James.Bottomley, linux-scsi
On Wed, Jan 19, 2005 at 11:25:42AM -0700, Moore, Eric Dean wrote:
> On Tuesday, January 18, 2005 4:22 AM, Andi Kleen wrote:
> >
> > Convert mptctl driver to new compat_ioctl entry point.
> >
> > Only compile tested.
> >
> > Signed-off-by: Andi Kleen <ak@muc.de>
> >
>
> This doesn't compile. Andi - Pls fix, resend, and
> I will test.
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 <ak@muc.de>
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-20 10:06:32.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,37 @@
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:
+ 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 +2915,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 +2947,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 +2970,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
-
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH] Add compat_ioctl to mptctl
@ 2005-01-21 1:24 Moore, Eric Dean
2005-01-21 3:44 ` Andi Kleen
0 siblings, 1 reply; 6+ messages in thread
From: Moore, Eric Dean @ 2005-01-21 1:24 UTC (permalink / raw)
To: Andi Kleen; +Cc: James.Bottomley, linux-scsi
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 <ak@muc.de>
>
This test compilies, and I have tested it today with both 32bit and 64bit
apps on x86_64. Works fine.
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.
Thankyou,
Eric Moore
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Add compat_ioctl to mptctl
2005-01-21 1:24 [PATCH] Add compat_ioctl to mptctl Moore, Eric Dean
@ 2005-01-21 3:44 ` Andi Kleen
0 siblings, 0 replies; 6+ messages in thread
From: Andi Kleen @ 2005-01-21 3:44 UTC (permalink / raw)
To: Moore, Eric Dean; +Cc: James.Bottomley, linux-scsi
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 <ak@muc.de>
> >
>
> 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 <ak@muc.de>
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
-
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH] Add compat_ioctl to mptctl
@ 2005-01-22 0:33 Moore, Eric Dean
0 siblings, 0 replies; 6+ messages in thread
From: Moore, Eric Dean @ 2005-01-22 0:33 UTC (permalink / raw)
To: Andi Kleen; +Cc: James.Bottomley, linux-scsi
This patch is good to go. Thanks.
On Thursday, January 20, 2005 8:44 PM, Andi Kleen wrote:
> >
> > 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 <ak@muc.de>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2005-01-22 0:34 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-01-21 1:24 [PATCH] Add compat_ioctl to mptctl Moore, Eric Dean
2005-01-21 3:44 ` Andi Kleen
-- strict thread matches above, loose matches on Subject: below --
2005-01-22 0:33 Moore, Eric Dean
2005-01-19 18:25 Moore, Eric Dean
2005-01-20 9:38 ` Andi Kleen
2005-01-18 11:22 Andi Kleen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).