X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Fportals%2Finclude%2Flinux%2Flibcfs.h;h=f6a0a60e517ac1db060495b24e473122c5a4e941;hb=0073a99dbd25bdb046d6bf11745bc0440930eb9a;hp=5b1b8a5f628c75513f76ace1920b989f94a0d732;hpb=9f59ef764e80542d82f3b78902615124ddac1020;p=fs%2Flustre-release.git diff --git a/lustre/portals/include/linux/libcfs.h b/lustre/portals/include/linux/libcfs.h index 5b1b8a5..f6a0a60 100644 --- a/lustre/portals/include/linux/libcfs.h +++ b/lustre/portals/include/linux/libcfs.h @@ -2,51 +2,62 @@ * vim:expandtab:shiftwidth=8:tabstop=8: */ #ifndef _LIBCFS_H +#define _LIBCFS_H - -#define PORTAL_DEBUG - -/* I think this beast is just trying to get cycles_t and get_cycles(). - * this should be in its own header. */ -#ifdef __linux__ -# include -# if defined(__powerpc__) && !defined(__KERNEL__) -# define __KERNEL__ -# include -# undef __KERNEL__ -# else -# if defined(__KERNEL__) -# include -# else -# include -# define cycles_t unsigned long -static inline cycles_t get_cycles(void) -{ - struct timeval tv; - gettimeofday(&tv, NULL); - return (tv.tv_sec * 100000) + tv.tv_usec; -} -# endif -# endif +#ifdef HAVE_ASM_TYPES_H +#include #else -# include -typedef u_int32_t __u32; -typedef u_int64_t __u64; +#include "types.h" #endif #ifdef __KERNEL__ # include +# include #else # include # define do_gettimeofday(tv) gettimeofday(tv, NULL); +typedef unsigned long long cycles_t; #endif +#define PORTAL_DEBUG + #ifndef offsetof # define offsetof(typ,memb) ((unsigned long)((char *)&(((typ *)0)->memb))) #endif #define LOWEST_BIT_SET(x) ((x) & ~((x) - 1)) +#ifndef __KERNEL__ +/* Userpace byte flipping */ +# include +# include +# define __swab16(x) bswap_16(x) +# define __swab32(x) bswap_32(x) +# define __swab64(x) bswap_64(x) +# define __swab16s(x) do {*(x) = bswap_16(*(x));} while (0) +# define __swab32s(x) do {*(x) = bswap_32(*(x));} while (0) +# define __swab64s(x) do {*(x) = bswap_64(*(x));} while (0) +# if __BYTE_ORDER == __LITTLE_ENDIAN +# define le16_to_cpu(x) (x) +# define cpu_to_le16(x) (x) +# define le32_to_cpu(x) (x) +# define cpu_to_le32(x) (x) +# define le64_to_cpu(x) (x) +# define cpu_to_le64(x) (x) +# else +# if __BYTE_ORDER == __BIG_ENDIAN +# define le16_to_cpu(x) bswap_16(x) +# define cpu_to_le16(x) bswap_16(x) +# define le32_to_cpu(x) bswap_32(x) +# define cpu_to_le32(x) bswap_32(x) +# define le64_to_cpu(x) bswap_64(x) +# define cpu_to_le64(x) bswap_64(x) +# else +# error "Unknown byte order" +# endif /* __BIG_ENDIAN */ +# endif /* __LITTLE_ENDIAN */ +#endif /* ! __KERNEL__ */ + /* * Debugging */ @@ -54,7 +65,23 @@ extern unsigned int portal_subsystem_debug; extern unsigned int portal_stack; extern unsigned int portal_debug; extern unsigned int portal_printk; -extern unsigned int portal_cerror; + +struct ptldebug_header { + __u32 ph_len; + __u32 ph_flags; + __u32 ph_subsys; + __u32 ph_mask; + __u32 ph_cpu_id; + __u32 ph_sec; + __u64 ph_usec; + __u32 ph_stack; + __u32 ph_pid; + __u32 ph_extern_pid; + __u32 ph_line_num; +} __attribute__((packed)); + +#define PH_FLAG_FIRST_RECORD 1 + /* Debugging subsystems (32 bits, non-overlapping) */ #define S_UNDEFINED 0x00000001 #define S_MDC 0x00000002 @@ -78,7 +105,12 @@ extern unsigned int portal_cerror; #define S_GMNAL 0x00080000 #define S_PTLROUTER 0x00100000 #define S_COBD 0x00200000 -#define S_IBNAL 0x00400000 +#define S_IBNAL 0x00400000 /* All IB NALs */ +#define S_SM 0x00800000 +#define S_ASOBD 0x01000000 +#define S_LMV 0x02000000 +#define S_CMOBD 0x04000000 +#define S_LONAL 0x08000000 /* If you change these values, please keep portals/utils/debug.c * up to date! */ @@ -107,7 +139,8 @@ extern unsigned int portal_cerror; #define D_RPCTRACE 0x00100000 /* for distributed debugging */ #define D_VFSTRACE 0x00200000 #define D_READA 0x00400000 /* read-ahead */ - +#define D_MMAP 0x00800000 +#define D_CONFIG 0x01000000 #ifdef __KERNEL__ # include /* THREAD_SIZE */ #else @@ -127,7 +160,7 @@ extern unsigned int portal_cerror; # define CDEBUG_STACK (THREAD_SIZE - \ ((unsigned long)__builtin_frame_address(0) & \ (THREAD_SIZE - 1))) -# endif +# endif /* __ia64__ */ #define CHECK_STACK(stack) \ do { \ @@ -139,7 +172,7 @@ extern unsigned int portal_cerror; /*panic("LBUG");*/ \ } \ } while (0) -#else /* __KERNEL__ */ +#else /* !__KERNEL__ */ #define CHECK_STACK(stack) do { } while(0) #define CDEBUG_STACK (0L) #endif /* __KERNEL__ */ @@ -147,8 +180,6 @@ extern unsigned int portal_cerror; #if 1 #define CDEBUG(mask, format, a...) \ do { \ - if (portal_cerror == 0) \ - break; \ CHECK_STACK(CDEBUG_STACK); \ if (((mask) & (D_ERROR | D_EMERG | D_WARNING)) || \ (portal_debug & (mask) && \ @@ -158,8 +189,40 @@ do { \ CDEBUG_STACK, format, ## a); \ } while (0) -#define CWARN(format, a...) CDEBUG(D_WARNING, format, ## a) -#define CERROR(format, a...) CDEBUG(D_ERROR, format, ## a) +#define CDEBUG_MAX_LIMIT 600 +#define CDEBUG_LIMIT(cdebug_mask, cdebug_format, a...) \ +do { \ + static unsigned long cdebug_next; \ + static int cdebug_count, cdebug_delay = 1; \ + \ + CHECK_STACK(CDEBUG_STACK); \ + if (time_after(jiffies, cdebug_next)) { \ + portals_debug_msg(DEBUG_SUBSYSTEM, cdebug_mask, __FILE__, \ + __FUNCTION__, __LINE__, CDEBUG_STACK, \ + cdebug_format, ## a); \ + if (cdebug_count) { \ + portals_debug_msg(DEBUG_SUBSYSTEM, cdebug_mask, \ + __FILE__, __FUNCTION__, __LINE__, \ + CDEBUG_STACK, cdebug_format, ## a); \ + cdebug_count = 0; \ + } \ + if (time_after(jiffies, cdebug_next+(CDEBUG_MAX_LIMIT+10)*HZ))\ + cdebug_delay = cdebug_delay > 8 ? cdebug_delay/8 : 1; \ + else \ + cdebug_delay = cdebug_delay*2 >= CDEBUG_MAX_LIMIT*HZ ?\ + CDEBUG_MAX_LIMIT*HZ : cdebug_delay*2; \ + cdebug_next = jiffies + cdebug_delay; \ + } else { \ + portals_debug_msg(DEBUG_SUBSYSTEM, \ + portal_debug & ~(D_EMERG|D_ERROR|D_WARNING),\ + __FILE__, __FUNCTION__, __LINE__, \ + CDEBUG_STACK, cdebug_format, ## a); \ + cdebug_count++; \ + } \ +} while (0) + +#define CWARN(format, a...) CDEBUG_LIMIT(D_WARNING, format, ## a) +#define CERROR(format, a...) CDEBUG_LIMIT(D_ERROR, format, ## a) #define CEMERG(format, a...) CDEBUG(D_EMERG, format, ## a) #define GOTO(label, rc) \ @@ -190,15 +253,33 @@ do { \ } while(0) #else #define CDEBUG(mask, format, a...) do { } while (0) -#define CWARN(format, a...) do { } while (0) -#define CERROR(format, a...) printk("<3>" format, ## a) -#define CEMERG(format, a...) printk("<0>" format, ## a) +#define CWARN(format, a...) printk(KERN_WARNING format, ## a) +#define CERROR(format, a...) printk(KERN_ERR format, ## a) +#define CEMERG(format, a...) printk(KERN_EMERG format, ## a) #define GOTO(label, rc) do { (void)(rc); goto label; } while (0) #define RETURN(rc) return (rc) #define ENTRY do { } while (0) #define EXIT do { } while (0) #endif +/* initial pid */ +# if CRAY_PORTALS +/* + * 1) ptl_pid_t in cray portals is only 16 bits, not 32 bits, therefore this + * is too big. + * + * 2) the implementation of ernal in cray portals further restricts the pid + * space that may be used to 0 <= pid <= 255 (an 8 bit value). Returns + * an error at nal init time for any pid outside this range. Other nals + * in cray portals don't have this restriction. + * */ +#define LUSTRE_PTL_PID 9 +# else +#define LUSTRE_PTL_PID 12345 +# endif + +#define LUSTRE_SRV_PTL_PID LUSTRE_PTL_PID + #define PORTALS_CFG_VERSION 0x00010001; struct portals_cfg {