C issues with spinlocks and preemption

From: George Anzinger (george@pioneer.net)
Date: Tue Jul 18 2000 - 15:50:40 EST


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/



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