All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeremy Fitzhardinge <jeremy@goop.org>
To: Mike Travis <travis@sgi.com>
Cc: Ingo Molnar <mingo@elte.hu>,
	Andrew Morton <akpm@linux-foundation.org>,
	"Eric W. Biederman" <ebiederm@xmission.com>,
	Hugh Dickins <hugh@veritas.com>, Jack Steiner <steiner@sgi.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/4] x86_64: Optimize percpu accesses
Date: Fri, 25 Jul 2008 16:26:54 -0700	[thread overview]
Message-ID: <488A613E.50305@goop.org> (raw)
In-Reply-To: <20080725211117.586723000@polaris-admin.engr.sgi.com>

Mike Travis wrote:
> This patchset provides the following:
>
>   * x86_64: Cleanup setup_percpu by fixing some minor potential
>     problems as well as add some debugging aids.
>
>   * x86_64: Rebase per cpu variables to zero
>
>     Rebase per cpu variables to zero in preparation for the following
>     patch to fold the pda into the per cpu area.
>
>   * x86_64: Fold pda into per cpu area
>
>     Declare the pda as a per cpu variable. This will allow the per cpu
>     variables to be accessible on the x86_64 using %gs as the base of
>     the percpu areas for each cpu:
>
> 	%gs:per_cpu_xxxx
>
>   * x86_64: Reference zero-based percpu variables offset from gs
>
>     Actually implement the above operation for __get_cpu_var() and
>     __put_cpu_var().  Since this is now a single instruction, we
>     can remove the non-preemptible versions of x86_read_percpu()
>     and x86_write_percpu().
>   

No, I think you've misunderstood these calls.

get_cpu_var(x) evaluates to an lvalue of this cpu's 'x'.  It disables 
preemption, in the same manner as get_cpu().

put_cpu_var(x) does nothing more than re-enable preemption, to pair with 
get_cpu_var().

__get_cpu_var(x) is the same as get_cpu_var, but it assumes that 
preemption is already disabled.  There is no __put_cpu_var().

The important point is that an expression like "__get_cpu_var(x) = foo" 
does not evaluate to a single instruction, and is not preempt or 
interrupt -atomic.  That's the reason x86_X_percpu() exist, since 
they're a single instruction in an asm.  However, with %gs: based 
addressing they can be easily unified.

    J

  parent reply	other threads:[~2008-07-25 23:27 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-25 21:11 [PATCH 0/4] x86_64: Optimize percpu accesses Mike Travis
2008-07-25 21:11 ` [PATCH 1/4] x86_64: Cleanup early setup_percpu references Mike Travis
2008-07-25 21:11 ` [PATCH 2/4] x86_64: Base percpu variables at zero Mike Travis
2008-07-25 21:11 ` [PATCH 3/4] x86_64: Fold pda into per cpu area Mike Travis
2008-07-25 21:11 ` [PATCH 4/4] x86_64: Reference zero-based percpu variables offset from gs Mike Travis
2008-07-25 23:26 ` Jeremy Fitzhardinge [this message]
2008-07-26  0:27   ` [PATCH 0/4] x86_64: Optimize percpu accesses Mike Travis
2008-07-26  0:30     ` Jeremy Fitzhardinge
2008-07-26 12:38 ` Ingo Molnar
2008-07-28 18:33   ` Mike Travis
2008-07-28 15:52 ` [crash] " Ingo Molnar
2008-07-28 19:39   ` Mike Travis

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=488A613E.50305@goop.org \
    --to=jeremy@goop.org \
    --cc=akpm@linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=hpa@zytor.com \
    --cc=hugh@veritas.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=steiner@sgi.com \
    --cc=travis@sgi.com \
    /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.