lkml.org 
[lkml]   [2011]   [May]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/9] Add Kconfig option ARCH_HAVE_NMI_SAFE_CMPXCHG
    Date
    cmpxchg() is widely used by lockless code, including NMI-safe lockless
    code. But on some architectures, the cmpxchg() implementation is not
    NMI-safe, on these architectures the lockless code may need to a
    spin_trylock_irqsave() based implementation.

    This patch adds a Kconfig option: ARCH_HAVE_NMI_SAFE_CMPXCHG, so that
    NMI-safe lockless code can depend on it or provide different
    implementation according to it.

    On many architectures, cmpxchg is only NMI-safe for several specific
    operand sizes. So, ARCH_HAVE_NMI_SAFE_CMPXCHG define in this patch
    only guarantees cmpxchg is NMI-safe for sizeof(unsigned long).

    Signed-off-by: Huang Ying <ying.huang@intel.com>
    Acked-by: Mike Frysinger <vapier@gentoo.org>
    Acked-by: Paul Mundt <lethal@linux-sh.org>
    Acked-by: Hans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
    Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Acked-by: Chris Metcalf <cmetcalf@tilera.com>
    CC: Richard Henderson <rth@twiddle.net>
    CC: Mikael Starvik <starvik@axis.com>
    CC: David Howells <dhowells@redhat.com>
    CC: Yoshinori Sato <ysato@users.sourceforge.jp>
    CC: Tony Luck <tony.luck@intel.com>
    CC: Hirokazu Takata <takata@linux-m32r.org>
    CC: Geert Uytterhoeven <geert@linux-m68k.org>
    CC: Michal Simek <monstr@monstr.eu>
    CC: Ralf Baechle <ralf@linux-mips.org>
    CC: Kyle McMartin <kyle@mcmartin.ca>
    CC: Martin Schwidefsky <schwidefsky@de.ibm.com>
    CC: Chen Liqin <liqin.chen@sunplusct.com>
    CC: "David S. Miller" <davem@davemloft.net>
    CC: Ingo Molnar <mingo@redhat.com>
    CC: Chris Zankel <chris@zankel.net>
    ---
    arch/Kconfig | 3 +++
    arch/alpha/Kconfig | 1 +
    arch/avr32/Kconfig | 1 +
    arch/frv/Kconfig | 1 +
    arch/ia64/Kconfig | 1 +
    arch/m68k/Kconfig | 1 +
    arch/parisc/Kconfig | 1 +
    arch/powerpc/Kconfig | 1 +
    arch/s390/Kconfig | 1 +
    arch/sh/Kconfig | 1 +
    arch/sparc/Kconfig | 1 +
    arch/tile/Kconfig | 1 +
    arch/x86/Kconfig | 1 +
    13 files changed, 15 insertions(+)

    --- a/arch/Kconfig
    +++ b/arch/Kconfig
    @@ -178,4 +178,7 @@ config HAVE_ARCH_JUMP_LABEL
    config HAVE_ARCH_MUTEX_CPU_RELAX
    bool

    +config ARCH_HAVE_NMI_SAFE_CMPXCHG
    + bool
    +
    source "kernel/gcov/Kconfig"
    --- a/arch/alpha/Kconfig
    +++ b/arch/alpha/Kconfig
    @@ -12,6 +12,7 @@ config ALPHA
    select GENERIC_IRQ_PROBE
    select AUTO_IRQ_AFFINITY if SMP
    select GENERIC_IRQ_SHOW
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG
    help
    The Alpha is a 64-bit general-purpose processor designed and
    marketed by the Digital Equipment Corporation of blessed memory,
    --- a/arch/avr32/Kconfig
    +++ b/arch/avr32/Kconfig
    @@ -10,6 +10,7 @@ config AVR32
    select GENERIC_IRQ_PROBE
    select HARDIRQS_SW_RESEND
    select GENERIC_IRQ_SHOW
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG
    help
    AVR32 is a high-performance 32-bit RISC microprocessor core,
    designed for cost-sensitive embedded applications, with particular
    --- a/arch/frv/Kconfig
    +++ b/arch/frv/Kconfig
    @@ -7,6 +7,7 @@ config FRV
    select HAVE_PERF_EVENTS
    select HAVE_GENERIC_HARDIRQS
    select GENERIC_IRQ_SHOW
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG

    config ZONE_DMA
    bool
    --- a/arch/ia64/Kconfig
    +++ b/arch/ia64/Kconfig
    @@ -27,6 +27,7 @@ config IA64
    select GENERIC_PENDING_IRQ if SMP
    select IRQ_PER_CPU
    select GENERIC_IRQ_SHOW
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG
    default y
    help
    The Itanium Processor Family is Intel's 64-bit successor to
    --- a/arch/m68k/Kconfig
    +++ b/arch/m68k/Kconfig
    @@ -5,6 +5,7 @@ config M68K
    select HAVE_AOUT if MMU
    select GENERIC_ATOMIC64 if MMU
    select HAVE_GENERIC_HARDIRQS if !MMU
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS

    config RWSEM_GENERIC_SPINLOCK
    bool
    --- a/arch/parisc/Kconfig
    +++ b/arch/parisc/Kconfig
    @@ -15,6 +15,7 @@ config PARISC
    select HAVE_GENERIC_HARDIRQS
    select GENERIC_IRQ_PROBE
    select IRQ_PER_CPU
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG

    help
    The PA-RISC microprocessor is designed by Hewlett-Packard and used
    --- a/arch/powerpc/Kconfig
    +++ b/arch/powerpc/Kconfig
    @@ -140,6 +140,7 @@ config PPC
    select IRQ_PER_CPU
    select GENERIC_IRQ_SHOW
    select GENERIC_IRQ_SHOW_LEVEL
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG

    config EARLY_PRINTK
    bool
    --- a/arch/s390/Kconfig
    +++ b/arch/s390/Kconfig
    @@ -81,6 +81,7 @@ config S390
    select INIT_ALL_POSSIBLE
    select HAVE_IRQ_WORK
    select HAVE_PERF_EVENTS
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG
    select HAVE_KERNEL_GZIP
    select HAVE_KERNEL_BZIP2
    select HAVE_KERNEL_LZMA
    --- a/arch/sh/Kconfig
    +++ b/arch/sh/Kconfig
    @@ -11,6 +11,7 @@ config SUPERH
    select HAVE_DMA_ATTRS
    select HAVE_IRQ_WORK
    select HAVE_PERF_EVENTS
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A)
    select PERF_USE_VMALLOC
    select HAVE_KERNEL_GZIP
    select HAVE_KERNEL_BZIP2
    --- a/arch/sparc/Kconfig
    +++ b/arch/sparc/Kconfig
    @@ -53,6 +53,7 @@ config SPARC64
    select HAVE_GENERIC_HARDIRQS
    select GENERIC_IRQ_SHOW
    select IRQ_PREFLOW_FASTEOI
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG

    config ARCH_DEFCONFIG
    string
    --- a/arch/tile/Kconfig
    +++ b/arch/tile/Kconfig
    @@ -12,6 +12,7 @@ config TILE
    select GENERIC_IRQ_PROBE
    select GENERIC_PENDING_IRQ if SMP
    select GENERIC_IRQ_SHOW
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG if !M386

    # FIXME: investigate whether we need/want these options.
    # select HAVE_IOREMAP_PROT
    --- a/arch/x86/Kconfig
    +++ b/arch/x86/Kconfig
    @@ -72,6 +72,7 @@ config X86
    select IRQ_FORCED_THREADING
    select USE_GENERIC_SMP_HELPERS if SMP
    select ARCH_NO_SYSDEV_OPS
    + select ARCH_HAVE_NMI_SAFE_CMPXCHG

    config INSTRUCTION_DECODER
    def_bool (KPROBES || PERF_EVENTS)

    \
     
     \ /
      Last update: 2011-05-17 10:11    [W:0.031 / U:29.156 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site