X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=kerncompat.h;h=fa96715fb70cef75e8c95603f5034a39d57a268e;hb=0155481cc91285c75992603dfa6204a4fb6b698d;hp=889d94cc5c83f7aeea3d4acf31cecf26c126da77;hpb=05499d865f061c258ef2a15b1ad5b650c991371a;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/kerncompat.h b/kerncompat.h index 889d94c..fa96715 100644 --- a/kerncompat.h +++ b/kerncompat.h @@ -16,8 +16,8 @@ * Boston, MA 021110-1307, USA. */ -#ifndef __KERNCOMPAT -#define __KERNCOMPAT +#ifndef __KERNCOMPAT_H__ +#define __KERNCOMPAT_H__ #include #include @@ -29,6 +29,16 @@ #include #include #include + +#include + +#ifndef __GLIBC__ +#ifndef BTRFS_DISABLE_BACKTRACE +#define BTRFS_DISABLE_BACKTRACE +#endif +#define __always_inline __inline __attribute__ ((__always_inline__)) +#endif + #ifndef BTRFS_DISABLE_BACKTRACE #include #endif @@ -45,7 +55,8 @@ #define gfp_t int #define get_cpu_var(p) (p) #define __get_cpu_var(p) (p) -#define BITS_PER_LONG (__SIZEOF_LONG__ * 8) +#define BITS_PER_BYTE 8 +#define BITS_PER_LONG (__SIZEOF_LONG__ * BITS_PER_BYTE) #define __GFP_BITS_SHIFT 20 #define __GFP_BITS_MASK ((int)((1 << __GFP_BITS_SHIFT) - 1)) #define GFP_KERNEL 0 @@ -57,36 +68,53 @@ #define ULONG_MAX (~0UL) #endif +#define __token_glue(a,b,c) ___token_glue(a,b,c) +#define ___token_glue(a,b,c) a ## b ## c +#ifdef DEBUG_BUILD_CHECKS +#define BUILD_ASSERT(x) extern int __token_glue(compile_time_assert_,__LINE__,__COUNTER__)[1-2*!(x)] __attribute__((unused)) +#else +#define BUILD_ASSERT(x) +#endif + #ifndef BTRFS_DISABLE_BACKTRACE #define MAX_BACKTRACE 16 static inline void print_trace(void) { void *array[MAX_BACKTRACE]; - size_t size; + int size; size = backtrace(array, MAX_BACKTRACE); backtrace_symbols_fd(array, size, 2); } +#endif -static inline void assert_trace(const char *assertion, const char *filename, - const char *func, unsigned line, int val) +static inline void warning_trace(const char *assertion, const char *filename, + const char *func, unsigned line, long val) { - if (val) + if (!val) return; - if (assertion) - fprintf(stderr, "%s:%d: %s: Assertion `%s` failed.\n", - filename, line, func, assertion); - else - fprintf(stderr, "%s:%d: %s: Assertion failed.\n", filename, - line, func); + fprintf(stderr, + "%s:%d: %s: Warning: assertion `%s` failed, value %ld\n", + filename, line, func, assertion, val); +#ifndef BTRFS_DISABLE_BACKTRACE print_trace(); - exit(1); +#endif } -#define BUG() assert_trace(NULL, __FILE__, __func__, __LINE__, 0) -#else -#define BUG() assert(0) +static inline void bugon_trace(const char *assertion, const char *filename, + const char *func, unsigned line, long val) +{ + if (!val) + return; + fprintf(stderr, + "%s:%d: %s: BUG_ON `%s` triggered, value %ld\n", + filename, line, func, assertion, val); +#ifndef BTRFS_DISABLE_BACKTRACE + print_trace(); #endif + abort(); + exit(1); +} #ifdef __CHECKER__ #define __force __attribute__((force)) @@ -108,6 +136,9 @@ typedef __u32 u32; typedef __u64 u64; typedef __u16 u16; typedef __u8 u8; +typedef __s64 s64; +typedef __s32 s32; + /* * Continuing to define __KERNEL__ breaks others parts of the code, so * we can just undefine it now that we have the correct headers... @@ -119,6 +150,8 @@ typedef unsigned int __u32; typedef unsigned long long u64; typedef unsigned char u8; typedef unsigned short u16; +typedef long long s64; +typedef int s32; #endif @@ -220,30 +253,15 @@ static inline long PTR_ERR(const void *ptr) return (long) ptr; } -static inline long IS_ERR(const void *ptr) +static inline int IS_ERR(const void *ptr) { return IS_ERR_VALUE((unsigned long)ptr); } -/* - * max/min macro - */ -#define min(x,y) ({ \ - typeof(x) _x = (x); \ - typeof(y) _y = (y); \ - (void) (&_x == &_y); \ - _x < _y ? _x : _y; }) - -#define max(x,y) ({ \ - typeof(x) _x = (x); \ - typeof(y) _y = (y); \ - (void) (&_x == &_y); \ - _x > _y ? _x : _y; }) - -#define min_t(type,x,y) \ - ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; }) -#define max_t(type,x,y) \ - ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; }) +static inline int IS_ERR_OR_NULL(const void *ptr) +{ + return !ptr || IS_ERR(ptr); +} /* * This looks more complex than it should be. But we need to @@ -269,29 +287,51 @@ static inline long IS_ERR(const void *ptr) #define kzalloc(x, y) calloc(1, x) #define kstrdup(x, y) strdup(x) #define kfree(x) free(x) +#define vmalloc(x) malloc(x) +#define vfree(x) free(x) #ifndef BTRFS_DISABLE_BACKTRACE -#define BUG_ON(c) assert_trace(#c, __FILE__, __func__, __LINE__, !(c)) -#else -#define BUG_ON(c) assert(!(c)) -#endif - -#define WARN_ON(c) BUG_ON(c) - +static inline void assert_trace(const char *assertion, const char *filename, + const char *func, unsigned line, long val) +{ + if (val) + return; + fprintf(stderr, + "%s:%d: %s: Assertion `%s` failed, value %ld\n", + filename, line, func, assertion, val); #ifndef BTRFS_DISABLE_BACKTRACE -#define ASSERT(c) assert_trace(#c, __FILE__, __func__, __LINE__, (c)) + print_trace(); +#endif + abort(); + exit(1); +} +#define ASSERT(c) assert_trace(#c, __FILE__, __func__, __LINE__, (long)(c)) #else #define ASSERT(c) assert(c) #endif +#define BUG_ON(c) bugon_trace(#c, __FILE__, __func__, __LINE__, (long)(c)) +#define BUG() BUG_ON(1) +#define WARN_ON(c) warning_trace(#c, __FILE__, __func__, __LINE__, (long)(c)) + #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) +#ifndef __bitwise #ifdef __CHECKER__ #define __bitwise __bitwise__ #else #define __bitwise -#endif +#endif /* __CHECKER__ */ +#endif /* __bitwise */ + +/* Alignment check */ +#define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a) - 1)) == 0) + +static inline int is_power_of_2(unsigned long n) +{ + return (n != 0 && ((n & (n - 1)) == 0)); +} typedef u16 __bitwise __le16; typedef u16 __bitwise __be16; @@ -329,15 +369,29 @@ struct __una_u32 { __le32 x; } __attribute__((__packed__)); struct __una_u64 { __le64 x; } __attribute__((__packed__)); #define get_unaligned_le8(p) (*((u8 *)(p))) +#define get_unaligned_8(p) (*((u8 *)(p))) #define put_unaligned_le8(val,p) ((*((u8 *)(p))) = (val)) +#define put_unaligned_8(val,p) ((*((u8 *)(p))) = (val)) #define get_unaligned_le16(p) le16_to_cpu(((const struct __una_u16 *)(p))->x) +#define get_unaligned_16(p) (((const struct __una_u16 *)(p))->x) #define put_unaligned_le16(val,p) (((struct __una_u16 *)(p))->x = cpu_to_le16(val)) +#define put_unaligned_16(val,p) (((struct __una_u16 *)(p))->x = (val)) #define get_unaligned_le32(p) le32_to_cpu(((const struct __una_u32 *)(p))->x) +#define get_unaligned_32(p) (((const struct __una_u32 *)(p))->x) #define put_unaligned_le32(val,p) (((struct __una_u32 *)(p))->x = cpu_to_le32(val)) +#define put_unaligned_32(val,p) (((struct __una_u32 *)(p))->x = (val)) #define get_unaligned_le64(p) le64_to_cpu(((const struct __una_u64 *)(p))->x) +#define get_unaligned_64(p) (((const struct __una_u64 *)(p))->x) #define put_unaligned_le64(val,p) (((struct __una_u64 *)(p))->x = cpu_to_le64(val)) +#define put_unaligned_64(val,p) (((struct __una_u64 *)(p))->x = (val)) + +#ifndef true +#define true 1 +#define false 0 #endif #ifndef noinline #define noinline #endif + +#endif