All of lore.kernel.org
 help / color / mirror / Atom feed
From: linux@tjworld.net (TJ)
To: kernelnewbies@lists.kernelnewbies.org
Subject: what's with "get_cpu_ptr" and "put_cpu_ptr"?
Date: Sun, 30 Sep 2012 22:40:34 +0100	[thread overview]
Message-ID: <5068BC52.90402@tjworld.net> (raw)
In-Reply-To: <alpine.DEB.2.02.1209301028250.22066@oneiric>

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 30/09/12 15:35, Robert P. J. Day wrote:>
> but toward the end, you can read where i'm a bit puzzled by two macros i ran across just this morning that i had never seen before, and defined in <linux/percpu.h>:
> 
> #define get_cpu_ptr(var) ({                             \ preempt_disable();                              \ this_cpu_ptr(var); })
> 
> #define put_cpu_ptr(var) do {                           \ (void)(var);                                    \ preempt_enable();                               \ } while (0)

You may be aware of this already, but if not, it's a very useful technique to find out *why* some code was added. Comments in the kernel are usually kept sparse and the 'why' is often in the commit
history.

$ git blame include/linux/percpu.h | grep get_cpu_ptr
8b8e2ec1e (Peter Zijlstra        2010-09-16 19:21:28 +0200  42) #define get_cpu_ptr(var) ({	

$ git show 8b8e2ec1e
commit 8b8e2ec1eeca7f6941bc81cefc9663018d6ceb57
Author: Peter Zijlstra <a.p.zijlstra@chello.nl>
Date:   Thu Sep 16 19:21:28 2010 +0200

    percpu: Add {get,put}_cpu_ptr

    These are similar to {get,put}_cpu_var() except for dynamically
    allocated per-cpu memory.

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: Tejun Heo <tj@kernel.org>
    LKML-Reference: <20100917093009.252867712@chello.nl>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>

LKML (Linux Kernel Mailing List): https://lkml.org/lkml/2010/9/17/74


$ git blame kernel/events/core.c | grep 'cpuctx = get_cpu_ptr'
41945f6cc kernel/perf_event.c   (Peter Zijlstra           2010-09-16 19:17:24 +0200 4229) 		cpuctx = get_cpu_ptr(pmu->pmu_cpu_context);
41945f6cc kernel/perf_event.c   (Peter Zijlstra           2010-09-16 19:17:24 +0200 4375) 		cpuctx = get_cpu_ptr(pmu->pmu_cpu_context);
41945f6cc kernel/perf_event.c   (Peter Zijlstra           2010-09-16 19:17:24 +0200 4571) 		cpuctx = get_cpu_ptr(pmu->pmu_cpu_context);

$ git show 41945f6cc
commit 41945f6ccf1e86f87fddf6b32db9cf431c05fb54
Author: Peter Zijlstra <a.p.zijlstra@chello.nl>
Date:   Thu Sep 16 19:17:24 2010 +0200

    perf: Avoid RCU vs preemption assumptions

    The per-pmu per-cpu context patch converted things from
    get_cpu_var() to this_cpu_ptr(), but that only works if
    rcu_read_lock() actually disables preemption, and since
    there is no such guarantee, we need to fix that.

    Use the newly introduced {get,put}_cpu_ptr().

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Tejun Heo <tj@kernel.org>
    LKML-Reference: <20100917093009.308453028@chello.nl>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>


Hope that helps.

TJ.



-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iEYEARECAAYFAlBovEUACgkQ7+w3pCnNYID+4ACgi4oUU3n/ac+eUHGevjqgbN85
e24AniE1ASr6nzSHSXoJFNRy0Y85H1ou
=F8AK
-----END PGP SIGNATURE-----

      reply	other threads:[~2012-09-30 21:40 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-30 14:35 what's with "get_cpu_ptr" and "put_cpu_ptr"? Robert P. J. Day
2012-09-30 21:40 ` TJ [this message]

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=5068BC52.90402@tjworld.net \
    --to=linux@tjworld.net \
    --cc=kernelnewbies@lists.kernelnewbies.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.