linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Nicolas Pitre <nico@cam.org>
Cc: David Howells <dhowells@redhat.com>,
	Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Ingo Molnar <mingo@elte.hu>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	linux-kernel@vger.kernel.org, Ralf Baechle <ralf@linux-mips.org>,
	benh@kernel.crashing.org, paulus@samba.org,
	David Miller <davem@davemloft.net>,
	Ingo Molnar <mingo@redhat.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Steven Rostedt <rostedt@goodmis.org>,
	linux-arch@vger.kernel.org
Subject: Re: [RFC patch 08/18] cnt32_to_63 should use smp_rmb()
Date: Fri, 7 Nov 2008 07:50:03 -0800	[thread overview]
Message-ID: <20081107075003.fa93ccf4.akpm@linux-foundation.org> (raw)
In-Reply-To: <alpine.LFD.2.00.0811070952150.13034@xanadu.home>

On Fri, 07 Nov 2008 10:01:01 -0500 (EST) Nicolas Pitre <nico@cam.org> wrote:

> On Fri, 7 Nov 2008, David Howells wrote:
> 
> > Andrew Morton <akpm@linux-foundation.org> wrote:
> > 
> > > As I said in the text which you deleted and ignored, this would be
> > > better if it was implemented as a C function which requires that the
> > > caller explicitly pass in a reference to the state storage.
> 
> The whole purpose of that thing is to be utterly fast and lightweight.  

Well I'm glad it wasn't designed to demonstrate tastefulness.

btw, do you know how damned irritating and frustrating it is for a code
reviewer to have his comments deliberately ignored and deleted in
replies?

> Having an out of line C call would trash the major advantage of this 
> code.

Not really.

> > I'd be quite happy if it was:
> > 
> > 	static inline u64 cnt32_to_63(u32 cnt_lo, u32 *__m_cnt_hi)
> > 	{
> > 		union cnt32_to_63 __x;
> > 		__x.hi = *__m_cnt_hi;
> > 		__x.lo = cnt_lo;
> > 		if (unlikely((s32)(__x.hi ^ __x.lo) < 0))
> > 			*__m_cnt_hi =
> > 				__x.hi = (__x.hi ^ 0x80000000) + (__x.hi >> 31);
> > 		return __x.val;
> > 	}
> > 
> > I imagine this would compile pretty much the same as the macro.
> 
> Depends.  As everybody has noticed now, the read ordering is important, 
> and if gcc decides to not inline this 

If gcc did that then it would need to generate static instances of
inlined functions within individual compilation units.  It would be a
disaster for the kernel.  For a start, functions which are "inlined" in kernel
modules wouldn't be able to access their static storage and modprobing
them would fail.

> for whatever reason then the 
> ordering is lost.

Uninlining won't affect any ordering I can see.

>  This is why this was a macro to start with.
> 
> > I think it
> > would make it more obvious about the independence of the storage.
> 
> I don't think having the associated storage be outside the macro make 
> any sense either.  There is simply no valid reason for having it shared 
> between multiple invokations of the macro, as well as making its 
> interface more complex for no gain.

oh god.

> > Alternatively, perhaps Nicolas just needs to mention this in the comment more
> > clearly.
> 
> I wrote that code so to me it is cristal clear already.  Any suggestions 
> as to how this could be improved?
> 

Does mn10300's get_cycles() really count backwards?  The first two
callsites I looked at (crypto/tcrypt.c and fs/ext4/mballoc.c) assume
that it is an upcounter.

  parent reply	other threads:[~2008-11-07 15:51 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20081107052336.652868737@polymtl.ca>
2008-11-07  5:23 ` [RFC patch 01/18] get_cycles() : kconfig HAVE_GET_CYCLES Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 02/18] get_cycles() : x86 HAVE_GET_CYCLES Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 03/18] get_cycles() : sparc64 HAVE_GET_CYCLES Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 04/18] get_cycles() : powerpc64 HAVE_GET_CYCLES Mathieu Desnoyers
2008-11-07 14:56   ` Josh Boyer
2008-11-07 18:14     ` Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 05/18] get_cycles() : MIPS HAVE_GET_CYCLES_32 Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 06/18] Trace clock generic Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 07/18] Trace clock core Mathieu Desnoyers
2008-11-07  5:52   ` Andrew Morton
2008-11-07  6:16     ` Mathieu Desnoyers
2008-11-07  6:26       ` Andrew Morton
2008-11-07 16:12         ` Mathieu Desnoyers
2008-11-07 16:19           ` Andrew Morton
2008-11-07 18:16             ` Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 08/18] cnt32_to_63 should use smp_rmb() Mathieu Desnoyers
2008-11-07  6:05   ` Andrew Morton
2008-11-07  8:12     ` Nicolas Pitre
2008-11-07  8:38       ` Andrew Morton
2008-11-07 11:20       ` David Howells
2008-11-07 15:01         ` Nicolas Pitre
2008-11-07 15:01           ` Nicolas Pitre
2008-11-07 15:50           ` Andrew Morton [this message]
2008-11-07 16:47             ` Nicolas Pitre
2008-11-07 17:21               ` Andrew Morton
2008-11-07 20:03                 ` Nicolas Pitre
2008-11-07 20:03                   ` Nicolas Pitre
2008-11-07 16:55             ` David Howells
2008-11-07 16:21           ` David Howells
2008-11-07 16:29             ` Andrew Morton
2008-11-07 17:10             ` David Howells
2008-11-07 17:26               ` Andrew Morton
2008-11-07 18:00                 ` Mathieu Desnoyers
2008-11-07 18:21                   ` Andrew Morton
2008-11-07 18:30                     ` Harvey Harrison
2008-11-07 18:42                       ` Mathieu Desnoyers
2008-11-07 18:33                     ` Mathieu Desnoyers
2008-11-07 18:36                     ` Linus Torvalds
2008-11-07 18:45                       ` Andrew Morton
2008-11-07 16:07         ` David Howells
2008-11-07 16:47         ` Mathieu Desnoyers
2008-11-07 20:11           ` Russell King
2008-11-07 20:11             ` Russell King
2008-11-07 21:36             ` Mathieu Desnoyers
2008-11-07 21:36               ` Mathieu Desnoyers
2008-11-07 22:18               ` Russell King
2008-11-07 22:18                 ` Russell King
2008-11-07 22:36                 ` Mathieu Desnoyers
2008-11-07 22:36                   ` Mathieu Desnoyers
2008-11-07 23:41               ` David Howells
2008-11-08  0:15                 ` Russell King
2008-11-08  0:15                   ` Russell King
2008-11-08 15:24                   ` Nicolas Pitre
2008-11-08 23:20                     ` [PATCH] clarify usage expectations for cnt32_to_63() Nicolas Pitre
2008-11-09  2:25                       ` Mathieu Desnoyers
2008-11-09  2:54                         ` Nicolas Pitre
2008-11-09  5:06                           ` Nicolas Pitre
2008-11-09  5:27                             ` [PATCH v2] " Nicolas Pitre
2008-11-09  6:48                               ` Mathieu Desnoyers
2008-11-09 13:34                                 ` Nicolas Pitre
2008-11-09 13:43                                   ` Russell King
2008-11-09 13:43                                     ` Russell King
2008-11-09 16:22                                   ` Mathieu Desnoyers
2008-11-10  4:20                                     ` Nicolas Pitre
2008-11-10  4:42                                       ` Andrew Morton
2008-11-10 21:34                                         ` Nicolas Pitre
2008-11-10 21:58                                           ` Andrew Morton
2008-11-10 23:15                                             ` Nicolas Pitre
2008-11-10 23:15                                               ` Nicolas Pitre
2008-11-10 23:22                                               ` Andrew Morton
2008-11-10 23:38                                                 ` Steven Rostedt
2008-11-11  0:26                                                 ` Nicolas Pitre
2008-11-11 18:28                                                   ` [PATCH] convert cnt32_to_63 to inline Mathieu Desnoyers
2008-11-11 19:13                                                     ` Russell King
2008-11-11 19:13                                                       ` Russell King
2008-11-11 20:11                                                       ` Mathieu Desnoyers
2008-11-11 20:11                                                         ` Mathieu Desnoyers
2008-11-11 21:51                                                         ` Russell King
2008-11-11 21:51                                                           ` Russell King
2008-11-12  3:48                                                           ` Mathieu Desnoyers
2008-11-12  3:48                                                             ` Mathieu Desnoyers
2008-11-11 21:00                                                     ` Nicolas Pitre
2008-11-11 21:13                                                       ` Russell King
2008-11-11 21:13                                                         ` Russell King
2008-11-11 22:31                                                   ` David Howells
2008-11-11 22:37                                                     ` Peter Zijlstra
2008-11-12  1:13                                                       ` Steven Rostedt
2008-11-08  0:45                 ` [RFC patch 08/18] cnt32_to_63 should use smp_rmb() David Howells
2008-11-07 17:04         ` David Howells
2008-11-07 17:17           ` Mathieu Desnoyers
2008-11-07 23:27           ` David Howells
2008-11-07 11:03     ` David Howells
2008-11-07 11:03       ` David Howells
2008-11-07 16:51       ` Mathieu Desnoyers
2008-11-07 20:18         ` Nicolas Pitre
2008-11-07 23:55         ` David Howells
2008-11-07 10:59   ` David Howells
2008-11-07  5:23 ` [RFC patch 09/18] Powerpc : Trace clock Mathieu Desnoyers
2008-11-07  5:23 ` [RFC patch 10/18] Sparc64 " Mathieu Desnoyers
2008-11-07  5:45   ` David Miller
2008-11-07 10:55 ` [RFC patch 08/18] cnt32_to_63 should use smp_rmb() David Howells
2008-11-07 17:09   ` Mathieu Desnoyers
2008-11-07 17:33     ` Steven Rostedt
2008-11-07 17:33       ` Steven Rostedt
2008-11-07 19:18       ` Mathieu Desnoyers
2008-11-07 19:32         ` Peter Zijlstra
2008-11-07 20:02           ` Mathieu Desnoyers
2008-11-07 20:45             ` Mathieu Desnoyers
2008-11-07 20:54               ` Paul E. McKenney
2008-11-07 21:04                 ` Steven Rostedt
2008-11-08  0:34                   ` Paul E. McKenney
2008-11-07 21:16                 ` Mathieu Desnoyers
2008-11-07 20:08     ` Steven Rostedt
2008-11-07 20:55       ` Paul E. McKenney
2008-11-07 21:27       ` Mathieu Desnoyers
2008-11-07 20:36     ` Nicolas Pitre
2008-11-07 20:55       ` Mathieu Desnoyers
2008-11-07 21:22         ` Nicolas Pitre
2008-11-07 23:50     ` David Howells
2008-11-08  0:55       ` Steven Rostedt
2008-11-09 11:51       ` David Howells
2008-11-09 14:31         ` Steven Rostedt
2008-11-09 14:31           ` Steven Rostedt
2008-11-09 16:18         ` Mathieu Desnoyers

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=20081107075003.fa93ccf4.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=benh@kernel.crashing.org \
    --cc=davem@davemloft.net \
    --cc=dhowells@redhat.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.com \
    --cc=nico@cam.org \
    --cc=paulus@samba.org \
    --cc=ralf@linux-mips.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.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;
as well as URLs for NNTP newsgroup(s).