Re: C issues with spinlocks and preemption

From: ludovic fernandez (ludovic.fernandez@sun.com)
Date: Tue Jul 18 2000 - 16:06:48 EST


Funny, I was doing the same thing....
I ran into the same problem and give up trying to make the
preemption functions inline.
The problem is that the structure task is not defined at the
point you declare your function. Defining them after the
declaration of task struct doesn't work either because some
header files need the spinlock definition very early (chicken and
eggs problem).

Note that I'm more or less done making the system preemptable
(I modified the interrupt path for i386 platform and the locking
stubs), but I also gave up trying to make it work on 2.4.XXX because
the SMP locking is not stable yet. Try to compile the kernel in UP with
the locking in debug mode and you'll see.

Ludo.

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

-
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