All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: "Dave Young" <hidave.darkstar@gmail.com>,
	"Johannes Weiner" <hannes@saeurebad.de>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] add time_now_after and other macros which compare with jiffies
Date: Sun, 9 Mar 2008 11:36:01 -0700	[thread overview]
Message-ID: <20080309113601.b8552a79.akpm@linux-foundation.org> (raw)
In-Reply-To: <20080309095802.70d91c7b@core>

On Sun, 9 Mar 2008 09:58:02 +0000 Alan Cox <alan@lxorguk.ukuu.org.uk> wrote:

> > >  > +/* time_now_before_eq(a) return true if now (jiffies) is before or equal to a */
> > >  > +#define time_now_before_eq(a) time_before_eq(jiffies, a)
> > >
> > >  How about even more obvious names like time_is_past(), time_is_future(),
> > >  ...?
> > 
> > Thanks for comment.
> > 
> > Then how do we name the _eq version?  IMHO, the time_now_* is enough.
> 
> Why do you even need them. I don't see the point of *any* of these extra
> macros as they simply obfuscate code and hide what is actually going on.

Two reasons:

a) the existing macros are (I believe) a right royal pita.  It's very
   hard to remember which order the args are supposed to be in.

   So each time I see a time_foo() when reviewing a patch I have to go
   off and re-read the implementation then have a big think to check that
   they got it right (a sure sign of a poor interface, no)?

   And I'm not the only one - people get this wrong fairly regularly.

b) around 90% of the usages of time_after() are to compare against jiffies!

The macros which Dave is developing aren't just less-error-prone,
easier-to-review transformations - they offer higher-level functionality.
Because time_after() is just a basic comparison operation, whereas
time_now_before() is an *application* of that operation.

Trust me on this - they will lead to easier-to-review code and less bugs.

> The initial macros were added because of the type safety and correct
> comparison rules being complex. They have a purpose.

They are hard to use and hard to review.

> Even if you want these you can use !time_future() if you don't want the
> _eq variants. Generally speaking drivers should be using timers not
> polled loops, and most of our loops comparing with jiffies want removing.


  parent reply	other threads:[~2008-03-09 18:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-07 23:35 [PATCH v2] add time_now_after and other macros which compare with jiffies Dave Young
2008-03-08 16:12 ` Johannes Weiner
2008-03-09  0:54   ` Dave Young
2008-03-09  9:58     ` Alan Cox
2008-03-09 10:44       ` Dave Young
2008-03-09 11:08         ` Alan Cox
2008-03-09 19:01           ` Andrew Morton
2008-03-09 20:06             ` Alan Cox
2008-03-10  2:03             ` Dave Young
2008-03-10  2:41               ` Johannes Weiner
2008-03-09 18:36       ` Andrew Morton [this message]
2008-03-09 20:03         ` Alan Cox

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080309113601.b8552a79.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=hannes@saeurebad.de \
    --cc=hidave.darkstar@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.