X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=libcfs%2Finclude%2Flibcfs%2Flibcfs_private.h;h=51dc98667bfb5a502d0387ea658d334019ae7de7;hp=05254eaba85ee088998c5607ed1b8cb92ffc2528;hb=8d8d0f2cacd5769a2e324fbd37f5a0674748621f;hpb=7d1ace7a1ef928de77bd459dfd83f48889454e50 diff --git a/libcfs/include/libcfs/libcfs_private.h b/libcfs/include/libcfs/libcfs_private.h index 05254ea..51dc986 100644 --- a/libcfs/include/libcfs/libcfs_private.h +++ b/libcfs/include/libcfs/libcfs_private.h @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -71,55 +71,53 @@ * * requires -Wall. Unfortunately this rules out use of likely/unlikely. */ -#define LASSERT(cond) \ -({ \ - if (cond) \ - ; \ - else \ - libcfs_assertion_failed( #cond , __FILE__, \ - __FUNCTION__, __LINE__); \ -}) - -#define LASSERTF(cond, fmt, a...) \ -({ \ +#define LASSERT(cond) \ +do { \ + if (cond) \ + ; \ + else \ + libcfs_assertion_failed( #cond , __FILE__, \ + __FUNCTION__, __LINE__); \ +} while(0) + +#define LASSERTF(cond, fmt, ...) \ +do { \ if (cond) \ ; \ else { \ libcfs_debug_msg(NULL, DEBUG_SUBSYSTEM, D_EMERG, \ __FILE__, __FUNCTION__,__LINE__, \ - "ASSERTION(" #cond ") failed:" fmt, \ - ## a); \ + "ASSERTION(" #cond ") failed: " fmt, \ + ## __VA_ARGS__); \ LBUG(); \ } \ -}) - +} while(0) #else /* !LASSERT_CHECKED */ -#define LASSERT(cond) \ -({ \ - if (unlikely(!(cond))) \ - libcfs_assertion_failed(#cond , __FILE__, \ - __FUNCTION__, __LINE__); \ -}) +#define LASSERT(cond) \ +do { \ + if (unlikely(!(cond))) \ + libcfs_assertion_failed(#cond , __FILE__, \ + __FUNCTION__, __LINE__); \ +} while(0) -#define LASSERTF(cond, fmt, a...) \ -({ \ +#define LASSERTF(cond, fmt, ...) \ +do { \ if (unlikely(!(cond))) { \ libcfs_debug_msg(NULL, DEBUG_SUBSYSTEM, D_EMERG, \ __FILE__, __FUNCTION__,__LINE__, \ - "ASSERTION(" #cond ") failed:" fmt, \ - ## a); \ + "ASSERTION(" #cond ") failed: " fmt, \ + ## __VA_ARGS__ ); \ LBUG(); \ } \ -}) - +} while(0) #endif /* !LASSERT_CHECKED */ #else /* !LIBCFS_DEBUG */ /* sizeof is to use expression without evaluating it. */ # define LASSERT(e) ((void)sizeof!!(e)) -# define LASSERTF(cond, fmt...) ((void)sizeof!!(cond)) +# define LASSERTF(cond, ...) ((void)sizeof!!(cond)) #endif /* !LIBCFS_DEBUG */ #ifdef INVARIANT_CHECK @@ -140,7 +138,7 @@ void lbug_with_loc(const char *file, const char *func, const int line) #define LBUG() lbug_with_loc(__FILE__, __FUNCTION__, __LINE__) -extern atomic_t libcfs_kmemory; +extern cfs_atomic_t libcfs_kmemory; /* * Memory */ @@ -148,11 +146,11 @@ extern atomic_t libcfs_kmemory; # define libcfs_kmem_inc(ptr, size) \ do { \ - atomic_add(size, &libcfs_kmemory); \ + cfs_atomic_add(size, &libcfs_kmemory); \ } while (0) # define libcfs_kmem_dec(ptr, size) do { \ - atomic_sub(size, &libcfs_kmemory); \ + cfs_atomic_sub(size, &libcfs_kmemory); \ } while (0) #else @@ -160,28 +158,29 @@ do { \ # define libcfs_kmem_dec(ptr, size) do {} while (0) #endif /* LIBCFS_DEBUG */ -#define LIBCFS_VMALLOC_SIZE 16384 +#ifndef LIBCFS_VMALLOC_SIZE +#define LIBCFS_VMALLOC_SIZE (2 << CFS_PAGE_SHIFT) /* 2 pages */ +#endif #define LIBCFS_ALLOC_GFP(ptr, size, mask) \ do { \ - LASSERT(!in_interrupt() || \ + LASSERT(!cfs_in_interrupt() || \ (size <= LIBCFS_VMALLOC_SIZE && mask == CFS_ALLOC_ATOMIC));\ - if (unlikely((size) > LIBCFS_VMALLOC_SIZE)) \ + if (unlikely((size) > LIBCFS_VMALLOC_SIZE)) \ (ptr) = cfs_alloc_large(size); \ else \ (ptr) = cfs_alloc((size), (mask)); \ - if (unlikely((ptr) == NULL)) { \ + if (unlikely((ptr) == NULL)) { \ CERROR("LNET: out of memory at %s:%d (tried to alloc '" \ #ptr "' = %d)\n", __FILE__, __LINE__, (int)(size));\ CERROR("LNET: %d total bytes allocated by lnet\n", \ - atomic_read(&libcfs_kmemory)); \ - } else { \ - libcfs_kmem_inc((ptr), (size)); \ - if (!((mask) & CFS_ALLOC_ZERO)) \ - memset((ptr), 0, (size)); \ + cfs_atomic_read(&libcfs_kmemory)); \ + break; \ } \ + libcfs_kmem_inc((ptr), (size)); \ + memset((ptr), 0, (size)); \ CDEBUG(D_MALLOC, "kmalloced '" #ptr "': %d at %p (tot %d).\n", \ - (int)(size), (ptr), atomic_read (&libcfs_kmemory)); \ + (int)(size), (ptr), cfs_atomic_read (&libcfs_kmemory)); \ } while (0) #define LIBCFS_ALLOC(ptr, size) \ @@ -200,7 +199,7 @@ do { \ } \ libcfs_kmem_dec((ptr), s); \ CDEBUG(D_MALLOC, "kfreed '" #ptr "': %d at %p (tot %d).\n", \ - s, (ptr), atomic_read(&libcfs_kmemory)); \ + s, (ptr), cfs_atomic_read(&libcfs_kmemory)); \ if (unlikely(s > LIBCFS_VMALLOC_SIZE)) \ cfs_free_large(ptr); \ else \ @@ -237,10 +236,10 @@ void libcfs_debug_set_level(unsigned int debug_level); # undef NDEBUG # include # define LASSERT(e) assert(e) -# define LASSERTF(cond, args...) \ +# define LASSERTF(cond, ...) \ do { \ if (!(cond)) \ - CERROR(args); \ + CERROR(__VA_ARGS__); \ assert(cond); \ } while (0) # define LBUG() assert(0) @@ -251,12 +250,12 @@ do { \ # endif # else # define LASSERT(e) ((void)sizeof!!(e)) -# define LASSERTF(cond, args...) ((void)sizeof!!(cond)) +# define LASSERTF(cond, ...) ((void)sizeof!!(cond)) # define LBUG() ((void)(0)) # define LINVRNT(exp) ((void)sizeof!!(exp)) # endif /* LIBCFS_DEBUG */ # define KLASSERT(e) ((void)0) -# define printk(format, args...) printf (format, ## args) +# define printk printf # ifdef CRAY_XT3 /* buggy calloc! */ # define LIBCFS_ALLOC(ptr, size) \ do { \ @@ -272,33 +271,41 @@ void libcfs_debug_dumplog(void); int libcfs_debug_init(unsigned long bufsize); int libcfs_debug_cleanup(void); +#define libcfs_debug_dumpstack(tsk) ((void)0) + /* * Generic compiler-dependent macros required for kernel * build go below this comment. Actual compiler/compiler version * specific implementations come from the above header files */ - -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) - +#ifdef __GNUC__ +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) +#else +#define likely(x) (!!(x)) +#define unlikely(x) (!!(x)) +#endif /* !__KERNEL__ */ #endif -/* - * compile-time assertions. @cond has to be constant expression. - * ISO C Standard: - * - * 6.8.4.2 The switch statement +#define CFS_ALLOC_PTR(ptr) LIBCFS_ALLOC(ptr, sizeof (*(ptr))); +#define CFS_FREE_PTR(ptr) LIBCFS_FREE(ptr, sizeof (*(ptr))); + +/** Compile-time assertion. + + * Check an invariant described by a constant expression at compile time by + * forcing a compiler error if it does not hold. \a cond must be a constant + * expression as defined by the ISO C Standard: * + * 6.8.4.2 The switch statement * .... - * * [#3] The expression of each case label shall be an integer * constant expression and no two of the case constant * expressions in the same switch statement shall have the same * value after conversion... * */ -#define CLASSERT(cond) ({ switch(42) { case (cond): case 0: break; } }) +#define CLASSERT(cond) do {switch(42) {case (cond): case 0: break;}} while (0) /* support decl needed both by kernel and liblustre */ int libcfs_isknown_lnd(int type); @@ -311,25 +318,46 @@ __u32 libcfs_str2net(const char *str); lnet_nid_t libcfs_str2nid(const char *str); int libcfs_str2anynid(lnet_nid_t *nid, const char *str); char *libcfs_id2str(lnet_process_id_t id); - +int libcfs_str2server(char *name, int *type, __u32 *idx, char **endptr); +int cfs_iswhite(char c); +void cfs_free_nidlist(cfs_list_t *list); +int cfs_parse_nidlist(char *str, int len, cfs_list_t *list); +int cfs_match_nid(lnet_nid_t nid, cfs_list_t *list); + +/** \addtogroup lnet_addr + * @{ */ /* how an LNET NID encodes net:address */ +/** extract the address part of an lnet_nid_t */ #define LNET_NIDADDR(nid) ((__u32)((nid) & 0xffffffff)) +/** extract the network part of an lnet_nid_t */ #define LNET_NIDNET(nid) ((__u32)(((nid) >> 32)) & 0xffffffff) +/** make an lnet_nid_t from a network part and an address part */ #define LNET_MKNID(net,addr) ((((__u64)(net))<<32)|((__u64)(addr))) /* how net encodes type:number */ #define LNET_NETNUM(net) ((net) & 0xffff) #define LNET_NETTYP(net) (((net) >> 16) & 0xffff) #define LNET_MKNET(typ,num) ((((__u32)(typ))<<16)|((__u32)(num))) +/** @} lnet_addr */ + +/* max value for numeric network address */ +#define MAX_NUMERIC_VALUE 0xffffffff + /* implication */ #define ergo(a, b) (!(a) || (b)) /* logical equivalence */ #define equi(a, b) (!!(a) == !!(b)) -#ifndef CURRENT_TIME -# define CURRENT_TIME time(0) +#ifndef CFS_CURRENT_TIME +# define CFS_CURRENT_TIME time(0) #endif +/* Server types */ +#define SVTYPE_MDT 0x0001 +#define SVTYPE_OST 0x0002 +#define SVTYPE_MGS 0x0004 +#define SVTYPE_ALL 0x0008 + /* -------------------------------------------------------------------- * Light-weight trace * Support for temporary event tracing with minimal Heisenberg effect. @@ -352,50 +380,50 @@ struct libcfs_device_userstate #define MKSTR(ptr) ((ptr))? (ptr) : "" -static inline int size_round4 (int val) +static inline int cfs_size_round4 (int val) { return (val + 3) & (~0x3); } -static inline int size_round (int val) +static inline int cfs_size_round (int val) { return (val + 7) & (~0x7); } -static inline int size_round16(int val) +static inline int cfs_size_round16(int val) { return (val + 0xf) & (~0xf); } -static inline int size_round32(int val) +static inline int cfs_size_round32(int val) { return (val + 0x1f) & (~0x1f); } -static inline int size_round0(int val) +static inline int cfs_size_round0(int val) { if (!val) return 0; return (val + 1 + 7) & (~0x7); } -static inline size_t round_strlen(char *fset) +static inline size_t cfs_round_strlen(char *fset) { - return (size_t)size_round((int)strlen(fset) + 1); + return (size_t)cfs_size_round((int)strlen(fset) + 1); } #define LOGL(var,len,ptr) \ do { \ if (var) \ memcpy((char *)ptr, (const char *)var, len); \ - ptr += size_round(len); \ + ptr += cfs_size_round(len); \ } while (0) #define LOGU(var,len,ptr) \ do { \ if (var) \ memcpy((char *)var, (const char *)ptr, len); \ - ptr += size_round(len); \ + ptr += cfs_size_round(len); \ } while (0) #define LOGL0(var,len,ptr) \ @@ -404,7 +432,7 @@ do { \ break; \ memcpy((char *)ptr, (const char *)var, len); \ *((char *)(ptr) + len) = 0; \ - ptr += size_round(len + 1); \ + ptr += cfs_size_round(len + 1); \ } while (0) /** @@ -415,7 +443,7 @@ enum { * network addresses depend on them... */ QSWLND = 1, SOCKLND = 2, - GMLND = 3, + GMLND = 3, /* obsolete, keep it so that libcfs_nid2str works */ PTLLND = 4, O2IBLND = 5, CIBLND = 6,