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    [W:0.020 / U:180.896 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site