diff options
author | Brian Behlendorf <[email protected]> | 2009-07-10 10:56:32 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2009-07-10 10:56:32 -0700 |
commit | d3126abe75a6502d55bfa2339b48d4fa263e1b02 (patch) | |
tree | 69524df2de86f7030d86687dd96f407b8d2502f4 | |
parent | 2a734e9c266f5fd31db84153a61263b529167732 (diff) |
Add ddi_copyin/ddi_copyout support for fake kernel originated ioctls.
-rw-r--r-- | include/sys/sunddi.h | 3 | ||||
-rw-r--r-- | module/spl/spl-generic.c | 27 |
2 files changed, 30 insertions, 0 deletions
diff --git a/include/sys/sunddi.h b/include/sys/sunddi.h index 404b14b38..c1773f504 100644 --- a/include/sys/sunddi.h +++ b/include/sys/sunddi.h @@ -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) { } diff --git a/module/spl/spl-generic.c b/module/spl/spl-generic.c index 568d40635..b81dabc56 100644 --- a/module/spl/spl-generic.c +++ b/module/spl/spl-generic.c @@ -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 |