All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj@kernel.org>
To: cl@linux-foundation.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCHSET percpu/for-3.17] percpu: clean up percpu accessor and operation definitions
Date: Thu, 12 Jun 2014 12:23:17 -0400	[thread overview]
Message-ID: <1402590209-31610-1-git-send-email-tj@kernel.org> (raw)

Hello,

Percpu accessor and operation definitions are very difficult to
follow.  Things are scattered around different header files without
specific reasons.  Definitions of different types are mixed and the
ordering sometimes is conventional.  Different definitions use
different styles and sometimes lack visual consistency for no good
reason.

The issues go deeper than skin-deep.  There's no clear distinction
between arch-specific and generic part of implementation making it
impossible for the generic layer to impose common feature or
restriction on top of arch-specific overrides.  The arch override
mechanism is broken in itself too. __this_cpu_*() operations are
defined in terms of raw_cpu_*_N() sub-ops and can't be overridden, so
if an arch overrides a raw_cpu_*() operation as whole, __this_cpu_*()
will continue using the generic implementation even though
semantically it's raw_cpu_*() + preemption sanity check.

This patchset contains the following 12 patches to clean up the whole
thing.

 0001-percpu-disallow-archs-from-overriding-SHIFT_PERCPU_P.patch
 0002-percpu-introduce-arch_raw_cpu_ptr.patch
 0003-percpu-include-asm-generic-percpu.h-should-contain-o.patch
 0004-percpu-move-accessors-from-include-linux-percpu.h-to.patch
 0005-percpu-reorganize-include-linux-percpu-defs.h.patch
 0006-percpu-only-allow-sized-arch-overrides-for-raw-this-.patch
 0007-percpu-move-generic-raw-this-_cpu_-_N-definitions-to.patch
 0008-percpu-move-raw-this-_cpu_-definitions-to-include-li.patch
 0009-percpu-reorder-macros-in-percpu-header-files.patch
 0010-percpu-use-raw_cpu_-to-define-__this_cpu_.patch
 0011-percpu-preffity-percpu-header-files.patch
 0012-percpu-invoke-__verify_pcpu_ptr-from-the-generic-par.patch

0001-0005 tidy up arch overrides, shuffle definitions around so that
each percpu header file serves specific purposes.

0006 disallows whole operation overrides for raw/this_cpu_*().  No
arch is using it and it makes it impossible to distinguish
arch-specific and generic parts of percpu operation definitions.

0007-0009 continues the reorganization.

0010 makes __this_cpu_*() ops use raw_cpu_*() opst instead of reaching
into raw_cpu_*_N() sub-ops.

0011 performs a bunch of cosmetic changes to make it less of an
eyesore.

0012 moves __verify_pcpu_ptr() invocations so that they're contained
in the generic layer and it's called only once per operation.  A
recent change added a data dependency barrier to __verify_pcpu_ptr()
so this makes a minute but actual difference for archs w/ non-noop
data dependency barrier FWIW.

This patchset is on top of

  linus master c31c24b8251f ("Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux")
+ [1] [PATCH RFC] percpu: add data dependency barrier in percpu accessors and operations

diffstat follows.  Thanks.

 arch/x86/include/asm/percpu.h |    3 
 include/asm-generic/percpu.h  |  410 +++++++++++++++++++++----
 include/linux/percpu-defs.h   |  397 +++++++++++++++++++++++-
 include/linux/percpu.h        |  673 ------------------------------------------
 4 files changed, 729 insertions(+), 754 deletions(-)

--
tejun

[1] http://lkml.kernel.org/g/20140612135630.GA23606@htj.dyndns.org

             reply	other threads:[~2014-06-12 16:23 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-12 16:23 Tejun Heo [this message]
2014-06-12 16:23 ` [PATCH 01/12] percpu: disallow archs from overriding SHIFT_PERCPU_PTR() Tejun Heo
2014-06-13  1:58   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 02/12] percpu: introduce arch_raw_cpu_ptr() Tejun Heo
2014-06-13 17:10   ` Christoph Lameter
2014-06-13 18:24     ` Tejun Heo
2014-06-12 16:23 ` [PATCH 03/12] percpu: include/asm-generic/percpu.h should contain only arch-overridable parts Tejun Heo
2014-06-13 17:12   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 04/12] percpu: move accessors from include/linux/percpu.h to percpu-defs.h Tejun Heo
2014-06-13 17:13   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 05/12] percpu: reorganize include/linux/percpu-defs.h Tejun Heo
2014-06-13 17:16   ` Christoph Lameter
2014-06-13 18:25     ` Tejun Heo
2014-06-13 18:55       ` Christoph Lameter
2014-06-16 15:31         ` Christoph Lameter
2014-06-18 18:16           ` Tejun Heo
2014-06-19 21:07             ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 06/12] percpu: only allow sized arch overrides for {raw|this}_cpu_*() ops Tejun Heo
2014-06-13 17:18   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 07/12] percpu: move generic {raw|this}_cpu_*_N() definitions to include/asm-generic/percpu.h Tejun Heo
2014-06-13 17:19   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 08/12] percpu: move {raw|this}_cpu_*() definitions to include/linux/percpu-defs.h Tejun Heo
2014-06-13 17:20   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 09/12] percpu: reorder macros in percpu header files Tejun Heo
2014-06-13 17:21   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 10/12] percpu: use raw_cpu_*() to define __this_cpu_*() Tejun Heo
2014-06-13 17:22   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 11/12] percpu: preffity percpu header files Tejun Heo
2014-06-13 17:23   ` Christoph Lameter
2014-06-12 16:23 ` [PATCH 12/12] percpu: invoke __verify_pcpu_ptr() from the generic part of accessors and operations Tejun Heo
2014-06-17 23:20   ` [PATCH UPDATED " Tejun Heo
2014-06-17 23:22 ` [PATCHSET percpu/for-3.17] percpu: clean up percpu accessor and operation definitions Tejun Heo
2014-06-19 21:05   ` Christoph Lameter
2014-06-19 21:09     ` Tejun Heo

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=1402590209-31610-1-git-send-email-tj@kernel.org \
    --to=tj@kernel.org \
    --cc=cl@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.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.