# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Node ID a3566a161a4744416c044770e105c2f5b053878d # Parent 4b51d081378d6783cce48255ffb7655931f26d63 ia64 softirq clean ups. This is the counter part of the C/S 10565:53f552ad404234c457fdd62560c9e8b0ea976674 Xen softirq is only checked only before returning to domain context. So that it's non-sense to check in_interrupt() and add/sub SOFTIRQ_OFFSET. PATCHNAME: clean_up_do_softirq Signed-off-by: Isaku Yamahata diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/linux-xen/entry.S --- a/xen/arch/ia64/linux-xen/entry.S Wed Jun 28 07:52:21 2006 -0600 +++ b/xen/arch/ia64/linux-xen/entry.S Mon Jul 03 13:14:13 2006 +0900 @@ -901,7 +901,7 @@ GLOBAL_ENTRY(ia64_leave_kernel) #ifdef XEN ;; (pUStk) ssm psr.i -(pUStk) br.call.sptk.many b0=process_soft_irq +(pUStk) br.call.sptk.many b0=do_softirq (pUStk) rsm psr.i ;; alloc loc0=ar.pfs,0,1,1,0 diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/vmx/vmx_process.c --- a/xen/arch/ia64/vmx/vmx_process.c Wed Jun 28 07:52:21 2006 -0600 +++ b/xen/arch/ia64/vmx/vmx_process.c Mon Jul 03 13:14:13 2006 +0900 @@ -190,8 +190,7 @@ void leave_hypervisor_tail(struct pt_reg if (!is_idle_domain(d) ) { // always comes from guest extern void vmx_dorfirfi(void); struct pt_regs *user_regs = vcpu_regs(current); - if (local_softirq_pending()) - do_softirq(); + do_softirq(); local_irq_disable(); if (user_regs != regs) diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/xen/domain.c --- a/xen/arch/ia64/xen/domain.c Wed Jun 28 07:52:21 2006 -0600 +++ b/xen/arch/ia64/xen/domain.c Mon Jul 03 13:14:13 2006 +0900 @@ -187,16 +187,14 @@ void continue_running(struct vcpu *same) static void default_idle(void) { - int cpu = smp_processor_id(); local_irq_disable(); - if ( !softirq_pending(cpu)) + if ( !softirq_pending(smp_processor_id()) ) safe_halt(); local_irq_enable(); } static void continue_cpu_idle_loop(void) { - int cpu = smp_processor_id(); for ( ; ; ) { #ifdef IA64 @@ -204,12 +202,10 @@ static void continue_cpu_idle_loop(void) #else irq_stat[cpu].idle_timestamp = jiffies; #endif - while ( !softirq_pending(cpu) ) + while ( !softirq_pending(smp_processor_id()) ) default_idle(); - add_preempt_count(SOFTIRQ_OFFSET); raise_softirq(SCHEDULE_SOFTIRQ); do_softirq(); - sub_preempt_count(SOFTIRQ_OFFSET); } } diff -r 4b51d081378d -r a3566a161a47 xen/arch/ia64/xen/irq.c --- a/xen/arch/ia64/xen/irq.c Wed Jun 28 07:52:21 2006 -0600 +++ b/xen/arch/ia64/xen/irq.c Mon Jul 03 13:14:13 2006 +0900 @@ -499,19 +499,6 @@ void irq_exit(void) sub_preempt_count(IRQ_EXIT_OFFSET); } -/* - * ONLY gets called from ia64_leave_kernel - * ONLY call with interrupts enabled - */ -void process_soft_irq(void) -{ - if (!in_interrupt() && local_softirq_pending()) { - add_preempt_count(SOFTIRQ_OFFSET); - do_softirq(); - sub_preempt_count(SOFTIRQ_OFFSET); - } -} - // this is a temporary hack until real console input is implemented void guest_forward_keyboard_input(int irq, void *nada, struct pt_regs *regs) {