Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/preemption.h

    r9d58539 r057e77f  
    3636#define KERN_PREEMPTION_H_
    3737
    38 extern void preemption_disable(void);
    39 extern void preemption_enable(void);
     38#include <arch.h>
     39#include <compiler/barrier.h>
     40#include <debug.h>
     41
     42#define PREEMPTION_INC         (1 << 0)
     43#define PREEMPTION_DISABLED    (PREEMPTION_INC <= THE->preemption)
     44#define PREEMPTION_ENABLED     (!PREEMPTION_DISABLED)
     45
     46/** Increment preemption disabled counter. */
     47#define preemption_disable() \
     48        do { \
     49                THE->preemption += PREEMPTION_INC; \
     50                compiler_barrier(); \
     51        } while (0)
     52
     53/** Restores preemption but never reschedules. */
     54#define preemption_enable() \
     55        do { \
     56                ASSERT(PREEMPTION_DISABLED); \
     57                compiler_barrier(); \
     58                THE->preemption -= PREEMPTION_INC; \
     59        } while (0)
     60
    4061
    4162#endif
Note: See TracChangeset for help on using the changeset viewer.