All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH] Replace the goto-based loop by a do-while statement
@ 2007-11-12 22:09 Dmitri Vorobiev
  0 siblings, 0 replies; only message in thread
From: Dmitri Vorobiev @ 2007-11-12 22:09 UTC (permalink / raw)
  To: Linux-kernel

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();

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-11-12 22:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-12 22:09 [RFC][PATCH] Replace the goto-based loop by a do-while statement Dmitri Vorobiev

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.