Re: [PATCH 2/4] arch: Clean up asm/barrier.h implementations using asm-generic/barrier.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



(forwarded due to SMTP issues)

----- Forwarded Message -----
> From: "Mathieu Desnoyers" <compudj@xxxxxxxxxxxxxxxxxx>
> To: "mathieu desnoyers" <mathieu.desnoyers@xxxxxxxxxxxx>
> Sent: Friday, November 8, 2013 1:26:45 AM
> Subject: (forw) [mathieu.desnoyers@xxxxxxxxxxxx: Re: [PATCH 2/4] arch: Clean up asm/barrier.h implementations using
> asm-generic/barrier.h]
> 
> ----- Forwarded message from Mathieu Desnoyers
> <mathieu.desnoyers@xxxxxxxxxxxx> -----
> 
> Date: Thu, 7 Nov 2013 15:22:56 -0500
> To: peterz@xxxxxxxxxxxxx
> Cc: linux-arch@xxxxxxxxxxxxxxx, geert@xxxxxxxxxxxxxx,
> paulmck@xxxxxxxxxxxxxxxxxx, torvalds@xxxxxxxxxxxxxxxxxxxx,
> VICTORK@xxxxxxxxxx, oleg@xxxxxxxxxx, anton@xxxxxxxxx,
> 	benh@xxxxxxxxxxxxxxxxxxx, fweisbec@xxxxxxxxx, michael@xxxxxxxxxxxxxx,
> 	mikey@xxxxxxxxxxx, linux@xxxxxxxxxxxxxxxx, schwidefsky@xxxxxxxxxx,
> 	heiko.carstens@xxxxxxxxxx, tony.luck@xxxxxxxxx
> User-Agent: Mutt/1.5.21 (2010-09-15)
> From: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>
> Subject: Re: [PATCH 2/4] arch: Clean up asm/barrier.h implementations using
> asm-generic/barrier.h
> 
> * peterz@xxxxxxxxxxxxx (peterz@xxxxxxxxxxxxx) wrote:
> > We're going to be adding a few new barrier primitives, and in order to
> > avoid endless duplication make more agressive use of
> > asm-generic/barrier.h.
> > 
> > Change the asm-generic/barrier.h such that it allows partial barrier
> > definitions and fills out the rest with defaults.
> > 
> > There are a few architectures (h8300, m32r, m68k) that could probably
> > do away with their barrier.h file entirely but are kept for now due to
> > their unconventional nop() implementation.
> 
> FWIW, we're using a very similar scheme for our memory barrier
> implementation in Userspace RCU. We include a generic header at the end,
> and we have per-architecture macro override, with ifdefs to see if we
> need to use the generic version.
> 
> Comments below,
> 
> > 
> > Cc: Tony Luck <tony.luck@xxxxxxxxx>
> > Cc: Oleg Nesterov <oleg@xxxxxxxxxx>
> > Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>
> > Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx>
> > Cc: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxx>
> > Cc: Michael Ellerman <michael@xxxxxxxxxxxxxx>
> > Cc: Michael Neuling <mikey@xxxxxxxxxxx>
> > Cc: Russell King <linux@xxxxxxxxxxxxxxxx>
> > Cc: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
> > Cc: Heiko Carstens <heiko.carstens@xxxxxxxxxx>
> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> > Cc: Martin Schwidefsky <schwidefsky@xxxxxxxxxx>
> > Cc: Victor Kaplansky <VICTORK@xxxxxxxxxx>
> > Suggested-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
> > Reviewed-by: "Paul E. McKenney" <paulmck@xxxxxxxxxxxxxxxxxx>
> > Signed-off-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> > ---
> >  arch/alpha/include/asm/barrier.h      |   25 ++--------
> >  arch/arc/include/asm/Kbuild           |    1
> >  arch/arc/include/asm/atomic.h         |    5 ++
> >  arch/arc/include/asm/barrier.h        |   42 -----------------
> >  arch/avr32/include/asm/barrier.h      |   17 ++-----
> >  arch/blackfin/include/asm/barrier.h   |   18 -------
> >  arch/cris/include/asm/Kbuild          |    1
> >  arch/cris/include/asm/barrier.h       |   25 ----------
> >  arch/frv/include/asm/barrier.h        |    8 ---
> >  arch/h8300/include/asm/barrier.h      |   21 --------
> >  arch/hexagon/include/asm/Kbuild       |    1
> >  arch/hexagon/include/asm/barrier.h    |   41 -----------------
> >  arch/m32r/include/asm/barrier.h       |   80
> >  ----------------------------------
> >  arch/m68k/include/asm/barrier.h       |   14 -----
> >  arch/microblaze/include/asm/Kbuild    |    1
> >  arch/microblaze/include/asm/barrier.h |   27 -----------
> >  arch/mn10300/include/asm/Kbuild       |    1
> >  arch/mn10300/include/asm/barrier.h    |   37 ---------------
> >  arch/parisc/include/asm/Kbuild        |    1
> >  arch/parisc/include/asm/barrier.h     |   35 --------------
> >  arch/score/include/asm/Kbuild         |    1
> >  arch/score/include/asm/barrier.h      |   16 ------
> >  arch/sh/include/asm/barrier.h         |   21 +-------
> >  arch/sparc/include/asm/barrier_32.h   |   11 ----
> >  arch/tile/include/asm/barrier.h       |   68 ----------------------------
> >  arch/unicore32/include/asm/barrier.h  |   11 ----
> >  arch/xtensa/include/asm/barrier.h     |    9 ---
> >  include/asm-generic/barrier.h         |   44 ++++++++++++------
> >  28 files changed, 64 insertions(+), 518 deletions(-)
> > 
> [...]
> 
> > Index: linux-2.6/arch/arc/include/asm/atomic.h
> > ===================================================================
> > --- linux-2.6.orig/arch/arc/include/asm/atomic.h	2013-11-07
> > 17:03:11.626900787 +0100
> > +++ linux-2.6/arch/arc/include/asm/atomic.h	2013-11-07 17:03:11.607900434
> > +0100
> > @@ -190,6 +190,11 @@
> >  
> >  #endif /* !CONFIG_ARC_HAS_LLSC */
> >  
> > +#define smp_mb__before_atomic_dec()	barrier()
> > +#define smp_mb__after_atomic_dec()	barrier()
> > +#define smp_mb__before_atomic_inc()	barrier()
> > +#define smp_mb__after_atomic_inc()	barrier()
> 
> Maybe split the before/after atomic inc/dec change to a separate patch ?
> 
> > +
> >  /**
> >   * __atomic_add_unless - add unless the number is a given value
> >   * @v: pointer of type atomic_t
> > Index: linux-2.6/arch/arc/include/asm/barrier.h
> > ===================================================================
> > --- linux-2.6.orig/arch/arc/include/asm/barrier.h	2013-11-07
> > 17:03:11.626900787 +0100
> > +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
> > @@ -1,42 +0,0 @@
> > -/*
> > - * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc.
> > (www.synopsys.com)
> > - *
> > - * This program is free software; you can redistribute it and/or modify
> > - * it under the terms of the GNU General Public License version 2 as
> > - * published by the Free Software Foundation.
> > - */
> > -
> > -#ifndef __ASM_BARRIER_H
> > -#define __ASM_BARRIER_H
> > -
> > -#ifndef __ASSEMBLY__
> > -
> > -/* TODO-vineetg: Need to see what this does, don't we need sync anywhere
> > */
> > -#define mb() __asm__ __volatile__ ("" : : : "memory")
> > -#define rmb() mb()
> > -#define wmb() mb()
> > -#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()  mb()
> > -
> > -/* TODO-vineetg verify the correctness of macros here */
> > -#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 smp_mb__before_atomic_dec()	barrier()
> > -#define smp_mb__after_atomic_dec()	barrier()
> > -#define smp_mb__before_atomic_inc()	barrier()
> > -#define smp_mb__after_atomic_inc()	barrier()
> > -
> > -#define smp_read_barrier_depends()      do { } while (0)
> > -
> > -#endif
> > -
> > -#endif
> 
> [...]
> 
> > Index: linux-2.6/arch/hexagon/include/asm/barrier.h
> > ===================================================================
> > --- linux-2.6.orig/arch/hexagon/include/asm/barrier.h	2013-11-07
> > 17:03:11.626900787 +0100
> > +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
> > @@ -1,41 +0,0 @@
> > -/*
> > - * Memory barrier definitions for the Hexagon architecture
> > - *
> > - * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
> > - *
> > - * This program is free software; you can redistribute it and/or modify
> > - * it under the terms of the GNU General Public License version 2 and
> > - * only version 2 as published by the Free Software Foundation.
> > - *
> > - * This program is distributed in the hope that it will be useful,
> > - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > - * GNU General Public License for more details.
> > - *
> > - * You should have received a copy of the GNU General Public License
> > - * along with this program; if not, write to the Free Software
> > - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> > - * 02110-1301, USA.
> > - */
> > -
> > -#ifndef _ASM_BARRIER_H
> > -#define _ASM_BARRIER_H
> > -
> > -#define rmb()				barrier()
> > -#define read_barrier_depends()		barrier()
> > -#define wmb()				barrier()
> > -#define mb()				barrier()
> > -#define smp_rmb()			barrier()
> > -#define smp_read_barrier_depends()	barrier()
> > -#define smp_wmb()			barrier()
> > -#define smp_mb()			barrier()
> > -#define smp_mb__before_atomic_dec()	barrier()
> > -#define smp_mb__after_atomic_dec()	barrier()
> > -#define smp_mb__before_atomic_inc()	barrier()
> > -#define smp_mb__after_atomic_inc()	barrier()
> 
> This seems to remove before/after atomic inc/dec for hexagon, but I
> don't see where they are added back ?
> 
> > -
> > -/*  Set a value and use a memory barrier.  Used by the scheduler
> > somewhere.  */
> > -#define set_mb(var, value) \
> > -	do { var = value; mb(); } while (0)
> > -
> > -#endif /* _ASM_BARRIER_H */
> 
> [...]
> 
> > Index: linux-2.6/include/asm-generic/barrier.h
> > ===================================================================
> > --- linux-2.6.orig/include/asm-generic/barrier.h	2013-11-07
> > 17:03:11.626900787 +0100
> > +++ linux-2.6/include/asm-generic/barrier.h	2013-11-07 17:03:11.623900731
> > +0100
> > @@ -1,4 +1,5 @@
> > -/* Generic barrier definitions, based on MN10300 definitions.
> > +/*
> > + * Generic barrier definitions, originally 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.
> > @@ -16,35 +17,50 @@
> >  
> >  #ifndef __ASSEMBLY__
> >  
> > -#define nop() asm volatile ("nop")
> > +#include <linux/compiler.h>
> > +
> > +#ifndef nop
> > +#define nop()	asm volatile ("nop")
> > +#endif
> >  
> 
> I don't really understand why "no-op" sits within barrier.h. It might be
> a lack of imagination on my part though.
> 
> Other than that
> 
> Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>
> 
> Thanks,
> 
> Mathieu
> 
> --
> Mathieu Desnoyers
> EfficiOS Inc.
> http://www.efficios.com
> 
> ----- End forwarded message -----
> 
> --
> Mathieu Desnoyers
> EfficiOS Inc.
> http://www.efficios.com
> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
--
To unsubscribe from this list: send the line "unsubscribe linux-arch" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux