Messages in this thread Patch in this message | | | Date | Tue, 13 Nov 2007 01:09:25 +0300 | From | Dmitri Vorobiev <> | Subject | [RFC][PATCH] Replace the goto-based loop by a do-while statement |
| |
Hi list,
It looks like using the goto statement in constructs like
restart: // DO SOMETHING if (condition) goto restart;
should be frowned upon and the loop
do { // DO SOMETHING } while (condition);
is more appropriate in such situation.
However, in the __do_softirq() routine located in `kernel/softirq.c' the goto construct was chosen in favor of the do-while loop.
The patch included below replaces the goto-based loop by the do-while statement.
If the goto is really necessary here, I would be very grateful if someone could explain why.
Signed-off-by: Dmitri Vorobiev <dmitri.vorobiev@gmail.com> -- diff --git a/kernel/softirq.c b/kernel/softirq.c index bd89bc4..b0d0431 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -219,28 +219,28 @@ asmlinkage void __do_softirq(void) trace_softirq_enter(); cpu = smp_processor_id(); -restart: - /* Reset the pending bitmask before enabling irqs */ - set_softirq_pending(0); - local_irq_enable(); + do { + /* Reset the pending bitmask before enabling irqs */ + set_softirq_pending(0); - h = softirq_vec; + local_irq_enable(); - do { - if (pending & 1) { - h->action(h); - rcu_bh_qsctr_inc(cpu); - } - h++; - pending >>= 1; - } while (pending); + h = softirq_vec; - local_irq_disable(); + do { + if (pending & 1) { + h->action(h); + rcu_bh_qsctr_inc(cpu); + } + h++; + pending >>= 1; + } while (pending); - pending = local_softirq_pending(); - if (pending && --max_restart) - goto restart; + local_irq_disable(); + + pending = local_softirq_pending(); + } while (pending && --max_restart); if (pending) wakeup_softirqd(); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |