Hi Sasha,

There are couple of places in complib headers that cause
compiler to complain:

    cl_atomic.h:73: warning: redundant redeclaration of 'cl_atomic_inc'
    cl_atomic_osd.h:58: warning: previous definition of 'cl_atomic_inc' was here

    cl_atomic.h:104: warning: redundant redeclaration of 'cl_atomic_dec'
    cl_atomic_osd.h:69: warning: previous definition of 'cl_atomic_dec' was here

    cl_atomic.h:136: warning: redundant redeclaration of 'cl_atomic_add'
    cl_atomic_osd.h:81: warning: previous definition of 'cl_atomic_add' was here

    cl_atomic.h:171: warning: redundant redeclaration of 'cl_atomic_sub'
    cl_atomic_osd.h:93: warning: previous definition of 'cl_atomic_sub' was here

    cl_thread.h:346: warning: redundant redeclaration of 'cl_is_blockable'
    cl_thread_osd.h:63: warning: previous definition of 'cl_is_blockable' was 
here

In general, here's the problem:

We have cl_file.h and cl_file_osd.h.
cl_file.h has include directive for cl_file_osd.h
cl_file.h has the following definition of function:
    int foo();

cl_file_osd.h has another function definition, but
this time it also has implementation:
    static inline int foo() { ..... }

Any preferable way to fix this?

Get rid of the _osd.h files and have the functions
implementation included in the usual .h file?

Define some *_HAVE_OSD flag in the _osd.h file
and enclose function declaration in the usual .h
file with #ifndef?

The following patch implements option 2.

This patch is also kind of an RFC, so let
me what you think. Any other ideas?

Signed-off-by: Yevgeny Kliteynik <[email protected]>
---
 opensm/include/complib/cl_atomic.h     |    8 ++++++++
 opensm/include/complib/cl_atomic_osd.h |    4 ++++
 opensm/include/complib/cl_thread.h     |    2 ++
 opensm/include/complib/cl_thread_osd.h |    1 +
 4 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/opensm/include/complib/cl_atomic.h 
b/opensm/include/complib/cl_atomic.h
index 92620ee..7e343d7 100644
--- a/opensm/include/complib/cl_atomic.h
+++ b/opensm/include/complib/cl_atomic.h
@@ -70,7 +70,9 @@ BEGIN_C_DECLS
 *
 * SYNOPSIS
 */
+#ifndef _OSD_CL_ATOMIC_INC
 int32_t cl_atomic_inc(IN atomic32_t * const p_value);
+#endif
 /*
 * PARAMETERS
 *      p_value
@@ -101,7 +103,9 @@ int32_t cl_atomic_inc(IN atomic32_t * const p_value);
 *
 * SYNOPSIS
 */
+#ifndef _OSD_CL_ATOMIC_DEC
 int32_t cl_atomic_dec(IN atomic32_t * const p_value);
+#endif
 /*
 * PARAMETERS
 *      p_value
@@ -132,8 +136,10 @@ int32_t cl_atomic_dec(IN atomic32_t * const p_value);
 *
 * SYNOPSIS
 */
+#ifndef _OSD_CL_ATOMIC_ADD
 int32_t
 cl_atomic_add(IN atomic32_t * const p_value, IN const int32_t increment);
+#endif
 /*
 * PARAMETERS
 *      p_value
@@ -167,8 +173,10 @@ cl_atomic_add(IN atomic32_t * const p_value, IN const 
int32_t increment);
 *
 * SYNOPSIS
 */
+#ifndef _OSD_CL_ATOMIC_SUB
 int32_t
 cl_atomic_sub(IN atomic32_t * const p_value, IN const int32_t decrement);
+#endif
 /*
 * PARAMETERS
 *      p_value
diff --git a/opensm/include/complib/cl_atomic_osd.h 
b/opensm/include/complib/cl_atomic_osd.h
index ac14f8a..43d1b77 100644
--- a/opensm/include/complib/cl_atomic_osd.h
+++ b/opensm/include/complib/cl_atomic_osd.h
@@ -54,6 +54,7 @@

 BEGIN_C_DECLS extern cl_spinlock_t cl_atomic_spinlock;

+#define _OSD_CL_ATOMIC_INC
 static inline int32_t cl_atomic_inc(IN atomic32_t * const p_value)
 {
        int32_t new_val;
@@ -65,6 +66,7 @@ static inline int32_t cl_atomic_inc(IN atomic32_t * const 
p_value)
        return (new_val);
 }

+#define _OSD_CL_ATOMIC_DEC
 static inline int32_t cl_atomic_dec(IN atomic32_t * const p_value)
 {
        int32_t new_val;
@@ -76,6 +78,7 @@ static inline int32_t cl_atomic_dec(IN atomic32_t * const 
p_value)
        return (new_val);
 }

+#define _OSD_CL_ATOMIC_ADD
 static inline int32_t
 cl_atomic_add(IN atomic32_t * const p_value, IN const int32_t increment)
 {
@@ -88,6 +91,7 @@ cl_atomic_add(IN atomic32_t * const p_value, IN const int32_t 
increment)
        return (new_val);
 }

+#define _OSD_CL_ATOMIC_SUB
 static inline int32_t
 cl_atomic_sub(IN atomic32_t * const p_value, IN const int32_t decrement)
 {
diff --git a/opensm/include/complib/cl_thread.h 
b/opensm/include/complib/cl_thread.h
index 0a622a1..b7ee1ca 100644
--- a/opensm/include/complib/cl_thread.h
+++ b/opensm/include/complib/cl_thread.h
@@ -343,7 +343,9 @@ boolean_t cl_is_current_thread(IN const cl_thread_t * const 
p_thread);
 *
 * SYNOPSIS
 */
+#ifndef _OSD_CL_IS_BLOCKABLE
 boolean_t cl_is_blockable(void);
+#endif
 /*
 * RETURN VALUE
 *      TRUE
diff --git a/opensm/include/complib/cl_thread_osd.h 
b/opensm/include/complib/cl_thread_osd.h
index ad7df90..50fb6f7 100644
--- a/opensm/include/complib/cl_thread_osd.h
+++ b/opensm/include/complib/cl_thread_osd.h
@@ -59,6 +59,7 @@ typedef struct _cl_thread_osd_t {
        cl_state_t state;
 } cl_thread_osd_t;

+#define _OSD_CL_IS_BLOCKABLE
 static inline boolean_t cl_is_blockable(void)
 {
        return TRUE;
-- 
1.5.1.4


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to