lkml.org 
[lkml]   [2000]   [Jul]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: C issues with spinlocks and preemption
George Anzinger wrote:
>
> In the persuit of trying to use spinlocks macros for UP preemption I
> have come up with an interesting C problem and the way header files are
> being coded in the kernel. In particular:
>
> #include <linux/sched.h>
> #include <asm/current.h>
>
> static inline int foo(void)
> {
> int bar;
>
> bar = current->need_resched;
> return bar;
> }
>
> Works fine as a .c file, but if it is in a header file that is included
> by sched.h (such as tty.h) or indirectly included by sched.h (such as
> tqueue.h) cc complains about an incomplete type on the "current"
> reference.
>
> The problem is that sched.h, in such a case, actually has its body
> included after the above code and thus all cc has is a promise (i.e.
> struct task_struct;) and not the real task_struct. It appears that cc
> is compiling the "inline" function when it sees it, not when it is
> referenced.
>
> This is proving to be a tough nut to crack. Any thoughts?
>
> George
>

This is the same situation that has broken 3DNow!+SMP all
through the -testx series.

I fix that here by moving the offending inline functions
into mmx.c, and declaring them 'extern inline' in mmx.h.
That cleans up asm/string.h pretty well.

A header cleanup would be better.

Tom

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:57    [from the cache]
©2003-2011 Jasper Spaans