|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] Do_softirq is invoked at the path of ia64_leave_kernel i
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID a0e7daa2df33b0b60a5de113e5b4f8eb731866eb
# Parent 4ee359893af453aaaf4fd2e49fef3f134cc54c74
Do_softirq is invoked at the path of ia64_leave_kernel instead of
being invoking in function irq_exit, which is aligned with XEN/X86 and
avoids __enter_schedule being reentered.
Signed-off-by Anthony Xu <anthony.xu@xxxxxxxxx>
diff -r 4ee359893af4 -r a0e7daa2df33 xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S Thu Feb 9 15:03:17 2006
+++ b/xen/arch/ia64/linux-xen/entry.S Thu Feb 9 15:09:00 2006
@@ -895,6 +895,10 @@
#endif
.work_processed_kernel:
#ifdef XEN
+(pUStk) ssm psr.i
+(pUStk) br.call.sptk.many b0=process_soft_irq
+(pUStk) rsm psr.i
+ ;;
alloc loc0=ar.pfs,0,1,1,0
adds out0=16,r12
adds r7 = PT(EML_UNAT)+16,r12
@@ -907,7 +911,7 @@
(p8) br.sptk.few leave_kernel_self
;;
#endif
-(p6) br.call.sptk.many b0=deliver_pending_interrupt
+(pUStk) br.call.sptk.many b0=deliver_pending_interrupt
;;
mov ar.pfs=loc0
mov ar.unat=r7 /* load eml_unat */
diff -r 4ee359893af4 -r a0e7daa2df33 xen/arch/ia64/xen/xenirq.c
--- a/xen/arch/ia64/xen/xenirq.c Thu Feb 9 15:03:17 2006
+++ b/xen/arch/ia64/xen/xenirq.c Thu Feb 9 15:09:00 2006
@@ -61,16 +61,20 @@
*/
void xen_irq_exit(struct pt_regs *regs)
{
- //account_system_vtime(current);
sub_preempt_count(IRQ_EXIT_OFFSET);
- if((((char *)regs) -(char *) current) !=
(IA64_STK_OFFSET-IA64_PT_REGS_SIZE))
- return;
+}
- if (!in_interrupt()&&local_softirq_pending()) {
+/*
+ * ONLY gets called from ia64_leave_kernel
+ * ONLY call with interrupts enabled
+ */
+void process_soft_irq()
+{
+ if (!in_interrupt() && local_softirq_pending()) {
add_preempt_count(SOFTIRQ_OFFSET);
do_softirq();
sub_preempt_count(SOFTIRQ_OFFSET);
}
- //preempt_enable_no_resched();
}
+
/* end from linux/kernel/softirq.c */
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] Do_softirq is invoked at the path of ia64_leave_kernel instead of,
Xen patchbot -unstable <=
|
|
|
|
|