ia64/xen-unstable

changeset 10665:f24993f27cc4

[IA64] 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.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
author awilliam@xenbuild.aw
date Thu Jul 06 08:30:17 2006 -0600 (2006-07-06)
parents 3041cac985d6
children 7c8955f73b18 9ec05cd1e873
files xen/arch/ia64/linux-xen/entry.S xen/arch/ia64/vmx/vmx_process.c xen/arch/ia64/xen/domain.c xen/arch/ia64/xen/irq.c
line diff
     1.1 --- a/xen/arch/ia64/linux-xen/entry.S	Thu Jul 06 08:27:04 2006 -0600
     1.2 +++ b/xen/arch/ia64/linux-xen/entry.S	Thu Jul 06 08:30:17 2006 -0600
     1.3 @@ -892,7 +892,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
     1.4  #ifdef XEN
     1.5  	;;
     1.6  (pUStk) ssm psr.i
     1.7 -(pUStk)    br.call.sptk.many b0=process_soft_irq
     1.8 +(pUStk)    br.call.sptk.many b0=do_softirq
     1.9  (pUStk) rsm psr.i
    1.10      ;;
    1.11  	alloc loc0=ar.pfs,0,1,1,0
     2.1 --- a/xen/arch/ia64/vmx/vmx_process.c	Thu Jul 06 08:27:04 2006 -0600
     2.2 +++ b/xen/arch/ia64/vmx/vmx_process.c	Thu Jul 06 08:30:17 2006 -0600
     2.3 @@ -190,8 +190,7 @@ void leave_hypervisor_tail(struct pt_reg
     2.4      if (!is_idle_domain(d) ) {	// always comes from guest
     2.5          extern void vmx_dorfirfi(void);
     2.6          struct pt_regs *user_regs = vcpu_regs(current);
     2.7 -        if (local_softirq_pending())
     2.8 -            do_softirq();
     2.9 +        do_softirq();
    2.10          local_irq_disable();
    2.11  
    2.12          if (user_regs != regs)
     3.1 --- a/xen/arch/ia64/xen/domain.c	Thu Jul 06 08:27:04 2006 -0600
     3.2 +++ b/xen/arch/ia64/xen/domain.c	Thu Jul 06 08:30:17 2006 -0600
     3.3 @@ -217,16 +217,14 @@ void continue_running(struct vcpu *same)
     3.4  
     3.5  static void default_idle(void)
     3.6  {
     3.7 -	int cpu = smp_processor_id();
     3.8  	local_irq_disable();
     3.9 -	if ( !softirq_pending(cpu))
    3.10 +	if ( !softirq_pending(smp_processor_id()) )
    3.11  	        safe_halt();
    3.12  	local_irq_enable();
    3.13  }
    3.14  
    3.15  static void continue_cpu_idle_loop(void)
    3.16  {
    3.17 -	int cpu = smp_processor_id();
    3.18  	for ( ; ; )
    3.19  	{
    3.20  #ifdef IA64
    3.21 @@ -234,12 +232,10 @@ static void continue_cpu_idle_loop(void)
    3.22  #else
    3.23  	    irq_stat[cpu].idle_timestamp = jiffies;
    3.24  #endif
    3.25 -	    while ( !softirq_pending(cpu) )
    3.26 +	    while ( !softirq_pending(smp_processor_id()) )
    3.27  	        default_idle();
    3.28 -	    add_preempt_count(SOFTIRQ_OFFSET);
    3.29  	    raise_softirq(SCHEDULE_SOFTIRQ);
    3.30  	    do_softirq();
    3.31 -	    sub_preempt_count(SOFTIRQ_OFFSET);
    3.32  	}
    3.33  }
    3.34  
     4.1 --- a/xen/arch/ia64/xen/irq.c	Thu Jul 06 08:27:04 2006 -0600
     4.2 +++ b/xen/arch/ia64/xen/irq.c	Thu Jul 06 08:30:17 2006 -0600
     4.3 @@ -499,19 +499,6 @@ void irq_exit(void)
     4.4  	sub_preempt_count(IRQ_EXIT_OFFSET);
     4.5  }
     4.6  
     4.7 -/*
     4.8 - * ONLY gets called from ia64_leave_kernel
     4.9 - * ONLY call with interrupts enabled
    4.10 - */
    4.11 -void process_soft_irq(void)
    4.12 -{
    4.13 -	if (!in_interrupt() && local_softirq_pending()) {
    4.14 -		add_preempt_count(SOFTIRQ_OFFSET);
    4.15 -		do_softirq();
    4.16 -		sub_preempt_count(SOFTIRQ_OFFSET);
    4.17 -	}
    4.18 -}
    4.19 -
    4.20  // this is a temporary hack until real console input is implemented
    4.21  void guest_forward_keyboard_input(int irq, void *nada, struct pt_regs *regs)
    4.22  {