[U-Boot] [PATCH 2/4] mips: Add arch/mips/include/asm/atomic.h

Daniel Schwierzeck daniel.schwierzeck at gmail.com
Tue Aug 7 14:51:37 UTC 2018


2018-08-06 17:11 GMT+02:00 Stefan Roese <sr at denx.de>:
> 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 <sr at denx.de>
> Cc: Daniel Schwierzeck <daniel.schwierzeck at gmail.com>
> ---
>  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 <asm/system.h>
> +
> +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


More information about the U-Boot mailing list