⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 softirq.h

📁 基于组件方式开发操作系统的OSKIT源代码
💻 H
字号:
#ifndef __ASM_SOFTIRQ_H#define __ASM_SOFTIRQ_H#include <asm/atomic.h>#include <asm/hardirq.h>extern unsigned int local_bh_count[NR_CPUS];#define in_bh()			(local_bh_count[smp_processor_id()] != 0)#define get_active_bhs()	(bh_mask & bh_active)#define clear_active_bhs(x)	atomic_clear_mask((int)(x),&bh_active)extern inline void init_bh(int nr, void (*routine)(void)){	bh_base[nr] = routine;	atomic_set(&bh_mask_count[nr], 0);	bh_mask |= 1 << nr;}extern inline void remove_bh(int nr){	bh_base[nr] = NULL;	bh_mask &= ~(1 << nr);}extern inline void mark_bh(int nr){	set_bit(nr, &bh_active);}#ifdef __SMP__#error SMP not supported#elseextern inline void start_bh_atomic(void){	local_bh_count[smp_processor_id()]++;	barrier();}extern inline void end_bh_atomic(void){	barrier();	local_bh_count[smp_processor_id()]--;}/* These are for the irq's testing the lock */#define softirq_trylock(cpu)	(in_bh() ? 0 : (local_bh_count[smp_processor_id()]=1))#define softirq_endlock(cpu)	(local_bh_count[smp_processor_id()] = 0)#define synchronize_bh()	do { } while (0)#endif	/* SMP *//* * These use a mask count to correctly handle * nested disable/enable calls */extern inline void disable_bh(int nr){	bh_mask &= ~(1 << nr);	atomic_inc(&bh_mask_count[nr]);	synchronize_bh();}extern inline void enable_bh(int nr){	if (atomic_dec_and_test(&bh_mask_count[nr]))		bh_mask |= 1 << nr;}#endif	/* __ASM_SOFTIRQ_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -