softirq.c (bd2f55361f18347e890d52ff9cfd8895455ec11b) softirq.c (ba74c1448f127649046615ec017bded7b2a76f29)
1/*
2 * linux/kernel/softirq.c
3 *
4 * Copyright (C) 1992 Linus Torvalds
5 *
6 * Distribute under GPLv2.
7 *
8 * Rewritten. Old one was good in 2.2, but in 2.3 it was immoral. --ANK (990903)

--- 339 unchanged lines hidden (view full) ---

348 invoke_softirq();
349
350#ifdef CONFIG_NO_HZ
351 /* Make sure that timer wheel updates are propagated */
352 if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched())
353 tick_nohz_irq_exit();
354#endif
355 rcu_irq_exit();
1/*
2 * linux/kernel/softirq.c
3 *
4 * Copyright (C) 1992 Linus Torvalds
5 *
6 * Distribute under GPLv2.
7 *
8 * Rewritten. Old one was good in 2.2, but in 2.3 it was immoral. --ANK (990903)

--- 339 unchanged lines hidden (view full) ---

348 invoke_softirq();
349
350#ifdef CONFIG_NO_HZ
351 /* Make sure that timer wheel updates are propagated */
352 if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched())
353 tick_nohz_irq_exit();
354#endif
355 rcu_irq_exit();
356 preempt_enable_no_resched();
356 sched_preempt_enable_no_resched();
357}
358
359/*
360 * This function must run with irqs disabled!
361 */
362inline void raise_softirq_irqoff(unsigned int nr)
363{
364 __raise_softirq_irqoff(nr);

--- 389 unchanged lines hidden (view full) ---

754 If already offline, we'll be on wrong CPU:
755 don't process */
756 if (cpu_is_offline((long)__bind_cpu))
757 goto wait_to_die;
758 local_irq_disable();
759 if (local_softirq_pending())
760 __do_softirq();
761 local_irq_enable();
357}
358
359/*
360 * This function must run with irqs disabled!
361 */
362inline void raise_softirq_irqoff(unsigned int nr)
363{
364 __raise_softirq_irqoff(nr);

--- 389 unchanged lines hidden (view full) ---

754 If already offline, we'll be on wrong CPU:
755 don't process */
756 if (cpu_is_offline((long)__bind_cpu))
757 goto wait_to_die;
758 local_irq_disable();
759 if (local_softirq_pending())
760 __do_softirq();
761 local_irq_enable();
762 preempt_enable_no_resched();
762 sched_preempt_enable_no_resched();
763 cond_resched();
764 preempt_disable();
765 rcu_note_context_switch((long)__bind_cpu);
766 }
767 preempt_enable();
768 set_current_state(TASK_INTERRUPTIBLE);
769 }
770 __set_current_state(TASK_RUNNING);

--- 161 unchanged lines hidden ---
763 cond_resched();
764 preempt_disable();
765 rcu_note_context_switch((long)__bind_cpu);
766 }
767 preempt_enable();
768 set_current_state(TASK_INTERRUPTIBLE);
769 }
770 __set_current_state(TASK_RUNNING);

--- 161 unchanged lines hidden ---