]> granicus.if.org Git - spl/commitdiff
Add ddi_copyin/ddi_copyout support for fake kernel originated ioctls.
authorBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 10 Jul 2009 17:56:32 +0000 (10:56 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Fri, 10 Jul 2009 17:56:32 +0000 (10:56 -0700)
include/sys/sunddi.h
module/spl/spl-generic.c

index 404b14b383597ccc33350055f6ed38af2251030a..c1773f504b8c883a3eece884a5b45bdff55a3031 100644 (file)
@@ -213,6 +213,9 @@ extern int ddi_strtol(const char *, char **, int, long *);
 extern int ddi_strtoull(const char *, char **, int, unsigned long long *);
 extern int ddi_strtoll(const char *, char **, int, long long *);
 
+extern int ddi_copyin(const void *from, void *to, size_t len, int flags);
+extern int ddi_copyout(const void *from, void *to, size_t len, int flags);
+
 static __inline__ void ddi_report_dev(dev_info_t *d) { }
 static __inline__ void ddi_prop_remove_all(dev_info_t *dip) { }
 
index 568d40635f2bc843b082c1099de421f0afa76442..b81dabc56f232dfba1b19d434d2e8a858f044f90 100644 (file)
@@ -35,6 +35,7 @@
 #include <sys/proc.h>
 #include <sys/kstat.h>
 #include <sys/utsname.h>
+#include <sys/file.h>
 #include <linux/kmod.h>
 
 #ifdef DEBUG_SUBSYSTEM
@@ -226,6 +227,32 @@ EXPORT_SYMBOL(ddi_strtol);
 EXPORT_SYMBOL(ddi_strtoll);
 EXPORT_SYMBOL(ddi_strtoull);
 
+int
+ddi_copyin(const void *from, void *to, size_t len, int flags)
+{
+       /* Fake ioctl() issued by kernel, 'from' is a kernel address */
+       if (flags & FKIOCTL) {
+               memcpy(to, from, len);
+               return 0;
+       }
+
+       return copyin(from, to, len);
+}
+EXPORT_SYMBOL(ddi_copyin);
+
+int
+ddi_copyout(const void *from, void *to, size_t len, int flags)
+{
+       /* Fake ioctl() issued by kernel, 'from' is a kernel address */
+       if (flags & FKIOCTL) {
+               memcpy(to, from, len);
+               return 0;
+       }
+
+       return copyout(from, to, len);
+}
+EXPORT_SYMBOL(ddi_copyout);
+
 struct new_utsname *__utsname(void)
 {
 #ifdef HAVE_INIT_UTSNAME