patch-2.3.45 linux/arch/ia64/kernel/entry.S
Next file: linux/arch/ia64/kernel/gate.S
Previous file: linux/arch/ia64/kernel/efi.c
Back to the patch index
Back to the overall index
- Lines: 61
- Date:
Sun Feb 13 10:30:38 2000
- Orig file:
v2.3.44/linux/arch/ia64/kernel/entry.S
- Orig date:
Thu Feb 10 17:11:03 2000
diff -u --recursive --new-file v2.3.44/linux/arch/ia64/kernel/entry.S linux/arch/ia64/kernel/entry.S
@@ -496,18 +496,27 @@
(p7) br.cond.spnt.few handle_syscall_error // handle potential syscall failure
ia64_leave_kernel:
- // check & deliver software interrupts (bottom half handlers):
+ // check & deliver software interrupts:
- movl r2=bh_active // sheesh, why aren't these two in
- movl r3=bh_mask // a struct??
+#ifdef CONFIG_SMP
+ adds r2=IA64_TASK_PROCESSOR_OFFSET,r13
+ movl r3=softirq_state
;;
- ld8 r2=[r2]
- ld8 r3=[r3]
+ ld4 r2=[r2]
+ ;;
+ shladd r3=r2,3,r3
+#else
+ movl r3=softirq_state
+#endif
+ ;;
+ ld8 r2=[r3] // r3 is guaranteed to be 8-byte aligned!
+ ;;
+ shr r3=r2,32
;;
and r2=r2,r3
;;
- cmp.ne p6,p7=r2,r0 // any soft interrupts ready for delivery?
-(p6) br.call.dpnt.few rp=invoke_do_bottom_half
+ cmp4.ne p6,p7=r2,r0
+(p6) br.call.spnt.many rp=invoke_do_softirq
1:
(pKern) br.cond.dpnt.many restore_all // yup -> skip check for rescheduling & signal delivery
@@ -751,20 +760,20 @@
#endif /* CONFIG_SMP */
/*
- * Invoke do_bottom_half() while preserving in0-in7, which may be needed
+ * Invoke do_softirq() while preserving in0-in7, which may be needed
* in case a system call gets restarted.
*/
- .proc invoke_do_bottom_half
-invoke_do_bottom_half:
+ .proc invoke_do_softirq
+invoke_do_softirq:
alloc loc0=ar.pfs,8,2,0,0
mov loc1=rp
;;
- br.call.sptk.few rp=do_bottom_half
+ br.call.sptk.few rp=do_softirq
.ret9:
mov ar.pfs=loc0
mov rp=loc1
br.ret.sptk.many rp
- .endp invoke_do_bottom_half
+ .endp invoke_do_softirq
/*
* Invoke schedule() while preserving in0-in7, which may be needed
FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen (who was at: [email protected])