aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/hardirq.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/hardirq.h')
-rw-r--r--include/linux/hardirq.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h
index d5b387669dab..8a389b608ce3 100644
--- a/include/linux/hardirq.h
+++ b/include/linux/hardirq.h
@@ -8,7 +8,6 @@
8#include <linux/lockdep.h> 8#include <linux/lockdep.h>
9#include <linux/ftrace_irq.h> 9#include <linux/ftrace_irq.h>
10#include <asm/hardirq.h> 10#include <asm/hardirq.h>
11#include <asm/system.h>
12 11
13/* 12/*
14 * We put the hardirq and softirq counter into the preemption 13 * We put the hardirq and softirq counter into the preemption
@@ -64,6 +63,8 @@
64#define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT) 63#define HARDIRQ_OFFSET (1UL << HARDIRQ_SHIFT)
65#define NMI_OFFSET (1UL << NMI_SHIFT) 64#define NMI_OFFSET (1UL << NMI_SHIFT)
66 65
66#define SOFTIRQ_DISABLE_OFFSET (2 * SOFTIRQ_OFFSET)
67
67#ifndef PREEMPT_ACTIVE 68#ifndef PREEMPT_ACTIVE
68#define PREEMPT_ACTIVE_BITS 1 69#define PREEMPT_ACTIVE_BITS 1
69#define PREEMPT_ACTIVE_SHIFT (NMI_SHIFT + NMI_BITS) 70#define PREEMPT_ACTIVE_SHIFT (NMI_SHIFT + NMI_BITS)
@@ -82,10 +83,13 @@
82/* 83/*
83 * Are we doing bottom half or hardware interrupt processing? 84 * Are we doing bottom half or hardware interrupt processing?
84 * Are we in a softirq context? Interrupt context? 85 * Are we in a softirq context? Interrupt context?
86 * in_softirq - Are we currently processing softirq or have bh disabled?
87 * in_serving_softirq - Are we currently processing softirq?
85 */ 88 */
86#define in_irq() (hardirq_count()) 89#define in_irq() (hardirq_count())
87#define in_softirq() (softirq_count()) 90#define in_softirq() (softirq_count())
88#define in_interrupt() (irq_count()) 91#define in_interrupt() (irq_count())
92#define in_serving_softirq() (softirq_count() & SOFTIRQ_OFFSET)
89 93
90/* 94/*
91 * Are we in NMI context? 95 * Are we in NMI context?
@@ -132,14 +136,16 @@ extern void synchronize_irq(unsigned int irq);
132 136
133struct task_struct; 137struct task_struct;
134 138
135#ifndef CONFIG_VIRT_CPU_ACCOUNTING 139#if !defined(CONFIG_VIRT_CPU_ACCOUNTING) && !defined(CONFIG_IRQ_TIME_ACCOUNTING)
136static inline void account_system_vtime(struct task_struct *tsk) 140static inline void account_system_vtime(struct task_struct *tsk)
137{ 141{
138} 142}
143#else
144extern void account_system_vtime(struct task_struct *tsk);
139#endif 145#endif
140 146
141#if defined(CONFIG_NO_HZ) 147#if defined(CONFIG_NO_HZ)
142#if defined(CONFIG_TINY_RCU) 148#if defined(CONFIG_TINY_RCU) || defined(CONFIG_TINY_PREEMPT_RCU)
143extern void rcu_enter_nohz(void); 149extern void rcu_enter_nohz(void);
144extern void rcu_exit_nohz(void); 150extern void rcu_exit_nohz(void);
145 151