lkml.org 
[lkml]   [2012]   [Mar]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 30/38] Create asm-generic/barrier.h [ver #3]
    Date
    Create asm-generic/barrier.h and move the barrier definitions from
    asm-generic/system.h to it.

    Signed-off-by: David Howells <dhowells@redhat.com>
    Acked-by: Arnd Bergmann <arnd@arndb.de>
    ---

    include/asm-generic/barrier.h | 50 +++++++++++++++++++++++++++++++++++++++++
    include/asm-generic/system.h | 34 +---------------------------
    2 files changed, 51 insertions(+), 33 deletions(-)
    create mode 100644 include/asm-generic/barrier.h

    diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h
    new file mode 100644
    index 0000000..639d7a4
    --- /dev/null
    +++ b/include/asm-generic/barrier.h
    @@ -0,0 +1,50 @@
    +/* Generic barrier definitions, based on MN10300 definitions.
    + *
    + * It should be possible to use these on really simple architectures,
    + * but it serves more as a starting point for new ports.
    + *
    + * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
    + * Written by David Howells (dhowells@redhat.com)
    + *
    + * This program is free software; you can redistribute it and/or
    + * modify it under the terms of the GNU General Public Licence
    + * as published by the Free Software Foundation; either version
    + * 2 of the Licence, or (at your option) any later version.
    + */
    +#ifndef __ASM_GENERIC_BARRIER_H
    +#define __ASM_GENERIC_BARRIER_H
    +
    +#ifndef __ASSEMBLY__
    +
    +#define nop() asm volatile ("nop")
    +
    +/*
    + * Force strict CPU ordering.
    + * And yes, this is required on UP too when we're talking
    + * to devices.
    + *
    + * This implementation only contains a compiler barrier.
    + */
    +
    +#define mb() asm volatile ("": : :"memory")
    +#define rmb() mb()
    +#define wmb() asm volatile ("": : :"memory")
    +
    +#ifdef CONFIG_SMP
    +#define smp_mb() mb()
    +#define smp_rmb() rmb()
    +#define smp_wmb() wmb()
    +#else
    +#define smp_mb() barrier()
    +#define smp_rmb() barrier()
    +#define smp_wmb() barrier()
    +#endif
    +
    +#define set_mb(var, value) do { var = value; mb(); } while (0)
    +#define set_wmb(var, value) do { var = value; wmb(); } while (0)
    +
    +#define read_barrier_depends() do {} while (0)
    +#define smp_read_barrier_depends() do {} while (0)
    +
    +#endif /* !__ASSEMBLY__ */
    +#endif /* __ASM_GENERIC_BARRIER_H */
    diff --git a/include/asm-generic/system.h b/include/asm-generic/system.h
    index 82cb53a..f98f693 100644
    --- a/include/asm-generic/system.h
    +++ b/include/asm-generic/system.h
    @@ -19,6 +19,7 @@
    #include <linux/types.h>
    #include <linux/irqflags.h>

    +#include <asm/barrier.h>
    #include <asm/cmpxchg.h>

    struct task_struct;
    @@ -33,42 +34,9 @@ extern struct task_struct *__switch_to(struct task_struct *,

    #define arch_align_stack(x) (x)

    -#define nop() asm volatile ("nop")
    -
    -#endif /* !__ASSEMBLY__ */
    -
    -/*
    - * Force strict CPU ordering.
    - * And yes, this is required on UP too when we're talking
    - * to devices.
    - *
    - * This implementation only contains a compiler barrier.
    - */
    -
    -#define mb() asm volatile ("": : :"memory")
    -#define rmb() mb()
    -#define wmb() asm volatile ("": : :"memory")
    -
    -#ifdef CONFIG_SMP
    -#define smp_mb() mb()
    -#define smp_rmb() rmb()
    -#define smp_wmb() wmb()
    -#else
    -#define smp_mb() barrier()
    -#define smp_rmb() barrier()
    -#define smp_wmb() barrier()
    -#endif
    -
    -#define set_mb(var, value) do { var = value; mb(); } while (0)
    -#define set_wmb(var, value) do { var = value; wmb(); } while (0)
    -
    -#define read_barrier_depends() do {} while (0)
    -#define smp_read_barrier_depends() do {} while (0)
    -
    /*
    * we make sure local_irq_enable() doesn't cause priority inversion
    */
    -#ifndef __ASSEMBLY__

    /* This function doesn't exist, so you'll get a linker error
    * if something tries to do an invalid xchg(). */


    \
     
     \ /
      Last update: 2012-03-15 22:03    [W:2.812 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site