public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Mike Frysinger <vapier@gentoo.org>
Cc: Luca Barbieri <luca@luca-barbieri.com>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] lib/atomic64_test: do not build on non-atomic64 systems
Date: Fri, 22 Oct 2010 14:00:44 -0700	[thread overview]
Message-ID: <20101022140044.d5b0e9ce.akpm@linux-foundation.org> (raw)
In-Reply-To: <AANLkTi=MRU3Qi6NQfqnCwX34sHL2Rx8AyaqRwrxNVQoM@mail.gmail.com>

On Fri, 22 Oct 2010 16:47:36 -0400
Mike Frysinger <vapier@gentoo.org> wrote:

> On Fri, Oct 22, 2010 at 16:31, Andrew Morton wrote:
> > On Fri, 22 Oct 2010 16:14:49 -0400 Mike Frysinger wrote:
> >> On Thu, Oct 21, 2010 at 19:24, Andrew Morton wrote:
> >> > On Thu, 21 Oct 2010 19:04:36 -0400 Mike Frysinger wrote:
> >> >> you can say "lazy" all you like. __i dont see the point in going that route.
> >> >
> >> > Try
> >> >
> >> > __ __ __ __grep HAVE arch/x86/Kconfig
> >> >
> >> > If all of those were instead to use some random #define which the
> >> > particular feature happened to define in some header file then we would
> >> > have a mess on our hands.
> >>
> >> fun times. __new tact.
> >>
> >> Luca: your new atomic64_t test build fails on all arches that lack
> >> atomic64_t. __please fix.
> >
> > That's only part of the problem. __The following won't build also:
> >
> > net/rds
> 
> not true.  that code base is already using my suggestion:
> net/rds/rds.h:
> #ifdef ATOMIC64_INIT
> #define KERNEL_HAS_ATOMIC64
> #endif

IOW, your suggestion led to a nasty local hack.  One which would be
unneeded had we implemented this properly via Kconfig.

> but this isnt a matter of "use atomic64_t or atomic_t" ... this code
> manually takes care of doing a spinlock around a u64 member.  i
> imagine if you'd notice this before it was merged you'd have made them
> fix this cleanly.

I'd have suggested that they use Kconfig.

I'd also have suggested that they implement a generic spinlocked
atomic64 library rather than open-coding stuff down in net/rds/.

People do tend to prefer to do localised expedient things rather than
sticking their necks out and implementing proper, generic kernel-wide
functions.  If I see it happen, I'll tell them.  Usually I don't see
it until months after it's merged :(

> > kernel/perf_event.c
> 
> also not true -- this requires arches to opt in to HAVE_PERF_EVENTS
> and only arches which have validated it works (i.e. they have
> atomic64) have done that

kernel/perf_event.c has a dependency on the missing CONFIG_HAVE_ATOMIC64.

> > drivers/staging/octeon
> 
> not an issue -- this depends on CPU_CAVIUM_OCTEON which is only
> provided by mips which provides atomic64
> 
> > drivers/infiniband/hw
> 
> the only code usage of atomic64 is in code that already depends on the
> Kconfig symbol 64BIT

Again, that's just wrong and it's a fluke.  Will break if a 64-bit arch
doesn't implement atomic64.

> as for why it depends on this, i dont know ... maybe it's because of atomic64_t
> 
> > Or, much better, we implement atomic64 on the offending architectures.
> 
> i dont want to give people the impression that 64 atomics are free to
> use if in reality they're pretty expensive.  on a Blackfin system, i'd
> need to implement every access with basically a spinlock.

spin_lock_irqsave(), really.  Becomes local_irq_save() on UP.

But what's the alternative?  Either entire features become unavailable
on those architectures or we grow local hacks like rds_ib_get_ack()
which, yup, uses spin_lock_irqsave().

> > with more to come.  These things should be made dependent upon
> > CONFIG_HAVE_ATOMIC64 in Kconfig.  (Can't use #ifdef ATOMIC64_INIT for this!)
> 
> these are actually compelling arguments unlike the original one.  even
> if all these examples ended up not really being true (only the new
> atomic64_t test code is available to build on arches that lack
> atomic64).

Really, the atomic64_t implementation was imcomplete.  It should have
provided the generic arch-neutral fallback code.


  reply	other threads:[~2010-10-22 21:00 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-10-16 17:27 [PATCH] lib/atomic64_test: do not build on non-atomic64 systems Mike Frysinger
2010-10-21 22:02 ` Andrew Morton
2010-10-21 22:23   ` Mike Frysinger
2010-10-21 22:55     ` Andrew Morton
2010-10-21 23:04       ` Mike Frysinger
2010-10-21 23:24         ` Andrew Morton
2010-10-22 20:14           ` Mike Frysinger
2010-10-22 20:31             ` Andrew Morton
2010-10-22 20:47               ` Mike Frysinger
2010-10-22 21:00                 ` Andrew Morton [this message]
2010-10-22 21:07                   ` Mike Frysinger
2010-10-24 16:20               ` Roland Dreier
2010-10-25  1:52                 ` Andrew Morton

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=20101022140044.d5b0e9ce.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luca@luca-barbieri.com \
    --cc=vapier@gentoo.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox