From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Thu, 22 Jan 2015 07:30:32 +0100 Subject: [U-Boot] [PATCH v3 1/2] Enable journal replay for UBIFS In-Reply-To: <20150121154744.GA30163@chhabea-vm-machine> References: <20150121154744.GA30163@chhabea-vm-machine> Message-ID: <54C09908.2050903@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Anton, Am 21.01.2015 16:47, schrieb Anton Habegger: > Hello Heiko > > Here the second patch you want. This needs to be applied > prior the real bug fix, becouse it solves the warning as > you mention as well. Thanks, I added Albert Aribaud to Cc, as he is the arm custodian, and please add such comments under a "---" line ... > > >>>From fd0a1377825638d15bc66b5f07a05beb14fe747c Mon Sep 17 00:00:00 2001 > From: Anton Habegger > Date: Wed, 21 Jan 2015 16:20:36 +0100 > Subject: [PATCH] ubifs: Import atomic_long operations from Linux > > The following operations are imported from Linux: > - atomic_long_read > - atomic_long_inc > - atomic_long_dec > - atomic_long_sub > > Therefor "include/asm-generic/atomic-long.h" is imported > from Linux 3.15 add please the commit id also here, thanks. > This commit is a preperation for a subsequent UBIFS commit > which needs such atomic_long operations > > Signed-off-by: Anton Habegger > --- > fs/ubifs/ubifs.c | 6 + > fs/ubifs/ubifs.h | 12 +- > include/asm-generic/atomic-long.h | 270 ++++++++++++++++++++++++++++++++++++++ > include/linux/compat.h | 1 - > 4 files changed, 278 insertions(+), 11 deletions(-) > create mode 100644 include/asm-generic/atomic-long.h > > diff --git a/fs/ubifs/ubifs.c b/fs/ubifs/ubifs.c > index 49e6f46..6dd6174 100644 > --- a/fs/ubifs/ubifs.c > +++ b/fs/ubifs/ubifs.c > @@ -150,6 +150,12 @@ static inline int crypto_comp_decompress(struct crypto_comp *tfm, > > return 0; > } > + > +/* from shrinker.c */ > + > +/* Global clean znode counter (for all mounted UBIFS instances) */ > +atomic_long_t ubifs_clean_zn_cnt; > + > #endif > > /** > diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h > index c120261..a51b237 100644 > --- a/fs/ubifs/ubifs.h > +++ b/fs/ubifs/ubifs.h > @@ -31,6 +31,8 @@ > #include > #include "ubifs-media.h" > #else > +#include > +#include > #include > > #include > @@ -63,16 +65,6 @@ struct page { > > void iput(struct inode *inode); > > -/* > - * The atomic operations are used for budgeting etc which is not > - * needed for the read-only U-Boot implementation: > - */ > -#define atomic_long_inc(a) > -#define atomic_long_dec(a) > -#define atomic_long_sub(a, b) > - > -typedef unsigned long atomic_long_t; > - > /* linux/include/time.h */ > #define NSEC_PER_SEC 1000000000L > #define get_seconds() 0 > diff --git a/include/asm-generic/atomic-long.h b/include/asm-generic/atomic-long.h > new file mode 100644 > index 0000000..61011ed > --- /dev/null > +++ b/include/asm-generic/atomic-long.h > @@ -0,0 +1,270 @@ > +#ifndef _ASM_GENERIC_ATOMIC_LONG_H > +#define _ASM_GENERIC_ATOMIC_LONG_H > +/* > + * Copyright (C) 2005 Silicon Graphics, Inc. > + * Christoph Lameter > + * > + * Allows to provide arch independent atomic definitions without the need to > + * edit all arch specific atomic.h files. > + */ > + > +#include > + > +/* > + * Suppport for atomic_long_t > + * > + * Casts for parameters are avoided for existing atomic functions in order to > + * avoid issues with cast-as-lval under gcc 4.x and other limitations that the > + * macros of a platform may have. > + */ > + > +#if BITS_PER_LONG == 64 > + > +typedef atomic64_t atomic_long_t; > + > +#define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i) > + > +static inline long atomic_long_read(atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return (long)atomic64_read(v); > +} > + > +#ifndef __UBOOT__ > +static inline void atomic_long_set(atomic_long_t *l, long i) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + atomic64_set(v, i); > +} > +#endif Do we really need to ifdef out the most functions? Could you compile without this "#ifndef __UBOOT__" and copmpare the resulting binarysize? Thanks! bye, Heiko > + > +static inline void atomic_long_inc(atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + atomic64_inc(v); > +} > + > +static inline void atomic_long_dec(atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + atomic64_dec(v); > +} > + > +#ifndef __UBOOT__ > +static inline void atomic_long_add(long i, atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + atomic64_add(i, v); > +} > +#endif > + > +static inline void atomic_long_sub(long i, atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + atomic64_sub(i, v); > +} > + > +#ifndef __UBOOT__ > +static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return atomic64_sub_and_test(i, v); > +} > + > +static inline int atomic_long_dec_and_test(atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return atomic64_dec_and_test(v); > +} > + > +static inline int atomic_long_inc_and_test(atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return atomic64_inc_and_test(v); > +} > + > +static inline int atomic_long_add_negative(long i, atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return atomic64_add_negative(i, v); > +} > + > +static inline long atomic_long_add_return(long i, atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return (long)atomic64_add_return(i, v); > +} > + > +static inline long atomic_long_sub_return(long i, atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return (long)atomic64_sub_return(i, v); > +} > + > +static inline long atomic_long_inc_return(atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return (long)atomic64_inc_return(v); > +} > + > +static inline long atomic_long_dec_return(atomic_long_t *l) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return (long)atomic64_dec_return(v); > +} > + > +static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) > +{ > + atomic64_t *v = (atomic64_t *)l; > + > + return (long)atomic64_add_unless(v, a, u); > +} > + > +#define atomic_long_inc_not_zero(l) atomic64_inc_not_zero((atomic64_t *)(l)) > + > +#define atomic_long_cmpxchg(l, old, new) \ > + (atomic64_cmpxchg((atomic64_t *)(l), (old), (new))) > +#define atomic_long_xchg(v, new) \ > + (atomic64_xchg((atomic64_t *)(v), (new))) > +#endif /* __UBOOT__ */ > + > +#else /* BITS_PER_LONG == 64 */ > + > +typedef atomic_t atomic_long_t; > + > +#define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i) > +static inline long atomic_long_read(atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return (long)atomic_read(v); > +} > + > +#ifndef __UBOOT__ > +static inline void atomic_long_set(atomic_long_t *l, long i) > +{ > + atomic_t *v = (atomic_t *)l; > + > + atomic_set(v, i); > +} > +#endif > + > +static inline void atomic_long_inc(atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + atomic_inc(v); > +} > + > +static inline void atomic_long_dec(atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + atomic_dec(v); > +} > + > +#ifndef __UBOOT__ > +static inline void atomic_long_add(long i, atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + atomic_add(i, v); > +} > +#endif > + > +static inline void atomic_long_sub(long i, atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + atomic_sub(i, v); > +} > + > +#ifndef __UBOOT__ > +static inline int atomic_long_sub_and_test(long i, atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return atomic_sub_and_test(i, v); > +} > + > +static inline int atomic_long_dec_and_test(atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return atomic_dec_and_test(v); > +} > + > +static inline int atomic_long_inc_and_test(atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return atomic_inc_and_test(v); > +} > + > +static inline int atomic_long_add_negative(long i, atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return atomic_add_negative(i, v); > +} > + > +static inline long atomic_long_add_return(long i, atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return (long)atomic_add_return(i, v); > +} > + > +static inline long atomic_long_sub_return(long i, atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return (long)atomic_sub_return(i, v); > +} > + > +static inline long atomic_long_inc_return(atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return (long)atomic_inc_return(v); > +} > + > +static inline long atomic_long_dec_return(atomic_long_t *l) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return (long)atomic_dec_return(v); > +} > + > +static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) > +{ > + atomic_t *v = (atomic_t *)l; > + > + return (long)atomic_add_unless(v, a, u); > +} > + > +#define atomic_long_inc_not_zero(l) atomic_inc_not_zero((atomic_t *)(l)) > + > +#define atomic_long_cmpxchg(l, old, new) \ > + (atomic_cmpxchg((atomic_t *)(l), (old), (new))) > +#define atomic_long_xchg(v, new) \ > + (atomic_xchg((atomic_t *)(v), (new))) > +#endif /* __UBOOT__ */ > + > +#endif /* BITS_PER_LONG == 64 */ > + > +#endif /* _ASM_GENERIC_ATOMIC_LONG_H */ > diff --git a/include/linux/compat.h b/include/linux/compat.h > index b40133c..6eac17f 100644 > --- a/include/linux/compat.h > +++ b/include/linux/compat.h > @@ -262,7 +262,6 @@ typedef struct { > > /* from include/linux/types.h */ > > -typedef int atomic_t; > /** > * struct callback_head - callback structure for use with RCU and task_work > * @next: next update requests in a list > -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany