Re: C issues with spinlocks and preemption

From: Tom Leete (tleete@mountain.net)
Date: Tue Jul 18 2000 - 19:59:45 EST


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/



This archive was generated by hypermail 2b29 : Sun Jul 23 2000 - 21:00:11 EST