在linux内核中的指令{interrupt do_IRQ}是什么意思?

linux内核文件arch / x86 / kernel / entry_64.S中的指令{interrupt do_IRQ}是什么意思? 是中断一个指令还是一个macros? 定义在哪里? 如何使用它 ?

847 common_interrupt: 848 XCPT_FRAME 849 addq $-0x80,(%rsp) /* Adjust vector to [-256,-1] range */ 850 interrupt do_IRQ 851 /* 0(%rsp): old_rsp-ARGOFFSET */ 

它被宣布在以上的一小段距离:

 /* 0(%rsp): ~(interrupt number) */ .macro interrupt func /* reserve pt_regs for scratch regs and rbp */ subq $ORIG_RAX-RBP, %rsp CFI_ADJUST_CFA_OFFSET ORIG_RAX-RBP call save_args PARTIAL_FRAME 0 call \func .endm 

不过,我不知道那是干什么的。 🙂

中断主要用于暂停当前中断的cpu核上运行的所有进程,然后运行生成的中断相关的工作。 中断相关的工作是通过已经注册的处理程序或函数完成的。

中断可能由H / W或S / W产生。 基本上有两种类型的中断:1)软中断和2)硬中断。

所以每当一个特定的中断产生,它的处理程序例程或函数被称为&这个调用是与函数do_IRQ(struct pt_regs * regs) ,这是pt_regs结构类型传递参数相关&它基本上存储寄存器值为…

 struct pt_regs{ unsigned long r0; unsigned long r1; ... ... }; 

&欲了解更多信息,请点击此链接https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html/Realtime_Reference_Guide/chap-Realtime_Reference_Guide-Hardware_interrupts.html