|
XenevaOS
|
#include <linux/linkage.h>#include <linux/cleanup.h>#include <linux/types.h>#include <asm/preempt.h>

Go to the source code of this file.
Functions | |
| DEFINE_LOCK_GUARD_0 (preempt, preempt_disable(), preempt_enable()) DEFINE_LOCK_GUARD_0(preempt_notrace | |
| const char * | preempt_model_str (void) |
| #define __IRQ_MASK | ( | x | ) | ((1UL << (x))-1) |
| #define __preempt_count_dec | ( | ) | __preempt_count_sub(1) |
| #define __preempt_count_inc | ( | ) | __preempt_count_add(1) |
| #define FORK_PREEMPT_COUNT (2*PREEMPT_DISABLE_OFFSET + PREEMPT_ENABLED) |
| #define HARDIRQ_BITS 4 |
| #define hardirq_count | ( | ) | (preempt_count() & HARDIRQ_MASK) |
| #define HARDIRQ_MASK (__IRQ_MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT) |
| #define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) |
| #define HARDIRQ_SHIFT (SOFTIRQ_SHIFT + SOFTIRQ_BITS) |
| #define in_atomic | ( | ) | (preempt_count() != 0) |
| #define in_atomic_preempt_off | ( | ) | (preempt_count() != PREEMPT_DISABLE_OFFSET) |
| #define in_hardirq | ( | ) | (hardirq_count()) |
| #define in_interrupt | ( | ) | (irq_count()) |
| #define in_nmi | ( | ) | (nmi_count()) |
| #define in_serving_softirq | ( | ) | (softirq_count() & SOFTIRQ_OFFSET) |
| #define in_softirq | ( | ) | (softirq_count()) |
| #define in_task | ( | ) | (!(preempt_count() & (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_OFFSET))) |
| #define INIT_PREEMPT_COUNT PREEMPT_OFFSET |
| #define irq_count | ( | ) | (preempt_count() & (NMI_MASK | HARDIRQ_MASK | SOFTIRQ_MASK)) |
| #define NMI_BITS 4 |
| #define nmi_count | ( | ) | (preempt_count() & NMI_MASK) |
| #define NMI_MASK (__IRQ_MASK(NMI_BITS) << NMI_SHIFT) |
| #define NMI_SHIFT (HARDIRQ_SHIFT + HARDIRQ_BITS) |
| #define PREEMPT_BITS 8 |
| #define preempt_check_resched | ( | ) | do { } while (0) |
| #define preempt_count_add | ( | val | ) | __preempt_count_add(val) |
| #define preempt_count_dec | ( | ) | preempt_count_sub(1) |
| #define preempt_count_dec_and_test | ( | ) | __preempt_count_dec_and_test() |
| #define preempt_count_inc | ( | ) | preempt_count_add(1) |
| #define preempt_count_sub | ( | val | ) | __preempt_count_sub(val) |
| #define preempt_disable | ( | ) | barrier() |
| #define preempt_disable_nested | ( | ) |
preempt_disable_nested - Disable preemption inside a normally preempt disabled section
Use for code which requires preemption protection inside a critical section which has preemption disabled implicitly on non-PREEMPT_RT enabled kernels, by e.g.:
On PREEMPT_RT enabled kernels spinlock/rwlock held sections, soft interrupt context and regular interrupt handlers are preemptible and only prevent migration. preempt_disable_nested() ensures that preemption is disabled for cases which require CPU local serialization even on PREEMPT_RT. For non-PREEMPT_RT kernels this is a NOP.
The use cases are code sequences which are not serialized by a particular lock instance, e.g.:
| preempt_disable_notrace | ( | ) | barrier() |
| #define PREEMPT_DISABLE_OFFSET 0 |
| #define PREEMPT_DISABLED (PREEMPT_DISABLE_OFFSET + PREEMPT_ENABLED) |
| #define preempt_enable | ( | ) | barrier() |
| #define preempt_enable_no_resched | ( | ) | barrier() |
| #define preempt_enable_no_resched_notrace | ( | ) | barrier() |
| preempt_enable_notrace | ( | ) | barrier() |
| #define preempt_fold_need_resched | ( | ) |
| #define PREEMPT_LOCK_OFFSET PREEMPT_DISABLE_OFFSET |
| #define PREEMPT_MASK (__IRQ_MASK(PREEMPT_BITS) << PREEMPT_SHIFT) |
| #define PREEMPT_OFFSET (1UL << PREEMPT_SHIFT) |
| #define preempt_set_need_resched | ( | ) |
| #define PREEMPT_SHIFT 0 |
| #define preemptible | ( | ) | 0 |
| #define sched_preempt_enable_no_resched | ( | ) | barrier() |
| #define SOFTIRQ_BITS 8 |
| #define softirq_count | ( | ) | (preempt_count() & SOFTIRQ_MASK) |
| #define SOFTIRQ_DISABLE_OFFSET (2 * SOFTIRQ_OFFSET) |
| #define SOFTIRQ_LOCK_OFFSET (SOFTIRQ_DISABLE_OFFSET + PREEMPT_LOCK_OFFSET) |
| #define SOFTIRQ_MASK (__IRQ_MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT) |
| #define SOFTIRQ_OFFSET (1UL << SOFTIRQ_SHIFT) |
| #define SOFTIRQ_SHIFT (PREEMPT_SHIFT + PREEMPT_BITS) |
| DEFINE_LOCK_GUARD_0 | ( | preempt | , |
| preempt_disable() | , | ||
| preempt_enable() | |||
| ) |
|
extern |