[U-Boot] [PATCH 2/2] microblaze: Fix C99/gnu99 compatiblity for inline functions

Måns Rullgård mans at mansr.com
Fri Nov 6 13:27:30 CET 2015


Nathan Rossi <nathan at nathanrossi.com> writes:

> 'extern inline' is not portable across various C standards. To ensure
> compatiblity with various standards/compilers change the functions to
> static inline. This is a portable construct and serves as a comparable
> definition to 'extern inline' from the gnu90 standard.
>
> Additionally remove the function prototypes as they are not required due
> to the functions being declared static and functions are correctly
> ordered based on dependence.
>
> Signed-off-by: Nathan Rossi <nathan at nathanrossi.com>
> Cc: Michal Simek <monstr at monstr.eu>
> Cc: Tom Rini <trini at konsulko.com>

Acked-by: Mans Rullgard <mans at mansr.com>

> ---
>  arch/microblaze/include/asm/bitops.h | 63 ++++++++++++------------------------
>  arch/microblaze/include/asm/system.h |  2 +-
>  2 files changed, 22 insertions(+), 43 deletions(-)
>
> diff --git a/arch/microblaze/include/asm/bitops.h b/arch/microblaze/include/asm/bitops.h
> index d42ee61..2c11d1a 100644
> --- a/arch/microblaze/include/asm/bitops.h
> +++ b/arch/microblaze/include/asm/bitops.h
> @@ -10,38 +10,14 @@
>  
>  #ifdef __KERNEL__
>  /*
> - * Function prototypes to keep gcc -Wall happy
> - */
> -
> -/*
>   * The __ functions are not atomic
>   */
>  
> -extern void set_bit(int nr, volatile void *addr);
> -extern void __set_bit(int nr, volatile void *addr);
> -
> -extern void clear_bit(int nr, volatile void *addr);
> -#define __clear_bit(nr, addr) clear_bit(nr, addr)
> -#define PLATFORM__CLEAR_BIT
> -
> -extern void change_bit(int nr, volatile void *addr);
> -extern void __change_bit(int nr, volatile void *addr);
> -extern int test_and_set_bit(int nr, volatile void *addr);
> -extern int __test_and_set_bit(int nr, volatile void *addr);
> -extern int test_and_clear_bit(int nr, volatile void *addr);
> -extern int __test_and_clear_bit(int nr, volatile void *addr);
> -extern int test_and_change_bit(int nr, volatile void *addr);
> -extern int __test_and_change_bit(int nr, volatile void *addr);
> -extern int __constant_test_bit(int nr, const volatile void *addr);
> -extern int __test_bit(int nr, volatile void *addr);
> -extern int find_first_zero_bit(void *addr, unsigned size);
> -extern int find_next_zero_bit(void *addr, int size, int offset);
> -
>  /*
>   * ffz = Find First Zero in word. Undefined if no zero exists,
>   * so code should check against ~0UL first..
>   */
> -extern inline unsigned long ffz(unsigned long word)
> +static inline unsigned long ffz(unsigned long word)
>  {
>  	unsigned long result = 0;
>  
> @@ -53,7 +29,7 @@ extern inline unsigned long ffz(unsigned long word)
>  }
>  
>  
> -extern inline void set_bit(int nr, volatile void *addr)
> +static inline void set_bit(int nr, volatile void *addr)
>  {
>  	int	* a = (int *) addr;
>  	int	mask;
> @@ -66,7 +42,7 @@ extern inline void set_bit(int nr, volatile void *addr)
>  	restore_flags(flags);
>  }
>  
> -extern inline void __set_bit(int nr, volatile void *addr)
> +static inline void __set_bit(int nr, volatile void *addr)
>  {
>  	int	* a = (int *) addr;
>  	int	mask;
> @@ -83,7 +59,7 @@ extern inline void __set_bit(int nr, volatile void *addr)
>  #define smp_mb__before_clear_bit()	barrier()
>  #define smp_mb__after_clear_bit()	barrier()
>  
> -extern inline void clear_bit(int nr, volatile void *addr)
> +static inline void clear_bit(int nr, volatile void *addr)
>  {
>  	int	* a = (int *) addr;
>  	int	mask;
> @@ -96,7 +72,10 @@ extern inline void clear_bit(int nr, volatile void *addr)
>  	restore_flags(flags);
>  }
>  
> -extern inline void change_bit(int nr, volatile void *addr)
> +#define __clear_bit(nr, addr) clear_bit(nr, addr)
> +#define PLATFORM__CLEAR_BIT
> +
> +static inline void change_bit(int nr, volatile void *addr)
>  {
>  	int mask;
>  	unsigned long flags;
> @@ -109,7 +88,7 @@ extern inline void change_bit(int nr, volatile void *addr)
>  	restore_flags(flags);
>  }
>  
> -extern inline void __change_bit(int nr, volatile void *addr)
> +static inline void __change_bit(int nr, volatile void *addr)
>  {
>  	int mask;
>  	unsigned long *ADDR = (unsigned long *) addr;
> @@ -119,7 +98,7 @@ extern inline void __change_bit(int nr, volatile void *addr)
>  	*ADDR ^= mask;
>  }
>  
> -extern inline int test_and_set_bit(int nr, volatile void *addr)
> +static inline int test_and_set_bit(int nr, volatile void *addr)
>  {
>  	int	mask, retval;
>  	volatile unsigned int *a = (volatile unsigned int *) addr;
> @@ -135,7 +114,7 @@ extern inline int test_and_set_bit(int nr, volatile void *addr)
>  	return retval;
>  }
>  
> -extern inline int __test_and_set_bit(int nr, volatile void *addr)
> +static inline int __test_and_set_bit(int nr, volatile void *addr)
>  {
>  	int	mask, retval;
>  	volatile unsigned int *a = (volatile unsigned int *) addr;
> @@ -147,7 +126,7 @@ extern inline int __test_and_set_bit(int nr, volatile void *addr)
>  	return retval;
>  }
>  
> -extern inline int test_and_clear_bit(int nr, volatile void *addr)
> +static inline int test_and_clear_bit(int nr, volatile void *addr)
>  {
>  	int	mask, retval;
>  	volatile unsigned int *a = (volatile unsigned int *) addr;
> @@ -163,7 +142,7 @@ extern inline int test_and_clear_bit(int nr, volatile void *addr)
>  	return retval;
>  }
>  
> -extern inline int __test_and_clear_bit(int nr, volatile void *addr)
> +static inline int __test_and_clear_bit(int nr, volatile void *addr)
>  {
>  	int	mask, retval;
>  	volatile unsigned int *a = (volatile unsigned int *) addr;
> @@ -175,7 +154,7 @@ extern inline int __test_and_clear_bit(int nr, volatile void *addr)
>  	return retval;
>  }
>  
> -extern inline int test_and_change_bit(int nr, volatile void *addr)
> +static inline int test_and_change_bit(int nr, volatile void *addr)
>  {
>  	int	mask, retval;
>  	volatile unsigned int *a = (volatile unsigned int *) addr;
> @@ -191,7 +170,7 @@ extern inline int test_and_change_bit(int nr, volatile void *addr)
>  	return retval;
>  }
>  
> -extern inline int __test_and_change_bit(int nr, volatile void *addr)
> +static inline int __test_and_change_bit(int nr, volatile void *addr)
>  {
>  	int	mask, retval;
>  	volatile unsigned int *a = (volatile unsigned int *) addr;
> @@ -206,12 +185,12 @@ extern inline int __test_and_change_bit(int nr, volatile void *addr)
>  /*
>   * This routine doesn't need to be atomic.
>   */
> -extern inline int __constant_test_bit(int nr, const volatile void *addr)
> +static inline int __constant_test_bit(int nr, const volatile void *addr)
>  {
>  	return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
>  }
>  
> -extern inline int __test_bit(int nr, volatile void *addr)
> +static inline int __test_bit(int nr, volatile void *addr)
>  {
>  	int	* a = (int *) addr;
>  	int	mask;
> @@ -229,7 +208,7 @@ extern inline int __test_bit(int nr, volatile void *addr)
>  #define find_first_zero_bit(addr, size) \
>  	find_next_zero_bit((addr), (size), 0)
>  
> -extern inline int find_next_zero_bit(void *addr, int size, int offset)
> +static inline int find_next_zero_bit(void *addr, int size, int offset)
>  {
>  	unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
>  	unsigned long result = offset & ~31UL;
> @@ -275,7 +254,7 @@ found_middle:
>  #define hweight8(x) generic_hweight8(x)
>  
>  
> -extern inline int ext2_set_bit(int nr, volatile void *addr)
> +static inline int ext2_set_bit(int nr, volatile void *addr)
>  {
>  	int		mask, retval;
>  	unsigned long	flags;
> @@ -290,7 +269,7 @@ extern inline int ext2_set_bit(int nr, volatile void *addr)
>  	return retval;
>  }
>  
> -extern inline int ext2_clear_bit(int nr, volatile void *addr)
> +static inline int ext2_clear_bit(int nr, volatile void *addr)
>  {
>  	int		mask, retval;
>  	unsigned long	flags;
> @@ -305,7 +284,7 @@ extern inline int ext2_clear_bit(int nr, volatile void *addr)
>  	return retval;
>  }
>  
> -extern inline int ext2_test_bit(int nr, const volatile void *addr)
> +static inline int ext2_test_bit(int nr, const volatile void *addr)
>  {
>  	int			mask;
>  	const volatile unsigned char	*ADDR = (const unsigned char *) addr;
> diff --git a/arch/microblaze/include/asm/system.h b/arch/microblaze/include/asm/system.h
> index 3090835..3107748 100644
> --- a/arch/microblaze/include/asm/system.h
> +++ b/arch/microblaze/include/asm/system.h
> @@ -131,7 +131,7 @@ extern void *switch_thread (struct thread_struct *last,
>    ((__typeof__ (*(ptr)))__xchg ((unsigned long)(with), (ptr), sizeof (*(ptr))))
>  #define tas(ptr) (xchg ((ptr), 1))
>  
> -extern inline unsigned long __xchg(unsigned long with,
> +static inline unsigned long __xchg(unsigned long with,
>  				    __volatile__ void *ptr, int size)
>  {
>  	unsigned long tmp, flags;
> -- 
> 2.6.2

-- 
Måns Rullgård
mans at mansr.com


More information about the U-Boot mailing list