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

📄 hardirq.h

📁 xen虚拟机源代码安装包
💻 H
字号:
#ifndef LINUX_HARDIRQ_H#define LINUX_HARDIRQ_H#include <linux/config.h>#include <linux/preempt.h>#include <linux/smp_lock.h>#include <asm/hardirq.h>#include <asm/system.h>/* * We put the hardirq and softirq counter into the preemption * counter. The bitmask has the following meaning: * * - bits 0-7 are the preemption count (max preemption depth: 256) * - bits 8-15 are the softirq count (max # of softirqs: 256) * * The hardirq count can be overridden per architecture, the default is: * * - bits 16-27 are the hardirq count (max # of hardirqs: 4096) * - ( bit 28 is the PREEMPT_ACTIVE flag. ) * * PREEMPT_MASK: 0x000000ff * SOFTIRQ_MASK: 0x0000ff00 * HARDIRQ_MASK: 0x0fff0000 */#define PREEMPT_BITS	8#define SOFTIRQ_BITS	8#ifndef HARDIRQ_BITS#define HARDIRQ_BITS	12/* * The hardirq mask has to be large enough to have space for potentially * all IRQ sources in the system nesting on a single CPU. */#if (1 << HARDIRQ_BITS) < NR_IRQS# error HARDIRQ_BITS is too low!#endif#endif#define PREEMPT_SHIFT	0#define SOFTIRQ_SHIFT	(PREEMPT_SHIFT + PREEMPT_BITS)#define HARDIRQ_SHIFT	(SOFTIRQ_SHIFT + SOFTIRQ_BITS)#define __IRQ_MASK(x)	((1UL << (x))-1)#define PREEMPT_MASK	(__IRQ_MASK(PREEMPT_BITS) << PREEMPT_SHIFT)#define SOFTIRQ_MASK	(__IRQ_MASK(SOFTIRQ_BITS) << SOFTIRQ_SHIFT)#define HARDIRQ_MASK	(__IRQ_MASK(HARDIRQ_BITS) << HARDIRQ_SHIFT)#define PREEMPT_OFFSET	(1UL << PREEMPT_SHIFT)#define SOFTIRQ_OFFSET	(1UL << SOFTIRQ_SHIFT)#define HARDIRQ_OFFSET	(1UL << HARDIRQ_SHIFT)#if PREEMPT_ACTIVE < (1 << (HARDIRQ_SHIFT + HARDIRQ_BITS))#ifndef XEN#error PREEMPT_ACTIVE is too low!#endif#endif#define hardirq_count()	(preempt_count() & HARDIRQ_MASK)#define softirq_count()	(preempt_count() & SOFTIRQ_MASK)#define irq_count()	(preempt_count() & (HARDIRQ_MASK | SOFTIRQ_MASK))/* * Are we doing bottom half or hardware interrupt processing? * Are we in a softirq context? Interrupt context? */#define in_irq()		(hardirq_count())#define in_softirq()		(softirq_count())#define in_interrupt()		(irq_count())#if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL)# define in_atomic()	((preempt_count() & ~PREEMPT_ACTIVE) != kernel_locked())#else# define in_atomic()	((preempt_count() & ~PREEMPT_ACTIVE) != 0)#endif#ifdef CONFIG_PREEMPT# define preemptible()	(preempt_count() == 0 && !irqs_disabled())# define IRQ_EXIT_OFFSET (HARDIRQ_OFFSET-1)#else# define preemptible()	0# define IRQ_EXIT_OFFSET HARDIRQ_OFFSET#endif#ifdef CONFIG_SMPextern void synchronize_irq(unsigned int irq);#else# define synchronize_irq(irq)	barrier()#endif#define nmi_enter()		irq_enter()#define nmi_exit()		sub_preempt_count(HARDIRQ_OFFSET)#ifndef CONFIG_VIRT_CPU_ACCOUNTINGstatic inline void account_user_vtime(struct task_struct *tsk){}static inline void account_system_vtime(struct task_struct *tsk){}#endif#define irq_enter()					\	do {						\		account_system_vtime(current);		\		add_preempt_count(HARDIRQ_OFFSET);	\	} while (0)extern void irq_exit(void);#endif /* LINUX_HARDIRQ_H */

⌨️ 快捷键说明

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