There are a bunch of common functions used in the 'mali' and
'ump' modules. In fact, the the source files with these functions
are even symlinked between 'ump' and 'mali' directories since
commit 08084c4f2351a190b53f3f39f5b35b8821cc11e4 ("sunxi: prevent
mali drivers from building every time").

But if we try to build both 'mali' and 'ump' modules statically,
then the linker complains about duplicated functions. In order
to resolve this problem, just mark the problematic functions
as 'weak'.

Signed-off-by: Siarhei Siamashka <siarhei.siamas...@gmail.com>
---
 drivers/gpu/mali/Kconfig                       |  2 +-
 drivers/gpu/mali/mali/linux/mali_osk_atomics.c | 14 +++++++-------
 drivers/gpu/mali/mali/linux/mali_osk_locks.c   | 14 +++++++-------
 drivers/gpu/mali/mali/linux/mali_osk_math.c    |  2 +-
 drivers/gpu/mali/mali/linux/mali_osk_memory.c  | 16 ++++++++--------
 drivers/gpu/mali/mali/linux/mali_osk_misc.c    | 12 ++++++------
 drivers/gpu/mali/ump/linux/ump_kernel_linux.c  |  2 +-
 7 files changed, 31 insertions(+), 31 deletions(-)

diff --git a/drivers/gpu/mali/Kconfig b/drivers/gpu/mali/Kconfig
index 2c7f9b6..32d1e91 100644
--- a/drivers/gpu/mali/Kconfig
+++ b/drivers/gpu/mali/Kconfig
@@ -1,6 +1,6 @@
 config MALI
        tristate "ARM Mali GPU modules"
-       depends on ARM && m
+       depends on ARM
         select UMP
         select MALI400
        default n
diff --git a/drivers/gpu/mali/mali/linux/mali_osk_atomics.c 
b/drivers/gpu/mali/mali/linux/mali_osk_atomics.c
index 846fd3b..9dad2e7 100644
--- a/drivers/gpu/mali/mali/linux/mali_osk_atomics.c
+++ b/drivers/gpu/mali/mali/linux/mali_osk_atomics.c
@@ -17,39 +17,39 @@
 #include <asm/atomic.h>
 #include "mali_kernel_common.h"
 
-void _mali_osk_atomic_dec( _mali_osk_atomic_t *atom )
+__weak void _mali_osk_atomic_dec( _mali_osk_atomic_t *atom )
 {
     atomic_dec((atomic_t *)&atom->u.val);
 }
 
-u32 _mali_osk_atomic_dec_return( _mali_osk_atomic_t *atom )
+__weak u32 _mali_osk_atomic_dec_return( _mali_osk_atomic_t *atom )
 {
     return atomic_dec_return((atomic_t *)&atom->u.val);
 }
 
-void _mali_osk_atomic_inc( _mali_osk_atomic_t *atom )
+__weak void _mali_osk_atomic_inc( _mali_osk_atomic_t *atom )
 {
     atomic_inc((atomic_t *)&atom->u.val);
 }
 
-u32 _mali_osk_atomic_inc_return( _mali_osk_atomic_t *atom )
+__weak u32 _mali_osk_atomic_inc_return( _mali_osk_atomic_t *atom )
 {
     return atomic_inc_return((atomic_t *)&atom->u.val);
 }
 
-_mali_osk_errcode_t _mali_osk_atomic_init( _mali_osk_atomic_t *atom, u32 val )
+__weak _mali_osk_errcode_t _mali_osk_atomic_init( _mali_osk_atomic_t *atom, 
u32 val )
 {
     MALI_CHECK_NON_NULL(atom, _MALI_OSK_ERR_INVALID_ARGS);
     atomic_set((atomic_t *)&atom->u.val, val);
     return _MALI_OSK_ERR_OK;
 }
 
-u32 _mali_osk_atomic_read( _mali_osk_atomic_t *atom )
+__weak u32 _mali_osk_atomic_read( _mali_osk_atomic_t *atom )
 {
     return atomic_read((atomic_t *)&atom->u.val);
 }
 
-void _mali_osk_atomic_term( _mali_osk_atomic_t *atom )
+__weak void _mali_osk_atomic_term( _mali_osk_atomic_t *atom )
 {
     MALI_IGNORE(atom);
 }
diff --git a/drivers/gpu/mali/mali/linux/mali_osk_locks.c 
b/drivers/gpu/mali/mali/linux/mali_osk_locks.c
index c3c8d09..34e05ee 100644
--- a/drivers/gpu/mali/mali/linux/mali_osk_locks.c
+++ b/drivers/gpu/mali/mali/linux/mali_osk_locks.c
@@ -73,7 +73,7 @@ struct _mali_osk_lock_t_struct
        ); /* MALI_DEBUG_CODE */
 };
 
-_mali_osk_lock_t *_mali_osk_lock_init( _mali_osk_lock_flags_t flags, u32 
initial, u32 order )
+__weak _mali_osk_lock_t *_mali_osk_lock_init( _mali_osk_lock_flags_t flags, 
u32 initial, u32 order )
 {
     _mali_osk_lock_t *lock = NULL;
 
@@ -148,23 +148,23 @@ _mali_osk_lock_t *_mali_osk_lock_init( 
_mali_osk_lock_flags_t flags, u32 initial
 }
 
 #ifdef DEBUG
-u32 _mali_osk_lock_get_owner( _mali_osk_lock_t *lock )
+__weak u32 _mali_osk_lock_get_owner( _mali_osk_lock_t *lock )
 {
        return lock->owner;
 }
 
-u32 _mali_osk_lock_get_number_owners( _mali_osk_lock_t *lock )
+__weak u32 _mali_osk_lock_get_number_owners( _mali_osk_lock_t *lock )
 {
        return lock->nOwners;
 }
 
-u32 _mali_osk_lock_get_mode( _mali_osk_lock_t *lock )
+__weak u32 _mali_osk_lock_get_mode( _mali_osk_lock_t *lock )
 {
        return lock->mode;
 }
 #endif /* DEBUG */
 
-_mali_osk_errcode_t _mali_osk_lock_wait( _mali_osk_lock_t *lock, 
_mali_osk_lock_mode_t mode)
+__weak _mali_osk_errcode_t _mali_osk_lock_wait( _mali_osk_lock_t *lock, 
_mali_osk_lock_mode_t mode)
 {
     _mali_osk_errcode_t err = _MALI_OSK_ERR_OK;
 
@@ -247,7 +247,7 @@ _mali_osk_errcode_t _mali_osk_lock_wait( _mali_osk_lock_t 
*lock, _mali_osk_lock_
     return err;
 }
 
-void _mali_osk_lock_signal( _mali_osk_lock_t *lock, _mali_osk_lock_mode_t mode 
)
+__weak void _mali_osk_lock_signal( _mali_osk_lock_t *lock, 
_mali_osk_lock_mode_t mode )
 {
        /* Parameter validation */
        MALI_DEBUG_ASSERT_POINTER( lock );
@@ -326,7 +326,7 @@ void _mali_osk_lock_signal( _mali_osk_lock_t *lock, 
_mali_osk_lock_mode_t mode )
        }
 }
 
-void _mali_osk_lock_term( _mali_osk_lock_t *lock )
+__weak void _mali_osk_lock_term( _mali_osk_lock_t *lock )
 {
        /* Parameter validation  */
        MALI_DEBUG_ASSERT_POINTER( lock );
diff --git a/drivers/gpu/mali/mali/linux/mali_osk_math.c 
b/drivers/gpu/mali/mali/linux/mali_osk_math.c
index b81fa83..c488e17 100644
--- a/drivers/gpu/mali/mali/linux/mali_osk_math.c
+++ b/drivers/gpu/mali/mali/linux/mali_osk_math.c
@@ -16,7 +16,7 @@
 #include "mali_osk.h"
 #include <linux/bitops.h>
 
-u32 inline _mali_osk_clz( u32 input )
+__weak u32 _mali_osk_clz( u32 input )
 {
        return 32-fls(input);
 }
diff --git a/drivers/gpu/mali/mali/linux/mali_osk_memory.c 
b/drivers/gpu/mali/mali/linux/mali_osk_memory.c
index e83e676..22f2cf9 100644
--- a/drivers/gpu/mali/mali/linux/mali_osk_memory.c
+++ b/drivers/gpu/mali/mali/linux/mali_osk_memory.c
@@ -17,42 +17,42 @@
 #include <linux/slab.h>
 #include <linux/vmalloc.h>
 
-void inline *_mali_osk_calloc( u32 n, u32 size )
+__weak void *_mali_osk_calloc( u32 n, u32 size )
 {
     return kcalloc(n, size, GFP_KERNEL);
 }
 
-void inline *_mali_osk_malloc( u32 size )
+__weak void *_mali_osk_malloc( u32 size )
 {
     return kmalloc(size, GFP_KERNEL);
 }
 
-void inline _mali_osk_free( void *ptr )
+__weak void _mali_osk_free( void *ptr )
 {
     kfree(ptr);
 }
 
-void inline *_mali_osk_valloc( u32 size )
+__weak void *_mali_osk_valloc( u32 size )
 {
     return vmalloc(size);
 }
 
-void inline _mali_osk_vfree( void *ptr )
+__weak void _mali_osk_vfree( void *ptr )
 {
     vfree(ptr);
 }
 
-void inline *_mali_osk_memcpy( void *dst, const void *src, u32 len )
+__weak void *_mali_osk_memcpy( void *dst, const void *src, u32 len )
 {
     return memcpy(dst, src, len);
 }
 
-void inline *_mali_osk_memset( void *s, u32 c, u32 n )
+__weak void *_mali_osk_memset( void *s, u32 c, u32 n )
 {
     return memset(s, c, n);
 }
 
-mali_bool _mali_osk_mem_check_allocated( u32 max_allocated )
+__weak mali_bool _mali_osk_mem_check_allocated( u32 max_allocated )
 {
        /* No need to prevent an out-of-memory dialogue appearing on Linux,
         * so we always return MALI_TRUE.
diff --git a/drivers/gpu/mali/mali/linux/mali_osk_misc.c 
b/drivers/gpu/mali/mali/linux/mali_osk_misc.c
index e31aee8..5f481a6 100644
--- a/drivers/gpu/mali/mali/linux/mali_osk_misc.c
+++ b/drivers/gpu/mali/mali/linux/mali_osk_misc.c
@@ -19,7 +19,7 @@
 #include <linux/module.h>
 #include "mali_osk.h"
 
-void _mali_osk_dbgmsg( const char *fmt, ... )
+__weak void _mali_osk_dbgmsg( const char *fmt, ... )
 {
     va_list args;
     va_start(args, fmt);
@@ -27,7 +27,7 @@ void _mali_osk_dbgmsg( const char *fmt, ... )
        va_end(args);
 }
 
-u32 _mali_osk_snprintf( char *buf, u32 size, const char *fmt, ... )
+__weak u32 _mali_osk_snprintf( char *buf, u32 size, const char *fmt, ... )
 {
        int res;
        va_list args;
@@ -39,25 +39,25 @@ u32 _mali_osk_snprintf( char *buf, u32 size, const char 
*fmt, ... )
        return res;
 }
 
-void _mali_osk_abort(void)
+__weak void _mali_osk_abort(void)
 {
        /* make a simple fault by dereferencing a NULL pointer */
        dump_stack();
        *(int *)0 = 0;
 }
 
-void _mali_osk_break(void)
+__weak void _mali_osk_break(void)
 {
        _mali_osk_abort();
 }
 
-u32 _mali_osk_get_pid(void)
+__weak u32 _mali_osk_get_pid(void)
 {
        /* Thread group ID is the process ID on Linux */
        return (u32)current->tgid;
 }
 
-u32 _mali_osk_get_tid(void)
+__weak u32 _mali_osk_get_tid(void)
 {
        /* pid is actually identifying the thread on Linux */
        return (u32)current->pid;
diff --git a/drivers/gpu/mali/ump/linux/ump_kernel_linux.c 
b/drivers/gpu/mali/ump/linux/ump_kernel_linux.c
index 40514fe..899f125 100644
--- a/drivers/gpu/mali/ump/linux/ump_kernel_linux.c
+++ b/drivers/gpu/mali/ump/linux/ump_kernel_linux.c
@@ -377,7 +377,7 @@ static int ump_file_ioctl(struct inode *inode, struct file 
*filp, unsigned int c
        return err;
 }
 
-int map_errcode( _mali_osk_errcode_t err )
+__weak int map_errcode( _mali_osk_errcode_t err )
 {
     switch(err)
     {
-- 
2.4.10

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to