linux/include/linux/preempt.h
<<
>>
Prefs
   1#ifndef __LINUX_PREEMPT_H
   2#define __LINUX_PREEMPT_H
   3
   4/*
   5 * include/linux/preempt.h - macros for accessing and manipulating
   6 * preempt_count (used for kernel preemption, interrupt count, etc.)
   7 */
   8
   9#include <linux/config.h>
  10#include <linux/linkage.h>
  11
  12#ifdef CONFIG_DEBUG_PREEMPT
  13  extern void fastcall add_preempt_count(int val);
  14  extern void fastcall sub_preempt_count(int val);
  15#else
  16# define add_preempt_count(val) do { preempt_count() += (val); } while (0)
  17# define sub_preempt_count(val) do { preempt_count() -= (val); } while (0)
  18#endif
  19
  20#define inc_preempt_count() add_preempt_count(1)
  21#define dec_preempt_count() sub_preempt_count(1)
  22
  23#define preempt_count() (current_thread_info()->preempt_count)
  24
  25#ifdef CONFIG_PREEMPT
  26
  27asmlinkage void preempt_schedule(void);
  28
  29#define preempt_disable() \
  30do { \
  31        inc_preempt_count(); \
  32        barrier(); \
  33} while (0)
  34
  35#define preempt_enable_no_resched() \
  36do { \
  37        barrier(); \
  38        dec_preempt_count(); \
  39} while (0)
  40
  41#define preempt_check_resched() \
  42do { \
  43        if (unlikely(test_thread_flag(TIF_NEED_RESCHED))) \
  44                preempt_schedule(); \
  45} while (0)
  46
  47#define preempt_enable() \
  48do { \
  49        preempt_enable_no_resched(); \
  50        preempt_check_resched(); \
  51} while (0)
  52
  53#else
  54
  55#define preempt_disable()               do { } while (0)
  56#define preempt_enable_no_resched()     do { } while (0)
  57#define preempt_enable()                do { } while (0)
  58#define preempt_check_resched()         do { } while (0)
  59
  60#endif
  61
  62#endif /* __LINUX_PREEMPT_H */
  63
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.