linux/include/asm-generic/barrier.h
<<
>>
Prefs
   1/* Generic barrier definitions, based on MN10300 definitions.
   2 *
   3 * It should be possible to use these on really simple architectures,
   4 * but it serves more as a starting point for new ports.
   5 *
   6 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
   7 * Written by David Howells (dhowells@redhat.com)
   8 *
   9 * This program is free software; you can redistribute it and/or
  10 * modify it under the terms of the GNU General Public Licence
  11 * as published by the Free Software Foundation; either version
  12 * 2 of the Licence, or (at your option) any later version.
  13 */
  14#ifndef __ASM_GENERIC_BARRIER_H
  15#define __ASM_GENERIC_BARRIER_H
  16
  17#ifndef __ASSEMBLY__
  18
  19#define nop() asm volatile ("nop")
  20
  21/*
  22 * Force strict CPU ordering.
  23 * And yes, this is required on UP too when we're talking
  24 * to devices.
  25 *
  26 * This implementation only contains a compiler barrier.
  27 */
  28
  29#define mb()    asm volatile ("": : :"memory")
  30#define rmb()   mb()
  31#define wmb()   asm volatile ("": : :"memory")
  32
  33#ifdef CONFIG_SMP
  34#define smp_mb()        mb()
  35#define smp_rmb()       rmb()
  36#define smp_wmb()       wmb()
  37#else
  38#define smp_mb()        barrier()
  39#define smp_rmb()       barrier()
  40#define smp_wmb()       barrier()
  41#endif
  42
  43#define set_mb(var, value)  do { var = value;  mb(); } while (0)
  44#define set_wmb(var, value) do { var = value; wmb(); } while (0)
  45
  46#define read_barrier_depends()          do {} while (0)
  47#define smp_read_barrier_depends()      do {} while (0)
  48
  49#endif /* !__ASSEMBLY__ */
  50#endif /* __ASM_GENERIC_BARRIER_H */
  51
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.