sparc: leon: Fix a retry loop in leon_init_timers()
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 25 Nov 2016 11:25:54 +0000 (14:25 +0300)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 16 Mar 2017 02:18:31 +0000 (02:18 +0000)
commit 601e6e3cc5bf6adb7d076fe24d10f6191a25ba9b upstream.

The original code causes a static checker warning because it has a
continue inside a do { } while (0); loop.  In that context, a continue
and a break are equivalent.  The intent was to go back to the start of
the loop so the continue was a bug.

I've added a retry label at the start and changed the continue to a goto
retry.  Then I removed the do { } while (0) loop and pulled the code in
one indent level.

Fixes: 2791c1a43900 ("SPARC/LEON: added support for selecting Timer Core and Timer within core")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
arch/sparc/kernel/leon_kernel.c

index a19c8a0..863a035 100644 (file)
@@ -288,37 +288,37 @@ void __init leon_init_timers(irq_handler_t counter_fn)
 
        /* Find GPTIMER Timer Registers base address otherwise bail out. */
        nnp = rootnp;
 
        /* Find GPTIMER Timer Registers base address otherwise bail out. */
        nnp = rootnp;
-       do {
-               np = of_find_node_by_name(nnp, "GAISLER_GPTIMER");
-               if (!np) {
-                       np = of_find_node_by_name(nnp, "01_011");
-                       if (!np)
-                               goto bad;
-               }
 
 
-               ampopts = 0;
-               pp = of_find_property(np, "ampopts", &len);
-               if (pp) {
-                       ampopts = *(int *)pp->value;
-                       if (ampopts == 0) {
-                               /* Skip this instance, resource already
-                                * allocated by other OS */
-                               nnp = np;
-                               continue;
-                       }
+retry:
+       np = of_find_node_by_name(nnp, "GAISLER_GPTIMER");
+       if (!np) {
+               np = of_find_node_by_name(nnp, "01_011");
+               if (!np)
+                       goto bad;
+       }
+
+       ampopts = 0;
+       pp = of_find_property(np, "ampopts", &len);
+       if (pp) {
+               ampopts = *(int *)pp->value;
+               if (ampopts == 0) {
+                       /* Skip this instance, resource already
+                        * allocated by other OS */
+                       nnp = np;
+                       goto retry;
                }
                }
+       }
+
+       /* Select Timer-Instance on Timer Core. Default is zero */
+       leon3_gptimer_idx = ampopts & 0x7;
 
 
-               /* Select Timer-Instance on Timer Core. Default is zero */
-               leon3_gptimer_idx = ampopts & 0x7;
-
-               pp = of_find_property(np, "reg", &len);
-               if (pp)
-                       leon3_gptimer_regs = *(struct leon3_gptimer_regs_map **)
-                                               pp->value;
-               pp = of_find_property(np, "interrupts", &len);
-               if (pp)
-                       leon3_gptimer_irq = *(unsigned int *)pp->value;
-       } while (0);
+       pp = of_find_property(np, "reg", &len);
+       if (pp)
+               leon3_gptimer_regs = *(struct leon3_gptimer_regs_map **)
+                                       pp->value;
+       pp = of_find_property(np, "interrupts", &len);
+       if (pp)
+               leon3_gptimer_irq = *(unsigned int *)pp->value;
 
        if (!(leon3_gptimer_regs && leon3_irqctrl_regs && leon3_gptimer_irq))
                goto bad;
 
        if (!(leon3_gptimer_regs && leon3_irqctrl_regs && leon3_gptimer_irq))
                goto bad;