X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Finclude%2Flnet%2Flib-types.h;h=73b958062f46f80f99e27b5f96792e1ef0a2d551;hb=8d38912a8445060ccb5ca64f956ed8c4d584a904;hp=f4ef8ffaac2245752b6d9f19aceaf45db0a8ec49;hpb=913c8e22cfc4fc5f52c4f0d6d3f0b4b86a7ac58c;p=fs%2Flustre-release.git diff --git a/lnet/include/lnet/lib-types.h b/lnet/include/lnet/lib-types.h index f4ef8ff..73b9580 100644 --- a/lnet/include/lnet/lib-types.h +++ b/lnet/include/lnet/lib-types.h @@ -26,6 +26,8 @@ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -46,6 +48,8 @@ #include #elif defined(__WINNT__) #include +#include +#include #else #error Unsupported Operating System #endif @@ -57,7 +61,6 @@ #define WIRE_ATTR __attribute__((packed)) /* Packed version of lnet_process_id_t to transfer via network */ -#include typedef struct { lnet_nid_t nid; lnet_pid_t pid; /* node id / process id */ @@ -71,7 +74,6 @@ typedef struct { __u64 wh_interface_cookie; __u64 wh_object_cookie; } WIRE_ATTR lnet_handle_wire_t; -#include typedef enum { LNET_MSG_ACK = 0, @@ -85,7 +87,6 @@ typedef enum { * byte boundary in the message header. Note that all types used in these * wire structs MUST be fixed size and the smaller types are placed at the * end. */ -#include typedef struct lnet_ack { lnet_handle_wire_t dst_wmd; __u64 match_bits; @@ -175,7 +176,6 @@ typedef struct { __u32 acr_version; /* protocol version */ __u64 acr_nid; /* target NID */ } WIRE_ATTR lnet_acceptor_connreq_t; -#include #define LNET_PROTO_ACCEPTOR_VERSION 1 @@ -260,6 +260,7 @@ typedef struct lnet_me { lnet_libhandle_t me_lh; lnet_process_id_t me_match_id; unsigned int me_portal; + unsigned int me_pos; /* hash offset in mt_hash */ __u64 me_match_bits; __u64 me_ignore_bits; lnet_unlink_t me_unlink; @@ -411,7 +412,7 @@ struct lnet_tx_queue { typedef struct lnet_ni { #ifdef __KERNEL__ - cfs_spinlock_t ni_lock; + spinlock_t ni_lock; #else # ifndef HAVE_LIBPTHREAD int ni_lock; @@ -529,8 +530,12 @@ typedef struct { unsigned int lr_hops; /* how far I am */ } lnet_route_t; +#define LNET_REMOTE_NETS_HASH_DEFAULT (1U << 7) +#define LNET_REMOTE_NETS_HASH_MAX (1U << 16) +#define LNET_REMOTE_NETS_HASH_SIZE (1 << the_lnet.ln_remote_nets_hbits) + typedef struct { - cfs_list_t lrn_list; /* chain on ln_remote_nets */ + cfs_list_t lrn_list; /* chain on ln_remote_nets_hash */ cfs_list_t lrn_routes; /* routes to me */ __u32 lrn_net; /* my net number */ } lnet_remotenet_t; @@ -550,7 +555,6 @@ typedef struct { lnet_kiov_t rb_kiov[0]; /* the buffer space */ } lnet_rtrbuf_t; -#include typedef struct { __u32 msgs_alloc; __u32 msgs_max; @@ -564,7 +568,6 @@ typedef struct { __u64 route_length; __u64 drop_length; } WIRE_ATTR lnet_counters_t; -#include #define LNET_PEER_HASHSIZE 503 /* prime! */ @@ -601,6 +604,16 @@ struct lnet_match_info { /* ME hash of RDMA portal */ #define LNET_MT_HASH_BITS 8 #define LNET_MT_HASH_SIZE (1 << LNET_MT_HASH_BITS) +#define LNET_MT_HASH_MASK (LNET_MT_HASH_SIZE - 1) +/* we allocate (LNET_MT_HASH_SIZE + 1) entries for lnet_match_table::mt_hash, + * the last entry is reserved for MEs with ignore-bits */ +#define LNET_MT_HASH_IGNORE LNET_MT_HASH_SIZE +/* __u64 has 2^6 bits, so need 2^(LNET_MT_HASH_BITS - LNET_MT_BITS_U64) which + * is 4 __u64s as bit-map, and add an extra __u64 (only use one bit) for the + * ME-list with ignore-bits, which is mtable::mt_hash[LNET_MT_HASH_IGNORE] */ +#define LNET_MT_BITS_U64 6 /* 2^6 bits */ +#define LNET_MT_EXHAUSTED_BITS (LNET_MT_HASH_BITS - LNET_MT_BITS_U64) +#define LNET_MT_EXHAUSTED_BMAP ((1 << LNET_MT_EXHAUSTED_BITS) + 1) /* portal match table */ struct lnet_match_table { @@ -608,9 +621,10 @@ struct lnet_match_table { unsigned int mt_cpt; unsigned int mt_portal; /* portal index */ /* match table is set as "enabled" if there's non-exhausted MD - * attached on mt_mlist, it's only valide for wildcard portal */ + * attached on mt_mhash, it's only valide for wildcard portal */ unsigned int mt_enabled; - cfs_list_t mt_mlist; /* matching list */ + /* bitmap to flag whether MEs on mt_hash are exhausted or not */ + __u64 mt_exhausted[LNET_MT_EXHAUSTED_BMAP]; cfs_list_t *mt_mhash; /* matching hash */ }; @@ -626,7 +640,7 @@ struct lnet_match_table { typedef struct lnet_portal { #ifdef __KERNEL__ - cfs_spinlock_t ptl_lock; + spinlock_t ptl_lock; #else # ifndef HAVE_LIBPTHREAD int ptl_lock; @@ -709,7 +723,7 @@ typedef struct struct lnet_res_container ln_eq_container; #ifdef __KERNEL__ cfs_waitq_t ln_eq_waitq; - cfs_spinlock_t ln_eq_wait_lock; + spinlock_t ln_eq_wait_lock; #else # ifndef HAVE_LIBPTHREAD int ln_eq_wait_lock; @@ -718,6 +732,8 @@ typedef struct pthread_mutex_t ln_eq_wait_lock; # endif #endif + unsigned int ln_remote_nets_hbits; + /* protect NI, peer table, credits, routers, rtrbuf... */ struct cfs_percpt_lock *ln_net_lock; /* percpt message containers for active/finalizing/freed message */ @@ -737,7 +753,7 @@ typedef struct lnet_ni_t *ln_eq_waitni; /* remote networks with routes to them */ - cfs_list_t ln_remote_nets; + cfs_list_t *ln_remote_nets_hash; /* validity stamp */ __u64 ln_remote_nets_version; /* list of all known routers */ @@ -761,10 +777,10 @@ typedef struct cfs_list_t ln_rcd_zombie; #ifdef __KERNEL__ /* serialise startup/shutdown */ - cfs_semaphore_t ln_rc_signal; + struct semaphore ln_rc_signal; - cfs_mutex_t ln_api_mutex; - cfs_mutex_t ln_lnd_mutex; + struct mutex ln_api_mutex; + struct mutex ln_lnd_mutex; #else # ifndef HAVE_LIBPTHREAD int ln_api_mutex;