patch-2.0.36 linux/include/asm-i386/irq.h
Next file: linux/include/asm-i386/mtrr.h
Previous file: linux/include/asm-i386/bugs.h
Back to the patch index
Back to the overall index
- Lines: 74
- Date:
Sun Nov 15 10:33:15 1998
- Orig file:
v2.0.35/linux/include/asm-i386/irq.h
- Orig date:
Mon Jul 13 13:46:41 1998
diff -u --recursive --new-file v2.0.35/linux/include/asm-i386/irq.h linux/include/asm-i386/irq.h
@@ -108,6 +108,17 @@
"1:\tjmp 1f\n" \
"1:\toutb %al,$0x20\n\t"
+/* do not modify the ISR nor the cache_A1 variable */
+#define MSGACK_SECOND(mask,nr) \
+ "inb $0xA1,%al\n\t" \
+ "jmp 1f\n" \
+ "1:\tjmp 1f\n" \
+ "1:\tmovb $0x20,%al\n\t" \
+ "outb %al,$0xA0\n\t" \
+ "jmp 1f\n" \
+ "1:\tjmp 1f\n" \
+ "1:\toutb %al,$0x20\n\t"
+
#define UNBLK_FIRST(mask) \
"inb $0x21,%al\n\t" \
"jmp 1f\n" \
@@ -162,6 +173,8 @@
"jnc 3f\n\t" \
"cmpb "SYMBOL_NAME_STR(active_kernel_processor)", %al\n\t" \
"je 4f\n\t" \
+ "cmpb "SYMBOL_NAME_STR(boot_cpu_id)", %al\n\t" \
+ "jne 2f\n\t" \
"movb $1, "SYMBOL_NAME_STR(smp_blocked_interrupt_pending)"\n\t" \
"2: " \
SMP_PROF_INT_SPINS \
@@ -190,7 +203,10 @@
"movb %al, "SYMBOL_NAME_STR(active_kernel_processor)"\n\t" \
"4: " \
"incl "SYMBOL_NAME_STR(kernel_counter)"\n\t" \
+ "cmpb "SYMBOL_NAME_STR(boot_cpu_id)", %al\n\t" \
+ "jne 7f\n\t" \
"movb $0, "SYMBOL_NAME_STR(smp_blocked_interrupt_pending)"\n\t" \
+ "7: " \
"popfl\n\t" \
"popl %edx\n\t" \
"popl %ecx\n\t" \
@@ -302,34 +318,14 @@
__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,%ebx\n\t" \
- "pushl %ebx\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)) \
+ MSGACK_##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" \
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov