[ Pobierz całość w formacie PDF ]
.*/#define BUILD_MSGIRQ(chip,nr,mask) \asmlinkage void IRQ_NAME(nr); \asmlinkage void FAST_IRQ_NAME(nr); \asmlinkage void BAD_IRQ_NAME(nr); \__asm__( \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(IRQ) #nr "_interrupt:\n\t" \"pushl $-"#nr"-2\n\t" \SAVE_ALL \ENTER_KERNEL \ACK_##chip(mask,(nr&7)) \"incl "SYMBOL_NAME_STR(intr_count)"\n\t"\"sti\n\t" \"movl %esp,%eax\n\t" \"pushl %eax\n\t" \"pushl $" #nr "\n\t" \"call "SYMBOL_NAME_STR(do_IRQ)"\n\t" \"addl $8,%esp\n\t" \"cli\n\t" \UNBLK_##chip(mask) \GET_PROCESSOR_ID \"btrl $" STR(SMP_FROM_INT) ","SYMBOL_NAME_STR(smp_proc_in_lock)"(,%eax,4)\n\t" \"decl "SYMBOL_NAME_STR(intr_count)"\n\t" \"incl "SYMBOL_NAME_STR(syscall_count)"\n\t" \"jmp ret_from_sys_call\n" \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(fast_IRQ) #nr "_interrupt:\n\t" \SAVE_MOST \ACK_##chip(mask,(nr&7)) \SMP_PROF_IPI_CNT \"pushl $" #nr "\n\t" \"call "SYMBOL_NAME_STR(do_fast_IRQ)"\n\t" \"addl $4,%esp\n\t" \"cli\n\t" \UNBLK_##chip(mask) \RESTORE_MOST \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(bad_IRQ) #nr "_interrupt:\n\t" \SAVE_MOST \ACK_##chip(mask,(nr&7)) \RESTORE_MOST);#define BUILD_RESCHEDIRQ(nr) \asmlinkage void IRQ_NAME(nr); \__asm__( \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(IRQ) #nr "_interrupt:\n\t" \"pushl $-"#nr"-2\n\t" \SAVE_ALL \ENTER_KERNEL \"incl "SYMBOL_NAME_STR(intr_count)"\n\t"\"sti\n\t" \"movl %esp,%eax\n\t" \"pushl %eax\n\t" \"pushl $" #nr "\n\t" \"call "SYMBOL_NAME_STR(smp_reschedule_irq)"\n\t" \"addl $8,%esp\n\t" \"cli\n\t" \"decl "SYMBOL_NAME_STR(intr_count)"\n\t" \"incl "SYMBOL_NAME_STR(syscall_count)"\n\t" \"jmp ret_from_sys_call\n");#else#define BUILD_IRQ(chip,nr,mask) \asmlinkage void IRQ_NAME(nr); \asmlinkage void FAST_IRQ_NAME(nr); \asmlinkage void BAD_IRQ_NAME(nr); \__asm__( \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(IRQ) #nr "_interrupt:\n\t" \"pushl $-"#nr"-2\n\t" \SAVE_ALL \ACK_##chip(mask,(nr&7)) \"incl "SYMBOL_NAME_STR(intr_count)"\n\t"\"sti\n\t" \"movl %esp,%eax\n\t" \"pushl %eax\n\t" \"pushl $" #nr "\n\t" \"call "SYMBOL_NAME_STR(do_IRQ)"\n\t" \"addl $8,%esp\n\t" \"cli\n\t" \UNBLK_##chip(mask) \"decl "SYMBOL_NAME_STR(intr_count)"\n\t" \GET_CURRENT \"jmp ret_from_sys_call\n" \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(fast_IRQ) #nr "_interrupt:\n\t" \SAVE_MOST \ACK_##chip(mask,(nr&7)) \"incl "SYMBOL_NAME_STR(intr_count)"\n\t" \"pushl $" #nr "\n\t" \"call "SYMBOL_NAME_STR(do_fast_IRQ)"\n\t" \"addl $4,%esp\n\t" \"cli\n\t" \UNBLK_##chip(mask) \"decl "SYMBOL_NAME_STR(intr_count)"\n\t" \RESTORE_MOST \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(bad_IRQ) #nr "_interrupt:\n\t" \SAVE_MOST \ACK_##chip(mask,(nr&7)) \RESTORE_MOST);#define BUILD_TIMER_IRQ(chip,nr,mask) \asmlinkage void IRQ_NAME(nr); \asmlinkage void FAST_IRQ_NAME(nr); \asmlinkage void BAD_IRQ_NAME(nr); \__asm__( \"\n"__ALIGN_STR"\n" \SYMBOL_NAME_STR(fast_IRQ) #nr "_interrupt:\n\t" \SYMBOL_NAME_STR(bad_IRQ) #nr "_interrupt:\n\t" \SYMBOL_NAME_STR(IRQ) #nr "_interrupt:\n\t" \"pushl $-"#nr"-2\n\t" \SAVE_ALL \ACK_##chip(mask,(nr&7)) \"incl "SYMBOL_NAME_STR(intr_count)"\n\t"\"movl %esp,%eax\n\t" \"pushl %eax\n\t" \"pushl $" #nr "\n\t" \"call "SYMBOL_NAME_STR(do_IRQ)"\n\t" \"addl $8,%esp\n\t" \"cli\n\t" \UNBLK_##chip(mask) \"decl "SYMBOL_NAME_STR(intr_count)"\n\t" \GET_CURRENT \"jmp ret_from_sys_call\n");#endif#endif
[ Pobierz całość w formacie PDF ]