lkml.org 
[lkml]   [2006]   [Aug]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [patch] fix common mistake in polling loops
    Hi!

    > task taken from http://kerneljanitors.org/TODO:
    >
    > A _lot_ of drivers end up caring about absolute time,
    > because a _lot_ of
    > drivers have a very simple issue like:
    >
    > - poll this port every 10ms until it returns "ready", or
    > until we time
    > out after 500ms.
    >
    > And the thing is, you can do it the stupid way:
    >
    > for (i = 0; i < 50; i++) {
    > if (ready())
    > return 0;
    > msleep(10);
    > }
    > .. timeout ..
    >
    > or you can do it the _right_ way. The stupid way is
    > simpler, but anybody
    > who doesn't see what the problem is has some serious
    > problems in kernel
    > programming. Hint: it might not be polling for half a

    Well, whoever wrote thi has some serious problems (in attitude
    department). *Any* loop you design may take half a minute under
    streange circumstances.

    > second, it might be
    > polling for half a _minute_ for all you know.
    >
    > In other words, the _right_ way to do this is literally
    >
    > unsigned long timeout = jiffies +
    > msecs_to_jiffies(500);
    > for (;;) {
    > if (ready())
    > return 0;
    > if (time_after(timeout, jiffies))
    > break;
    > msleep(10);
    > }
    >
    > which is unquestionably more complex, yes, but it's more
    > complex because
    > it is CORRECT!

    Original code is correct, too.

    Anyway you probably want to hide complexity in some macro if we are
    going this way.
    Pavel
    --
    Thanks for all the (sleeping) penguins.
    -
    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/

    \
     
     \ /
      Last update: 2006-08-07 00:05    [W:0.023 / U:30.376 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site