1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License.  See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1997, 1998, 1999, 2000, 2001 Ralf Baechle
7 * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
8 * Copyright (C) 1999, 2001 MIPS Technologies, Inc.
9 */
10#ifndef _ASM_SOFTIRQ_H
11#define _ASM_SOFTIRQ_H
12
13#include <asm/atomic.h>
14#include <asm/hardirq.h>
15
16static inline void cpu_bh_disable(int cpu)
17{
18	local_bh_count(cpu)++;
19	barrier();
20}
21
22static inline void __cpu_bh_enable(int cpu)
23{
24	barrier();
25	local_bh_count(cpu)--;
26}
27
28
29#define local_bh_disable()	cpu_bh_disable(smp_processor_id())
30#define __local_bh_enable()	__cpu_bh_enable(smp_processor_id())
31#define local_bh_enable()					\
32do {								\
33	int cpu;						\
34								\
35	barrier();						\
36	cpu = smp_processor_id();				\
37	if (!--local_bh_count(cpu) && softirq_pending(cpu))	\
38		do_softirq();					\
39} while (0)
40
41#define in_softirq() (local_bh_count(smp_processor_id()) != 0)
42
43#endif /* _ASM_SOFTIRQ_H */
44