All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: John Stultz <john.stultz@linaro.org>,
	Linus Torvalds <torvalds@linux-foundation.org>
Cc: Tejun Heo <tj@kernel.org>, LKML <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Steven Rostedt (Red Hat)" <rostedt@goodmis.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Michal Nazarewicz <mina86@mina86.com>,
	Prarit Bhargava <prarit@redhat.com>,
	Richard Cochran <richardcochran@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Andreas Dilger <adilger.kernel@dilger.ca>,
	Dave Chinner <dchinner@redhat.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>
Subject: Re: [RFC][PATCH 0/5] Fixes for abs() usage on 64bit values
Date: Tue, 15 Sep 2015 07:20:49 +0200	[thread overview]
Message-ID: <20150915052049.GA14215@gmail.com> (raw)
In-Reply-To: <CALAqxLV2qfKdNyTtnGzsgj+mWUK-wYm3OGYj6xRN_-qbtaypMg@mail.gmail.com>


* John Stultz <john.stultz@linaro.org> wrote:

> On Mon, Sep 14, 2015 at 6:49 PM, Tejun Heo <tj@kernel.org> wrote:
> > Hello,
> >
> > On Mon, Sep 14, 2015 at 06:05:19PM -0700, John Stultz wrote:
> >> As noted in include/linux/kernel.h:
> >>  "abs() should not be used for 64-bit types (s64, u64, long long)
> >>  - use abs64() for those."
> >>
> >> Unfortunately, there are quite a number of places where abs()
> >> was used w/ 64bit values in the kernel, and the results are
> >> then silently capped to 32-bit values on 32-bit systems.
> >
> > I don't get it.  Why can't we just do the following?
> >
> > #define abs(x)                                                                  \
> > ({                                                                              \
> >          typeof(x) __x = (x);                                                   \
> >          __x < 0 ? -__x : __x;                                                  \
> > })
> >
> 
> Yea. The above make sense to me, but I suspect there's some very
> subtle reason for the existing separated logic.
> But I'd have to defer to akpm for hints on that.

On one hand there's a real cost from abs() bugs: the fact that abs() trims the 
high bits silently led to a (serious) timekeeping bug on 32-bit kernels, that was 
not found for almost 2 years:

  2619d7e9c92d time: Fix timekeeping_freqadjust()'s incorrect use of abs() instead of abs64()

On the other hand, there's literally hundreds of abs() usages in the kernel - I 
think it would be a lot safer to just introduce a build time warning and migrate 
the few affected ones over to abs64() (i.e. what John has done), than to silently 
change semantics in an all-or-nothing fashion, even if arguably many (most?) of 
the 64-bit values passed to abs() are probably bugs.

This has another advantage: we'll see all the bugs that occured so far, and can 
judge their effect on a case by case basis. There's value in that kind of gradual 
approach as well.

Once we've gone through that fixing process (for 1-2 kernel releases) we could 
perhaps do the change and unify abs() and abs64(): users who really want 32-bit 
trimming in the future can do the cast explicitly.

Linus, any preferences?

Thanks,

	Ingo

  parent reply	other threads:[~2015-09-15  5:20 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-15  1:05 [RFC][PATCH 0/5] Fixes for abs() usage on 64bit values John Stultz
2015-09-15  1:05 ` [RFC][PATCH 1/5] clocksource: Fix abs() usage w/ " John Stultz
2015-10-02 20:57   ` [tip:timers/urgent] " tip-bot for John Stultz
2015-09-15  1:05 ` [RFC][PATCH 2/5] time: Fix abs() usage with 64-bit values John Stultz
2015-09-15  1:05 ` [RFC][PATCH 3/5] ext4: Fix abs() usage in ext4_mb_check_group_pa John Stultz
2015-10-19  4:03   ` [RFC,3/5] " Theodore Ts'o
2015-09-15  1:05 ` [RFC][PATCH 4/5] percpu: Fix abs() usage in percpu_counter_compare() John Stultz
2015-09-15  1:05 ` [RFC][PATCH 5/5] abs(): Provide build error on passing 64bit value to abs() John Stultz
2015-09-15  5:22   ` Ingo Molnar
2015-09-15 23:52     ` Linus Torvalds
2015-09-16 12:57       ` [PATCH] kernel.h: make abs() work with 64-bit types Michal Nazarewicz
2015-09-18  3:12         ` John Stultz
2015-09-15  1:49 ` [RFC][PATCH 0/5] Fixes for abs() usage on 64bit values Tejun Heo
2015-09-15  3:27   ` John Stultz
2015-09-15  3:46     ` Tejun Heo
2015-09-15 12:09       ` Jeff Epler
2015-09-15 21:21       ` Andrew Morton
2015-09-15 22:54         ` Michal Nazarewicz
2015-09-15  5:20     ` Ingo Molnar [this message]
2015-09-15 23:43       ` Linus Torvalds

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=20150915052049.GA14215@gmail.com \
    --to=mingo@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=adilger.kernel@dilger.ca \
    --cc=akpm@linux-foundation.org \
    --cc=dchinner@redhat.com \
    --cc=john.stultz@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mina86@mina86.com \
    --cc=peterz@infradead.org \
    --cc=prarit@redhat.com \
    --cc=richardcochran@gmail.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=tytso@mit.edu \
    /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.