linux-rdma.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* opensm/complib: redundant redeclaration of functions
@ 2010-02-01 13:05 Yevgeny Kliteynik
       [not found] ` <4B66D189.2090500-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Yevgeny Kliteynik @ 2010-02-01 13:05 UTC (permalink / raw)
  To: Sasha Khapyorsky, Linux RDMA

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?

Any other ideas (I'd go for option 2)?

-- Yevgeny

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: opensm/complib: redundant redeclaration of functions
       [not found] ` <4B66D189.2090500-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
@ 2010-02-01 18:46   ` Jason Gunthorpe
       [not found]     ` <20100201184616.GC25902-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Jason Gunthorpe @ 2010-02-01 18:46 UTC (permalink / raw)
  To: Yevgeny Kliteynik; +Cc: Sasha Khapyorsky, Linux RDMA

On Mon, Feb 01, 2010 at 03:05:13PM +0200, Yevgeny Kliteynik wrote:

> 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?

It looks to me like using 'extern inline' is appropriate here:

extern inline int foo();

[..]

inline int foo()
{
   body
}

If no inline version is defined then the compiler just emits a normal
function call, if an inline version is defined then the compiler might
use it.

Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: opensm/complib: redundant redeclaration of functions
       [not found]     ` <20100201184616.GC25902-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
@ 2010-02-02 13:11       ` Yevgeny Kliteynik
       [not found]         ` <4B68247E.6070405-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
  0 siblings, 1 reply; 4+ messages in thread
From: Yevgeny Kliteynik @ 2010-02-02 13:11 UTC (permalink / raw)
  To: Jason Gunthorpe; +Cc: Sasha Khapyorsky, Linux RDMA

On 01/Feb/10 20:46, Jason Gunthorpe wrote:
> On Mon, Feb 01, 2010 at 03:05:13PM +0200, Yevgeny Kliteynik wrote:
>
>> 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?
>
> It looks to me like using 'extern inline' is appropriate here:
>
> extern inline int foo();
>
> [..]
>
> inline int foo()
> {
>     body
> }
>
> If no inline version is defined then the compiler just emits a normal
> function call, if an inline version is defined then the compiler might
> use it.

Thanks for the idea.
I read some documentation about it, and it does look that
your suggestion should fix the problem, but it didn't :(
Probably because they both are in .h files.

-- Yevgeny
  
> Jason
>

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: opensm/complib: redundant redeclaration of functions
       [not found]         ` <4B68247E.6070405-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
@ 2010-02-02 18:33           ` Jason Gunthorpe
  0 siblings, 0 replies; 4+ messages in thread
From: Jason Gunthorpe @ 2010-02-02 18:33 UTC (permalink / raw)
  To: Yevgeny Kliteynik; +Cc: Sasha Khapyorsky, Linux RDMA

On Tue, Feb 02, 2010 at 03:11:26PM +0200, Yevgeny Kliteynik wrote:
> >If no inline version is defined then the compiler just emits a normal
> >function call, if an inline version is defined then the compiler might
> >use it.
> 
> Thanks for the idea.
> I read some documentation about it, and it does look that
> your suggestion should fix the problem, but it didn't :(

> Probably because they both are in .h files.

No, but they do have to be in the right order.

first header:

extern inline int foo();
inline int foo()
{
    body
}

2nd header:
extern inline int foo();

Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-02-02 18:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-01 13:05 opensm/complib: redundant redeclaration of functions Yevgeny Kliteynik
     [not found] ` <4B66D189.2090500-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2010-02-01 18:46   ` Jason Gunthorpe
     [not found]     ` <20100201184616.GC25902-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2010-02-02 13:11       ` Yevgeny Kliteynik
     [not found]         ` <4B68247E.6070405-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2010-02-02 18:33           ` Jason Gunthorpe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).