[lkml]   [2000]   [Jul]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
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.


To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
Please read the FAQ at

 \ /
  Last update: 2005-03-22 13:57    [W:0.148 / U:6.724 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site