diff options
| author | Ingo Molnar <mingo@kernel.org> | 2020-08-06 10:16:38 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2020-08-06 10:16:38 +0200 | 
| commit | a703f3633ff1d982bc4adfe7e0921bedb1701216 (patch) | |
| tree | eb85b29a0bbcb29045e197ab77e18ffc8649a722 /include/linux/hardirq.h | |
| parent | a7ef9b28aa8d72a1656fa6f0a01bbd1493886317 (diff) | |
| parent | b5e6a027bd327daa679ca55182a920659e2cbb90 (diff) | |
Merge branch 'WIP.locking/seqlocks' into locking/urgent
Pick up the full seqlock series PeterZ is working on.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/linux/hardirq.h')
| -rw-r--r-- | include/linux/hardirq.h | 28 | 
1 files changed, 19 insertions, 9 deletions
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index 03c9fece7d43..754f67ac4326 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h @@ -111,32 +111,42 @@ extern void rcu_nmi_exit(void);  /*   * nmi_enter() can nest up to 15 times; see NMI_BITS.   */ -#define nmi_enter()						\ +#define __nmi_enter()						\  	do {							\ +		lockdep_off();					\  		arch_nmi_enter();				\  		printk_nmi_enter();				\ -		lockdep_off();					\  		BUG_ON(in_nmi() == NMI_MASK);			\  		__preempt_count_add(NMI_OFFSET + HARDIRQ_OFFSET);	\ -		rcu_nmi_enter();				\ +	} while (0) + +#define nmi_enter()						\ +	do {							\ +		__nmi_enter();					\  		lockdep_hardirq_enter();			\ +		rcu_nmi_enter();				\  		instrumentation_begin();			\  		ftrace_nmi_enter();				\  		instrumentation_end();				\  	} while (0) +#define __nmi_exit()						\ +	do {							\ +		BUG_ON(!in_nmi());				\ +		__preempt_count_sub(NMI_OFFSET + HARDIRQ_OFFSET);	\ +		printk_nmi_exit();				\ +		arch_nmi_exit();				\ +		lockdep_on();					\ +	} while (0) +  #define nmi_exit()						\  	do {							\  		instrumentation_begin();			\  		ftrace_nmi_exit();				\  		instrumentation_end();				\ -		lockdep_hardirq_exit();				\  		rcu_nmi_exit();					\ -		BUG_ON(!in_nmi());				\ -		__preempt_count_sub(NMI_OFFSET + HARDIRQ_OFFSET);	\ -		lockdep_on();					\ -		printk_nmi_exit();				\ -		arch_nmi_exit();				\ +		lockdep_hardirq_exit();				\ +		__nmi_exit();					\  	} while (0)  #endif /* LINUX_HARDIRQ_H */  | 
