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