X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Finclude%2Flinux%2Flibcfs.h;h=17d5a118ea88951a73053c30dfa5748f4844b009;hb=9d4b898b1c1c7c318fda5f0c345ed726c774c06a;hp=3ebf9353c69df086a597d4cfce85915a33de3e65;hpb=090c677210ee2946d99c71412e4ff762bb300f4f;p=fs%2Flustre-release.git diff --git a/lnet/include/linux/libcfs.h b/lnet/include/linux/libcfs.h index 3ebf935..17d5a11 100644 --- a/lnet/include/linux/libcfs.h +++ b/lnet/include/linux/libcfs.h @@ -2,16 +2,58 @@ * vim:expandtab:shiftwidth=8:tabstop=8: */ #ifndef _LIBCFS_H +#define _LIBCFS_H + +#include +#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) ((int)((char *)&(((typ *)0)->memb))) +# 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 */ @@ -19,7 +61,24 @@ 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; + +#include +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 @@ -43,8 +102,11 @@ extern unsigned int portal_cerror; #define S_GMNAL 0x00080000 #define S_PTLROUTER 0x00100000 #define S_COBD 0x00200000 -#define S_IBNAL 0x00400000 -#define S_LMV 0x00800000 +#define S_OPENIBNAL 0x00400000 +#define S_SM 0x00800000 +#define S_ASOBD 0x01000000 +#define S_LMV 0x02000000 +#define S_CMOBD 0x04000000 /* If you change these values, please keep portals/utils/debug.c * up to date! */ @@ -73,7 +135,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 @@ -82,6 +145,13 @@ extern unsigned int portal_cerror; # endif #endif +#ifndef likely +# define likely(exp) (exp) +#endif +#ifndef unlikely +# define unlikely(exp) (exp) +#endif + #define LUSTRE_TRACE_SIZE (THREAD_SIZE >> 5) #ifdef __KERNEL__ @@ -93,7 +163,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 { \ @@ -105,7 +175,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__ */ @@ -113,8 +183,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) && \ @@ -156,15 +224,73 @@ 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 { + __u32 pcfg_version; + __u32 pcfg_command; + + __u32 pcfg_nal; + __u32 pcfg_flags; + + __u32 pcfg_gw_nal; + __u64 pcfg_nid; + __u64 pcfg_nid2; + __u64 pcfg_nid3; + __u32 pcfg_id; + __u32 pcfg_misc; + __u32 pcfg_fd; + __u32 pcfg_count; + __u32 pcfg_size; + __u32 pcfg_wait; + + __u32 pcfg_plen1; /* buffers in userspace */ + char *pcfg_pbuf1; + __u32 pcfg_plen2; /* buffers in userspace */ + char *pcfg_pbuf2; +}; + +#define PCFG_INIT(pcfg, cmd) \ +do { \ + memset(&pcfg, 0, sizeof(pcfg)); \ + pcfg.pcfg_version = PORTALS_CFG_VERSION; \ + pcfg.pcfg_command = (cmd); \ + \ +} while (0) + +typedef int (nal_cmd_handler_fn)(struct portals_cfg *, void *); +int libcfs_nal_cmd_register(int nal, nal_cmd_handler_fn *handler, void *arg); +int libcfs_nal_cmd(struct portals_cfg *pcfg); +void libcfs_nal_cmd_unregister(int nal); + struct portal_ioctl_data { __u32 ioc_len; __u32 ioc_version; @@ -197,6 +323,7 @@ struct portal_ioctl_data { char ioc_bulk[0]; }; + #ifdef __KERNEL__ #include