Thread (17 messages) 17 messages, 6 authors, 2015-06-24

Re: [PATCH 2/2] PM / Domains: Avoid infinite loops in attach/detach code

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2015-06-23 13:45:49
Also in: linux-sh, lkml

Hi Rafael,

On Tue, Jun 23, 2015 at 3:38 PM, Rafael J. Wysocki [off-list ref] wrote:
quoted
quoted
quoted
@@ -2218,10 +2227,13 @@ int genpd_dev_pm_attach(struct device *dev)

        dev_dbg(dev, "adding to PM domain %s\n", pd->name);

-       while (1) {
+       for (i = 0; i < GENPD_RETRIES; i++) {
                ret = pm_genpd_add_device(pd, dev);
                if (ret != -EAGAIN)
                        break;
+
+               if (i > GENPD_RETRIES / 2)
+                       udelay(GENPD_DELAY_US);
In this execution path, we retry when getting -EAGAIN while believing
the reason to the error are only *temporary* as we are soon waiting
for all devices in the genpd to be system PM resumed. At least that's
my understanding to why we want to deal with -EAGAIN here, but I might
be wrong.

In this regards, I wonder whether it could be better to re-try only a
few times but with a far longer interval time than a couple us. What
do you think?
That's indeed viable. I have no idea for how long this temporary state can
extend.
A usual approach to this kind of thing is to use exponential fallback
where you increase the delay twice with respect to the previous one
every time.
Right, but when do you give up?

Note that udelay() is a busy loop. Should it fall back to msleep() after
a while?

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help