From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754823Ab2CMEoN (ORCPT ); Tue, 13 Mar 2012 00:44:13 -0400 Received: from mail-vx0-f174.google.com ([209.85.220.174]:48936 "EHLO mail-vx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753066Ab2CMEoL convert rfc822-to-8bit (ORCPT ); Tue, 13 Mar 2012 00:44:11 -0400 MIME-Version: 1.0 In-Reply-To: <20120312233656.13888.39270.stgit@warthog.procyon.org.uk> References: <20120312233602.13888.27659.stgit@warthog.procyon.org.uk> <20120312233656.13888.39270.stgit@warthog.procyon.org.uk> Date: Tue, 13 Mar 2012 12:44:10 +0800 Message-ID: Subject: Re: [PATCH 05/35] Disintegrate asm/system.h for Blackfin [ver #2] From: Bob Liu To: David Howells Cc: paul.gortmaker@windriver.com, hpa@zytor.com, torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org, arnd@arndb.de, uclinux-dist-devel@blackfin.uclinux.org, Mike Frysinger Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 13, 2012 at 7:36 AM, David Howells wrote: > Disintegrate asm/system.h for Blackfin. > > Signed-off-by: David Howells > cc: uclinux-dist-devel@blackfin.uclinux.org Thanks, i'll apply it. > --- > >  arch/blackfin/include/asm/atomic.h      |    2 >  arch/blackfin/include/asm/barrier.h     |   48 ++++++++ >  arch/blackfin/include/asm/cmpxchg.h     |  132 +++++++++++++++++++++ >  arch/blackfin/include/asm/exec.h        |    1 >  arch/blackfin/include/asm/irq_handler.h |    1 >  arch/blackfin/include/asm/switch_to.h   |   39 ++++++ >  arch/blackfin/include/asm/system.h      |  197 +------------------------------ >  arch/blackfin/kernel/asm-offsets.c      |    1 >  arch/blackfin/kernel/ipipe.c            |    1 >  arch/blackfin/kernel/kgdb_test.c        |    1 >  arch/blackfin/kernel/process.c          |    1 >  arch/blackfin/kernel/ptrace.c           |    1 >  arch/blackfin/kernel/reboot.c           |    1 >  arch/blackfin/kernel/setup.c            |    1 >  arch/blackfin/kernel/trace.c            |    1 >  arch/blackfin/kernel/traps.c            |    1 >  16 files changed, 233 insertions(+), 196 deletions(-) >  create mode 100644 arch/blackfin/include/asm/barrier.h >  create mode 100644 arch/blackfin/include/asm/cmpxchg.h >  create mode 100644 arch/blackfin/include/asm/exec.h >  create mode 100644 arch/blackfin/include/asm/switch_to.h > > diff --git a/arch/blackfin/include/asm/atomic.h b/arch/blackfin/include/asm/atomic.h > index 54c6e28..c8db653 100644 > --- a/arch/blackfin/include/asm/atomic.h > +++ b/arch/blackfin/include/asm/atomic.h > @@ -7,6 +7,8 @@ >  #ifndef __ARCH_BLACKFIN_ATOMIC__ >  #define __ARCH_BLACKFIN_ATOMIC__ > > +#include > + >  #ifdef CONFIG_SMP > >  #include > diff --git a/arch/blackfin/include/asm/barrier.h b/arch/blackfin/include/asm/barrier.h > new file mode 100644 > index 0000000..ebb1895 > --- /dev/null > +++ b/arch/blackfin/include/asm/barrier.h > @@ -0,0 +1,48 @@ > +/* > + * Copyright 2004-2009 Analog Devices Inc. > + *               Tony Kou (tonyko@lineo.ca) > + * > + * Licensed under the GPL-2 or later > + */ > + > +#ifndef _BLACKFIN_BARRIER_H > +#define _BLACKFIN_BARRIER_H > + > +#include > + > +#define nop()  __asm__ __volatile__ ("nop;\n\t" : : ) > + > +/* > + * Force strict CPU ordering. > + */ > +#ifdef CONFIG_SMP > + > +#ifdef __ARCH_SYNC_CORE_DCACHE > +/* Force Core data cache coherence */ > +# define mb()  do { barrier(); smp_check_barrier(); smp_mark_barrier(); } while (0) > +# define rmb() do { barrier(); smp_check_barrier(); } while (0) > +# define wmb() do { barrier(); smp_mark_barrier(); } while (0) > +# define read_barrier_depends()        do { barrier(); smp_check_barrier(); } while (0) > +#else > +# define mb()  barrier() > +# define rmb() barrier() > +# define wmb() barrier() > +# define read_barrier_depends()        do { } while (0) > +#endif > + > +#else /* !CONFIG_SMP */ > + > +#define mb()   barrier() > +#define rmb()  barrier() > +#define wmb()  barrier() > +#define read_barrier_depends() do { } while (0) > + > +#endif /* !CONFIG_SMP */ > + > +#define smp_mb()  mb() > +#define smp_rmb() rmb() > +#define smp_wmb() wmb() > +#define set_mb(var, value) do { var = value; mb(); } while (0) > +#define smp_read_barrier_depends()     read_barrier_depends() > + > +#endif /* _BLACKFIN_BARRIER_H */ > diff --git a/arch/blackfin/include/asm/cmpxchg.h b/arch/blackfin/include/asm/cmpxchg.h > new file mode 100644 > index 0000000..ba2484f > --- /dev/null > +++ b/arch/blackfin/include/asm/cmpxchg.h > @@ -0,0 +1,132 @@ > +/* > + * Copyright 2004-2011 Analog Devices Inc. > + * > + * Licensed under the GPL-2 or later. > + */ > + > +#ifndef __ARCH_BLACKFIN_CMPXCHG__ > +#define __ARCH_BLACKFIN_CMPXCHG__ > + > +#ifdef CONFIG_SMP > + > +#include > + > +asmlinkage unsigned long __raw_xchg_1_asm(volatile void *ptr, unsigned long value); > +asmlinkage unsigned long __raw_xchg_2_asm(volatile void *ptr, unsigned long value); > +asmlinkage unsigned long __raw_xchg_4_asm(volatile void *ptr, unsigned long value); > +asmlinkage unsigned long __raw_cmpxchg_1_asm(volatile void *ptr, > +                                       unsigned long new, unsigned long old); > +asmlinkage unsigned long __raw_cmpxchg_2_asm(volatile void *ptr, > +                                       unsigned long new, unsigned long old); > +asmlinkage unsigned long __raw_cmpxchg_4_asm(volatile void *ptr, > +                                       unsigned long new, unsigned long old); > + > +static inline unsigned long __xchg(unsigned long x, volatile void *ptr, > +                                  int size) > +{ > +       unsigned long tmp; > + > +       switch (size) { > +       case 1: > +               tmp = __raw_xchg_1_asm(ptr, x); > +               break; > +       case 2: > +               tmp = __raw_xchg_2_asm(ptr, x); > +               break; > +       case 4: > +               tmp = __raw_xchg_4_asm(ptr, x); > +               break; > +       } > + > +       return tmp; > +} > + > +/* > + * Atomic compare and exchange.  Compare OLD with MEM, if identical, > + * store NEW in MEM.  Return the initial value in MEM.  Success is > + * indicated by comparing RETURN with OLD. > + */ > +static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, > +                                     unsigned long new, int size) > +{ > +       unsigned long tmp; > + > +       switch (size) { > +       case 1: > +               tmp = __raw_cmpxchg_1_asm(ptr, new, old); > +               break; > +       case 2: > +               tmp = __raw_cmpxchg_2_asm(ptr, new, old); > +               break; > +       case 4: > +               tmp = __raw_cmpxchg_4_asm(ptr, new, old); > +               break; > +       } > + > +       return tmp; > +} > +#define cmpxchg(ptr, o, n) \ > +       ((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o), \ > +               (unsigned long)(n), sizeof(*(ptr)))) > + > +#else /* !CONFIG_SMP */ > + > +#include > +#include > + > +struct __xchg_dummy { > +       unsigned long a[100]; > +}; > +#define __xg(x) ((volatile struct __xchg_dummy *)(x)) > + > +static inline unsigned long __xchg(unsigned long x, volatile void *ptr, > +                                  int size) > +{ > +       unsigned long tmp = 0; > +       unsigned long flags; > + > +       flags = hard_local_irq_save(); > + > +       switch (size) { > +       case 1: > +               __asm__ __volatile__ > +                       ("%0 = b%2 (z);\n\t" > +                        "b%2 = %1;\n\t" > +                        : "=&d" (tmp) : "d" (x), "m" (*__xg(ptr)) : "memory"); > +               break; > +       case 2: > +               __asm__ __volatile__ > +                       ("%0 = w%2 (z);\n\t" > +                        "w%2 = %1;\n\t" > +                        : "=&d" (tmp) : "d" (x), "m" (*__xg(ptr)) : "memory"); > +               break; > +       case 4: > +               __asm__ __volatile__ > +                       ("%0 = %2;\n\t" > +                        "%2 = %1;\n\t" > +                        : "=&d" (tmp) : "d" (x), "m" (*__xg(ptr)) : "memory"); > +               break; > +       } > +       hard_local_irq_restore(flags); > +       return tmp; > +} > + > +#include > + > +/* > + * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make > + * them available. > + */ > +#define cmpxchg_local(ptr, o, n)                                              \ > +       ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ > +                       (unsigned long)(n), sizeof(*(ptr)))) > +#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) > + > +#include > + > +#endif /* !CONFIG_SMP */ > + > +#define xchg(ptr, x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) > +#define tas(ptr) ((void)xchg((ptr), 1)) > + > +#endif /* __ARCH_BLACKFIN_CMPXCHG__ */ > diff --git a/arch/blackfin/include/asm/exec.h b/arch/blackfin/include/asm/exec.h > new file mode 100644 > index 0000000..54c2e1d > --- /dev/null > +++ b/arch/blackfin/include/asm/exec.h > @@ -0,0 +1 @@ > +/* define arch_align_stack() here */ > diff --git a/arch/blackfin/include/asm/irq_handler.h b/arch/blackfin/include/asm/irq_handler.h > index ee73f79..4fbf835 100644 > --- a/arch/blackfin/include/asm/irq_handler.h > +++ b/arch/blackfin/include/asm/irq_handler.h > @@ -9,6 +9,7 @@ > >  #include >  #include > +#include > >  /* init functions only */ >  extern int __init init_arch_irq(void); > diff --git a/arch/blackfin/include/asm/switch_to.h b/arch/blackfin/include/asm/switch_to.h > new file mode 100644 > index 0000000..aaf671b > --- /dev/null > +++ b/arch/blackfin/include/asm/switch_to.h > @@ -0,0 +1,39 @@ > +/* > + * Copyright 2004-2009 Analog Devices Inc. > + *               Tony Kou (tonyko@lineo.ca) > + * > + * Licensed under the GPL-2 or later > + */ > + > +#ifndef _BLACKFIN_SWITCH_TO_H > +#define _BLACKFIN_SWITCH_TO_H > + > +#define prepare_to_switch()     do { } while(0) > + > +/* > + * switch_to(n) should switch tasks to task ptr, first checking that > + * ptr isn't the current task, in which case it does nothing. > + */ > + > +#include > +#include > + > +asmlinkage struct task_struct *resume(struct task_struct *prev, struct task_struct *next); > + > +#ifndef CONFIG_SMP > +#define switch_to(prev,next,last) \ > +do {    \ > +       memcpy (&task_thread_info(prev)->l1_task_info, L1_SCRATCH_TASK_INFO, \ > +               sizeof *L1_SCRATCH_TASK_INFO); \ > +       memcpy (L1_SCRATCH_TASK_INFO, &task_thread_info(next)->l1_task_info, \ > +               sizeof *L1_SCRATCH_TASK_INFO); \ > +       (last) = resume (prev, next);   \ > +} while (0) > +#else > +#define switch_to(prev, next, last) \ > +do {    \ > +       (last) = resume(prev, next);   \ > +} while (0) > +#endif > + > +#endif /* _BLACKFIN_SWITCH_TO_H */ > diff --git a/arch/blackfin/include/asm/system.h b/arch/blackfin/include/asm/system.h > index 44bd0cc..a7f4057 100644 > --- a/arch/blackfin/include/asm/system.h > +++ b/arch/blackfin/include/asm/system.h > @@ -1,192 +1,5 @@ > -/* > - * Copyright 2004-2009 Analog Devices Inc. > - *               Tony Kou (tonyko@lineo.ca) > - * > - * Licensed under the GPL-2 or later > - */ > - > -#ifndef _BLACKFIN_SYSTEM_H > -#define _BLACKFIN_SYSTEM_H > - > -#include > -#include > -#include > -#include > -#include > -#include > - > -/* > - * Force strict CPU ordering. > - */ > -#define nop()  __asm__ __volatile__ ("nop;\n\t" : : ) > -#define smp_mb()  mb() > -#define smp_rmb() rmb() > -#define smp_wmb() wmb() > -#define set_mb(var, value) do { var = value; mb(); } while (0) > -#define smp_read_barrier_depends()     read_barrier_depends() > - > -#ifdef CONFIG_SMP > -asmlinkage unsigned long __raw_xchg_1_asm(volatile void *ptr, unsigned long value); > -asmlinkage unsigned long __raw_xchg_2_asm(volatile void *ptr, unsigned long value); > -asmlinkage unsigned long __raw_xchg_4_asm(volatile void *ptr, unsigned long value); > -asmlinkage unsigned long __raw_cmpxchg_1_asm(volatile void *ptr, > -                                       unsigned long new, unsigned long old); > -asmlinkage unsigned long __raw_cmpxchg_2_asm(volatile void *ptr, > -                                       unsigned long new, unsigned long old); > -asmlinkage unsigned long __raw_cmpxchg_4_asm(volatile void *ptr, > -                                       unsigned long new, unsigned long old); > - > -#ifdef __ARCH_SYNC_CORE_DCACHE > -/* Force Core data cache coherence */ > -# define mb()  do { barrier(); smp_check_barrier(); smp_mark_barrier(); } while (0) > -# define rmb() do { barrier(); smp_check_barrier(); } while (0) > -# define wmb() do { barrier(); smp_mark_barrier(); } while (0) > -# define read_barrier_depends()        do { barrier(); smp_check_barrier(); } while (0) > -#else > -# define mb()  barrier() > -# define rmb() barrier() > -# define wmb() barrier() > -# define read_barrier_depends()        do { } while (0) > -#endif > - > -static inline unsigned long __xchg(unsigned long x, volatile void *ptr, > -                                  int size) > -{ > -       unsigned long tmp; > - > -       switch (size) { > -       case 1: > -               tmp = __raw_xchg_1_asm(ptr, x); > -               break; > -       case 2: > -               tmp = __raw_xchg_2_asm(ptr, x); > -               break; > -       case 4: > -               tmp = __raw_xchg_4_asm(ptr, x); > -               break; > -       } > - > -       return tmp; > -} > - > -/* > - * Atomic compare and exchange.  Compare OLD with MEM, if identical, > - * store NEW in MEM.  Return the initial value in MEM.  Success is > - * indicated by comparing RETURN with OLD. > - */ > -static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, > -                                     unsigned long new, int size) > -{ > -       unsigned long tmp; > - > -       switch (size) { > -       case 1: > -               tmp = __raw_cmpxchg_1_asm(ptr, new, old); > -               break; > -       case 2: > -               tmp = __raw_cmpxchg_2_asm(ptr, new, old); > -               break; > -       case 4: > -               tmp = __raw_cmpxchg_4_asm(ptr, new, old); > -               break; > -       } > - > -       return tmp; > -} > -#define cmpxchg(ptr, o, n) \ > -       ((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o), \ > -               (unsigned long)(n), sizeof(*(ptr)))) > - > -#else /* !CONFIG_SMP */ > - > -#define mb()   barrier() > -#define rmb()  barrier() > -#define wmb()  barrier() > -#define read_barrier_depends() do { } while (0) > - > -struct __xchg_dummy { > -       unsigned long a[100]; > -}; > -#define __xg(x) ((volatile struct __xchg_dummy *)(x)) > - > -#include > - > -static inline unsigned long __xchg(unsigned long x, volatile void *ptr, > -                                  int size) > -{ > -       unsigned long tmp = 0; > -       unsigned long flags; > - > -       flags = hard_local_irq_save(); > - > -       switch (size) { > -       case 1: > -               __asm__ __volatile__ > -                       ("%0 = b%2 (z);\n\t" > -                        "b%2 = %1;\n\t" > -                        : "=&d" (tmp) : "d" (x), "m" (*__xg(ptr)) : "memory"); > -               break; > -       case 2: > -               __asm__ __volatile__ > -                       ("%0 = w%2 (z);\n\t" > -                        "w%2 = %1;\n\t" > -                        : "=&d" (tmp) : "d" (x), "m" (*__xg(ptr)) : "memory"); > -               break; > -       case 4: > -               __asm__ __volatile__ > -                       ("%0 = %2;\n\t" > -                        "%2 = %1;\n\t" > -                        : "=&d" (tmp) : "d" (x), "m" (*__xg(ptr)) : "memory"); > -               break; > -       } > -       hard_local_irq_restore(flags); > -       return tmp; > -} > - > -#include > - > -/* > - * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make > - * them available. > - */ > -#define cmpxchg_local(ptr, o, n)                                              \ > -       ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ > -                       (unsigned long)(n), sizeof(*(ptr)))) > -#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) > - > -#include > - > -#endif /* !CONFIG_SMP */ > - > -#define xchg(ptr, x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) > -#define tas(ptr) ((void)xchg((ptr), 1)) > - > -#define prepare_to_switch()     do { } while(0) > - > -/* > - * switch_to(n) should switch tasks to task ptr, first checking that > - * ptr isn't the current task, in which case it does nothing. > - */ > - > -#include > -#include > - > -asmlinkage struct task_struct *resume(struct task_struct *prev, struct task_struct *next); > - > -#ifndef CONFIG_SMP > -#define switch_to(prev,next,last) \ > -do {    \ > -       memcpy (&task_thread_info(prev)->l1_task_info, L1_SCRATCH_TASK_INFO, \ > -               sizeof *L1_SCRATCH_TASK_INFO); \ > -       memcpy (L1_SCRATCH_TASK_INFO, &task_thread_info(next)->l1_task_info, \ > -               sizeof *L1_SCRATCH_TASK_INFO); \ > -       (last) = resume (prev, next);   \ > -} while (0) > -#else > -#define switch_to(prev, next, last) \ > -do {    \ > -       (last) = resume(prev, next);   \ > -} while (0) > -#endif > - > -#endif /* _BLACKFIN_SYSTEM_H */ > +/* FILE TO BE DELETED. DO NOT ADD STUFF HERE! */ > +#include > +#include > +#include > +#include > diff --git a/arch/blackfin/kernel/asm-offsets.c b/arch/blackfin/kernel/asm-offsets.c > index 17e3546..37fcae9 100644 > --- a/arch/blackfin/kernel/asm-offsets.c > +++ b/arch/blackfin/kernel/asm-offsets.c > @@ -14,6 +14,7 @@ >  #include >  #include >  #include > +#include > >  int main(void) >  { > diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c > index dbe1122..f657b38 100644 > --- a/arch/blackfin/kernel/ipipe.c > +++ b/arch/blackfin/kernel/ipipe.c > @@ -31,7 +31,6 @@ >  #include >  #include >  #include > -#include >  #include >  #include > > diff --git a/arch/blackfin/kernel/kgdb_test.c b/arch/blackfin/kernel/kgdb_test.c > index 4a7dcfe..18ab004 100644 > --- a/arch/blackfin/kernel/kgdb_test.c > +++ b/arch/blackfin/kernel/kgdb_test.c > @@ -13,7 +13,6 @@ > >  #include >  #include > -#include > >  #include > > diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c > index 8dd0416..8c5369c 100644 > --- a/arch/blackfin/kernel/process.c > +++ b/arch/blackfin/kernel/process.c > @@ -19,6 +19,7 @@ >  #include >  #include >  #include > +#include > >  asmlinkage void ret_from_fork(void); > > diff --git a/arch/blackfin/kernel/ptrace.c b/arch/blackfin/kernel/ptrace.c > index 75089f8..e1f88e0 100644 > --- a/arch/blackfin/kernel/ptrace.c > +++ b/arch/blackfin/kernel/ptrace.c > @@ -20,7 +20,6 @@ > >  #include >  #include > -#include >  #include >  #include >  #include > diff --git a/arch/blackfin/kernel/reboot.c b/arch/blackfin/kernel/reboot.c > index c4c0081..b0434f8 100644 > --- a/arch/blackfin/kernel/reboot.c > +++ b/arch/blackfin/kernel/reboot.c > @@ -9,7 +9,6 @@ >  #include >  #include >  #include > -#include >  #include > >  /* A system soft reset makes external memory unusable so force > diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c > index d6102c8..2aa0193 100644 > --- a/arch/blackfin/kernel/setup.c > +++ b/arch/blackfin/kernel/setup.c > @@ -30,6 +30,7 @@ >  #include >  #include >  #include > +#include > >  u16 _bfin_swrst; >  EXPORT_SYMBOL(_bfin_swrst); > diff --git a/arch/blackfin/kernel/trace.c b/arch/blackfin/kernel/trace.c > index 050db44..44bbf2f 100644 > --- a/arch/blackfin/kernel/trace.c > +++ b/arch/blackfin/kernel/trace.c > @@ -21,6 +21,7 @@ >  #include >  #include >  #include > +#include > >  void decode_address(char *buf, unsigned long address) >  { > diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c > index 655f25d..de5c2c3 100644 > --- a/arch/blackfin/kernel/traps.c > +++ b/arch/blackfin/kernel/traps.c > @@ -17,6 +17,7 @@ >  #include >  #include >  #include > +#include > >  #ifdef CONFIG_KGDB >  # include > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at  http://vger.kernel.org/majordomo-info.html > Please read the FAQ at  http://www.tux.org/lkml/ -- Regards, --Bob