Commit dbd3c7e1 authored by Jesper Nilsson's avatar Jesper Nilsson

CRIS: Export missing function symbols

strcmp was lost when all other string functions were removed,
but we still have an optimized version for this on CRISv32,
so any driver built as a module would not have access to this symbol.

In a similar manner, we had optimized versions of
csum_partial_copy_from_user and __do_clear_user
but no exported symbols for them, breaking bunch of other drivers
when built as a module.

At the same time, move EXPORT_SYMBOL(__copy_user) and
EXPORT_SYMBOL(__copy_user_zeroing) C-files so it's
located together with the function definition.
Signed-off-by: default avatarJesper Nilsson <jesper.nilsson@axis.com>
parent 82e6df1e
...@@ -30,8 +30,7 @@ ...@@ -30,8 +30,7 @@
/* Copy to userspace. This is based on the memcpy used for /* Copy to userspace. This is based on the memcpy used for
kernel-to-kernel copying; see "string.c". */ kernel-to-kernel copying; see "string.c". */
unsigned long unsigned long __copy_user(void __user *pdst, const void *psrc, unsigned long pn)
__copy_user (void __user *pdst, const void *psrc, unsigned long pn)
{ {
/* We want the parameters put in special registers. /* We want the parameters put in special registers.
Make sure the compiler is able to make something useful of this. Make sure the compiler is able to make something useful of this.
...@@ -187,13 +186,14 @@ __copy_user (void __user *pdst, const void *psrc, unsigned long pn) ...@@ -187,13 +186,14 @@ __copy_user (void __user *pdst, const void *psrc, unsigned long pn)
return retn; return retn;
} }
EXPORT_SYMBOL(__copy_user);
/* Copy from user to kernel, zeroing the bytes that were inaccessible in /* Copy from user to kernel, zeroing the bytes that were inaccessible in
userland. The return-value is the number of bytes that were userland. The return-value is the number of bytes that were
inaccessible. */ inaccessible. */
unsigned long unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
__copy_user_zeroing(void *pdst, const void __user *psrc, unsigned long pn) unsigned long pn)
{ {
/* We want the parameters put in special registers. /* We want the parameters put in special registers.
Make sure the compiler is able to make something useful of this. Make sure the compiler is able to make something useful of this.
...@@ -369,11 +369,10 @@ __copy_user_zeroing(void *pdst, const void __user *psrc, unsigned long pn) ...@@ -369,11 +369,10 @@ __copy_user_zeroing(void *pdst, const void __user *psrc, unsigned long pn)
return retn + n; return retn + n;
} }
EXPORT_SYMBOL(__copy_user_zeroing);
/* Zero userspace. */ /* Zero userspace. */
unsigned long __do_clear_user(void __user *pto, unsigned long pn)
unsigned long
__do_clear_user (void __user *pto, unsigned long pn)
{ {
/* We want the parameters put in special registers. /* We want the parameters put in special registers.
Make sure the compiler is able to make something useful of this. Make sure the compiler is able to make something useful of this.
...@@ -521,3 +520,4 @@ __do_clear_user (void __user *pto, unsigned long pn) ...@@ -521,3 +520,4 @@ __do_clear_user (void __user *pto, unsigned long pn)
return retn; return retn;
} }
EXPORT_SYMBOL(__do_clear_user);
...@@ -26,8 +26,7 @@ ...@@ -26,8 +26,7 @@
/* Copy to userspace. This is based on the memcpy used for /* Copy to userspace. This is based on the memcpy used for
kernel-to-kernel copying; see "string.c". */ kernel-to-kernel copying; see "string.c". */
unsigned long unsigned long __copy_user(void __user *pdst, const void *psrc, unsigned long pn)
__copy_user (void __user *pdst, const void *psrc, unsigned long pn)
{ {
/* We want the parameters put in special registers. /* We want the parameters put in special registers.
Make sure the compiler is able to make something useful of this. Make sure the compiler is able to make something useful of this.
...@@ -155,13 +154,13 @@ __copy_user (void __user *pdst, const void *psrc, unsigned long pn) ...@@ -155,13 +154,13 @@ __copy_user (void __user *pdst, const void *psrc, unsigned long pn)
return retn; return retn;
} }
EXPORT_SYMBOL(__copy_user);
/* Copy from user to kernel, zeroing the bytes that were inaccessible in /* Copy from user to kernel, zeroing the bytes that were inaccessible in
userland. The return-value is the number of bytes that were userland. The return-value is the number of bytes that were
inaccessible. */ inaccessible. */
unsigned long __copy_user_zeroing(void *pdst, const void __user *psrc,
unsigned long unsigned long pn)
__copy_user_zeroing(void *pdst, const void __user *psrc, unsigned long pn)
{ {
/* We want the parameters put in special registers. /* We want the parameters put in special registers.
Make sure the compiler is able to make something useful of this. Make sure the compiler is able to make something useful of this.
...@@ -321,11 +320,10 @@ __copy_user_zeroing(void *pdst, const void __user *psrc, unsigned long pn) ...@@ -321,11 +320,10 @@ __copy_user_zeroing(void *pdst, const void __user *psrc, unsigned long pn)
return retn + n; return retn + n;
} }
EXPORT_SYMBOL(__copy_user_zeroing);
/* Zero userspace. */ /* Zero userspace. */
unsigned long __do_clear_user(void __user *pto, unsigned long pn)
unsigned long
__do_clear_user (void __user *pto, unsigned long pn)
{ {
/* We want the parameters put in special registers. /* We want the parameters put in special registers.
Make sure the compiler is able to make something useful of this. Make sure the compiler is able to make something useful of this.
...@@ -468,3 +466,4 @@ __do_clear_user (void __user *pto, unsigned long pn) ...@@ -468,3 +466,4 @@ __do_clear_user (void __user *pto, unsigned long pn)
return retn; return retn;
} }
EXPORT_SYMBOL(__do_clear_user);
...@@ -47,16 +47,16 @@ EXPORT_SYMBOL(__negdi2); ...@@ -47,16 +47,16 @@ EXPORT_SYMBOL(__negdi2);
EXPORT_SYMBOL(__ioremap); EXPORT_SYMBOL(__ioremap);
EXPORT_SYMBOL(iounmap); EXPORT_SYMBOL(iounmap);
/* Userspace access functions */
EXPORT_SYMBOL(__copy_user_zeroing);
EXPORT_SYMBOL(__copy_user);
#undef memcpy #undef memcpy
#undef memset #undef memset
extern void * memset(void *, int, __kernel_size_t); extern void * memset(void *, int, __kernel_size_t);
extern void * memcpy(void *, const void *, __kernel_size_t); extern void * memcpy(void *, const void *, __kernel_size_t);
EXPORT_SYMBOL(memcpy); EXPORT_SYMBOL(memcpy);
EXPORT_SYMBOL(memset); EXPORT_SYMBOL(memset);
#ifdef CONFIG_ETRAX_ARCH_V32
#undef strcmp
EXPORT_SYMBOL(strcmp);
#endif
#ifdef CONFIG_ETRAX_FAST_TIMER #ifdef CONFIG_ETRAX_FAST_TIMER
/* Fast timer functions */ /* Fast timer functions */
...@@ -66,3 +66,4 @@ EXPORT_SYMBOL(del_fast_timer); ...@@ -66,3 +66,4 @@ EXPORT_SYMBOL(del_fast_timer);
EXPORT_SYMBOL(schedule_usleep); EXPORT_SYMBOL(schedule_usleep);
#endif #endif
EXPORT_SYMBOL(csum_partial); EXPORT_SYMBOL(csum_partial);
EXPORT_SYMBOL(csum_partial_copy_from_user);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment