From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 1/2] Enable journal replay for UBIFS
Date: Thu, 22 Jan 2015 07:30:32 +0100 [thread overview]
Message-ID: <54C09908.2050903@denx.de> (raw)
In-Reply-To: <20150121154744.GA30163@chhabea-vm-machine>
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 <anton.habegger@delta-es.com>
> 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 <anton.habegger@delta-es.com>
> ---
> 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 <linux/backing-dev.h>
> #include "ubifs-media.h"
> #else
> +#include <asm/atomic.h>
> +#include <asm-generic/atomic-long.h>
> #include <ubi_uboot.h>
>
> #include <linux/ctype.h>
> @@ -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 <asm/types.h>
> +
> +/*
> + * 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
next prev parent reply other threads:[~2015-01-22 6:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-21 15:47 [U-Boot] [PATCH v3 1/2] Enable journal replay for UBIFS Anton Habegger
2015-01-22 6:30 ` Heiko Schocher [this message]
2015-01-22 7:30 ` Anton Habegger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54C09908.2050903@denx.de \
--to=hs@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.