From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Schwierzeck Date: Tue, 7 Aug 2018 16:51:37 +0200 Subject: [U-Boot] [PATCH 2/4] mips: Add arch/mips/include/asm/atomic.h In-Reply-To: <20180806151109.29911-2-sr@denx.de> References: <20180806151109.29911-1-sr@denx.de> <20180806151109.29911-2-sr@denx.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 2018-08-06 17:11 GMT+02:00 Stefan Roese : > This is needed for the UBIFS support. The file is a copy of > arch/xtensa/include/asm/atomic.h could you try to import this file from Linux MIPS? Then we would have optimized functions. Other way would be to import include/asm-generic/atomic.h from Linux so that all architectures in U-Boot could at least use a generic version. > > Signed-off-by: Stefan Roese > Cc: Daniel Schwierzeck > --- > arch/mips/include/asm/atomic.h | 54 ++++++++++++++++++++++++++++++++++ > 1 file changed, 54 insertions(+) > create mode 100644 arch/mips/include/asm/atomic.h > > diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h > new file mode 100644 > index 0000000000..7551bf6e6c > --- /dev/null > +++ b/arch/mips/include/asm/atomic.h > @@ -0,0 +1,54 @@ > +/* SPDX-License-Identifier: GPL-2.0+ */ > +/* > + * Copyright (C) 2016 Cadence Design Systems Inc. > + */ > + > +#ifndef _MIPS_ATOMIC_H > +#define _MIPS_ATOMIC_H > + > +#include > + > +typedef struct { volatile int counter; } atomic_t; > + > +#define ATOMIC_INIT(i) { (i) } > + > +#define atomic_read(v) ((v)->counter) > +#define atomic_set(v, i) ((v)->counter = (i)) > + > +static inline void atomic_add(int i, atomic_t *v) > +{ > + unsigned long flags; > + > + local_irq_save(flags); > + v->counter += i; > + local_irq_restore(flags); > +} > + > +static inline void atomic_sub(int i, atomic_t *v) > +{ > + unsigned long flags; > + > + local_irq_save(flags); > + v->counter -= i; > + local_irq_restore(flags); > +} > + > +static inline void atomic_inc(atomic_t *v) > +{ > + unsigned long flags; > + > + local_irq_save(flags); > + ++v->counter; > + local_irq_restore(flags); > +} > + > +static inline void atomic_dec(atomic_t *v) > +{ > + unsigned long flags; > + > + local_irq_save(flags); > + --v->counter; > + local_irq_restore(flags); > +} > + > +#endif > -- > 2.18.0 > -- - Daniel