Hi,

This changes __do_softirq() to use a C looping construct instead of
simulating one by means of goto.

Signed-off-by: Johannes Weiner <[EMAIL PROTECTED]>

diff --git a/kernel/softirq.c b/kernel/softirq.c
index 0f546dd..bacee6b 100644
--- a/kernel/softirq.c
+++ b/kernel/softirq.c
@@ -212,38 +212,37 @@ asmlinkage void __do_softirq(void)
        int max_restart = MAX_SOFTIRQ_RESTART;
        int cpu;
 
-       pending = local_softirq_pending();
        account_system_vtime(current);
 
        __local_bh_disable((unsigned long)__builtin_return_address(0));
        trace_softirq_enter();
 
        cpu = smp_processor_id();
-restart:
-       /* Reset the pending bitmask before enabling irqs */
-       set_softirq_pending(0);
 
-       local_irq_enable();
+       while ((pending = local_softirq_pending())) {
+               if (!max_restart--) {
+                       wakeup_softirqd();
+                       break;
+               }
 
-       h = softirq_vec;
+               /* Reset the pending bitmask before enabling irqs */
+               set_softirq_pending(0);
 
-       do {
-               if (pending & 1) {
-                       h->action(h);
-                       rcu_bh_qsctr_inc(cpu);
-               }
-               h++;
-               pending >>= 1;
-       } while (pending);
+               local_irq_enable();
 
-       local_irq_disable();
+               h = softirq_vec;
 
-       pending = local_softirq_pending();
-       if (pending && --max_restart)
-               goto restart;
+               do {
+                       if (pending & 1) {
+                               h->action(h);
+                               rcu_bh_qsctr_inc(cpu);
+                       }
+                       h++;
+                       pending >>= 1;
+               } while (pending);
 
-       if (pending)
-               wakeup_softirqd();
+               local_irq_disable();
+       }
 
        trace_softirq_exit();
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to