X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Fklnds%2Fgmlnd%2Fgmlnd.h;h=604d367cc1fae0807c12957589814004001e149c;hb=30ed781ce3d181bef5e1720309acc4da8b4c38df;hp=cdde5b75da322a4aac33ee54996ae784d03a5c78;hpb=e0576be940d7af30b2ba6e219891a4413670325d;p=fs%2Flustre-release.git diff --git a/lnet/klnds/gmlnd/gmlnd.h b/lnet/klnds/gmlnd/gmlnd.h index cdde5b7..604d367 100644 --- a/lnet/klnds/gmlnd/gmlnd.h +++ b/lnet/klnds/gmlnd/gmlnd.h @@ -28,6 +28,13 @@ #ifndef __INCLUDE_GMNAL_H__ #define __INCLUDE_GMNAL_H__ +/* XXX Lustre as of V1.2.2 drop defines VERSION, which causes problems + * when including /include/gm_lanai.h which defines a structure field + * with the name VERSION XXX */ +#ifdef VERSION +# undef VERSION +#endif + #ifndef EXPORT_SYMTAB # define EXPORT_SYMTAB #endif @@ -45,19 +52,23 @@ #include "linux/init.h" #include "linux/sem.h" #include "linux/vmalloc.h" +#include "linux/sysctl.h" -#define DEBUG_SUBSYSTEM S_GMNAL +#define DEBUG_SUBSYSTEM S_NAL #include "portals/nal.h" #include "portals/api.h" #include "portals/errno.h" -#include "linux/kp30.h" +#include "libcfs/kp30.h" #include "portals/p30.h" -#include "portals/lib-nal.h" +#include "portals/nal.h" #include "portals/lib-p30.h" #define GM_STRONG_TYPES 1 +#ifdef VERSION +#undef VERSION +#endif #include "gm.h" #include "gm_internal.h" @@ -80,9 +91,14 @@ extern int gmnal_small_msg_size; extern int num_rx_threads; extern int num_stxds; +extern int gm_port_id; #define GMNAL_SMALL_MSG_SIZE(a) a->small_msg_size #define GMNAL_IS_SMALL_MESSAGE(n,a,b,c) gmnal_is_small_msg(n, a, b, c) #define GMNAL_MAGIC 0x1234abcd +/* + * The gm_port to use for gmnal + */ +#define GMNAL_GM_PORT_ID gm_port_id /* @@ -147,13 +163,14 @@ typedef struct _gmnal_srxd_t { /* * Header which lmgnal puts at the start of each message + * watch alignment for ia32/64 interaction */ typedef struct _gmnal_msghdr { int magic; int type; unsigned int sender_node_id; - gmnal_stxd_t *stxd; int niov; + gm_remote_ptr_t stxd_remote_ptr; /* 64 bits */ } gmnal_msghdr_t; #define GMNAL_MSGHDR_SIZE sizeof(gmnal_msghdr_t) @@ -200,7 +217,7 @@ typedef struct _gmnal_data_t { gmnal_srxd_t *srxd; struct gm_hash *srxd_hash; nal_t *nal; - nal_cb_t *nal_cb; + lib_nal_t *libnal; struct gm_port *gm_port; unsigned int gm_local_nid; unsigned int gm_global_nid; @@ -218,6 +235,7 @@ typedef struct _gmnal_data_t { gmnal_rxtwe_t *rxtwe_tail; spinlock_t rxtwe_lock; struct semaphore rxtwe_wait; + struct ctl_table_header *sysctl; } gmnal_data_t; /* @@ -234,11 +252,6 @@ typedef struct _gmnal_data_t { extern gmnal_data_t *global_nal_data; /* - * The gm_port to use for gmnal - */ -#define GMNAL_GM_PORT 4 - -/* * for ioctl get pid */ #define GMNAL_IOC_GET_GNID 1 @@ -307,13 +320,16 @@ extern gmnal_data_t *global_nal_data; /* * API NAL */ +int gmnal_api_startup(nal_t *, ptl_pid_t, + ptl_ni_limits_t *, ptl_ni_limits_t *); + int gmnal_api_forward(nal_t *, int, void *, size_t, void *, size_t); -int gmnal_api_shutdown(nal_t *, int); +void gmnal_api_shutdown(nal_t *); int gmnal_api_validate(nal_t *, void *, size_t); -void gmnal_api_yield(nal_t *); +void gmnal_api_yield(nal_t *, unsigned long *, int); void gmnal_api_lock(nal_t *, unsigned long *); @@ -321,15 +337,9 @@ void gmnal_api_unlock(nal_t *, unsigned long *); #define GMNAL_INIT_NAL(a) do { \ - a->forward = gmnal_api_forward; \ - a->shutdown = gmnal_api_shutdown; \ - a->validate = NULL; \ - a->yield = gmnal_api_yield; \ - a->lock = gmnal_api_lock; \ - a->unlock = gmnal_api_unlock; \ - a->timeout = NULL; \ - a->refct = 1; \ - a->nal_data = NULL; \ + (a)->nal_ni_init = gmnal_api_startup; \ + (a)->nal_ni_fini = gmnal_api_shutdown; \ + (a)->nal_data = NULL; \ } while (0) @@ -337,61 +347,35 @@ void gmnal_api_unlock(nal_t *, unsigned long *); * CB NAL */ -int gmnal_cb_send(nal_cb_t *, void *, lib_msg_t *, ptl_hdr_t *, - int, ptl_nid_t, ptl_pid_t, unsigned int, struct iovec *, size_t); - -int gmnal_cb_send_pages(nal_cb_t *, void *, lib_msg_t *, ptl_hdr_t *, - int, ptl_nid_t, ptl_pid_t, unsigned int, ptl_kiov_t *, size_t); - -int gmnal_cb_recv(nal_cb_t *, void *, lib_msg_t *, - unsigned int, struct iovec *, size_t, size_t); - -int gmnal_cb_recv_pages(nal_cb_t *, void *, lib_msg_t *, - unsigned int, ptl_kiov_t *, size_t, size_t); - -int gmnal_cb_read(nal_cb_t *, void *private, void *, user_ptr, size_t); - -int gmnal_cb_write(nal_cb_t *, void *private, user_ptr, void *, size_t); - -void *gmnal_cb_malloc(nal_cb_t *, size_t); - -void gmnal_cb_free(nal_cb_t *, void *, size_t); - -void gmnal_cb_unmap(nal_cb_t *, unsigned int, struct iovec*, void **); - -int gmnal_cb_map(nal_cb_t *, unsigned int, struct iovec*, void **); +ptl_err_t gmnal_cb_send(lib_nal_t *, void *, lib_msg_t *, ptl_hdr_t *, + int, ptl_nid_t, ptl_pid_t, unsigned int, struct iovec *, size_t, size_t); -void gmnal_cb_printf(nal_cb_t *, const char *fmt, ...); +ptl_err_t gmnal_cb_send_pages(lib_nal_t *, void *, lib_msg_t *, ptl_hdr_t *, + int, ptl_nid_t, ptl_pid_t, unsigned int, ptl_kiov_t *, size_t, size_t); -void gmnal_cb_cli(nal_cb_t *, unsigned long *); +ptl_err_t gmnal_cb_recv(lib_nal_t *, void *, lib_msg_t *, + unsigned int, struct iovec *, size_t, size_t, size_t); -void gmnal_cb_sti(nal_cb_t *, unsigned long *); +ptl_err_t gmnal_cb_recv_pages(lib_nal_t *, void *, lib_msg_t *, + unsigned int, ptl_kiov_t *, size_t, size_t, size_t); -int gmnal_cb_dist(nal_cb_t *, ptl_nid_t, unsigned long *); +int gmnal_cb_dist(lib_nal_t *, ptl_nid_t, unsigned long *); -nal_t *gmnal_init(int, ptl_pt_index_t, ptl_ac_index_t, ptl_pid_t rpid); +int gmnal_init(void); void gmnal_fini(void); #define GMNAL_INIT_NAL_CB(a) do { \ - a->cb_send = gmnal_cb_send; \ - a->cb_send_pages = gmnal_cb_send_pages; \ - a->cb_recv = gmnal_cb_recv; \ - a->cb_recv_pages = gmnal_cb_recv_pages; \ - a->cb_read = gmnal_cb_read; \ - a->cb_write = gmnal_cb_write; \ - a->cb_callback = NULL; \ - a->cb_malloc = gmnal_cb_malloc; \ - a->cb_free = gmnal_cb_free; \ - a->cb_map = NULL; \ - a->cb_unmap = NULL; \ - a->cb_printf = gmnal_cb_printf; \ - a->cb_cli = gmnal_cb_cli; \ - a->cb_sti = gmnal_cb_sti; \ - a->cb_dist = gmnal_cb_dist; \ - a->nal_data = NULL; \ + a->libnal_send = gmnal_cb_send; \ + a->libnal_send_pages = gmnal_cb_send_pages; \ + a->libnal_recv = gmnal_cb_recv; \ + a->libnal_recv_pages = gmnal_cb_recv_pages; \ + a->libnal_map = NULL; \ + a->libnal_unmap = NULL; \ + a->libnal_dist = gmnal_cb_dist; \ + a->libnal_data = NULL; \ } while (0) @@ -416,8 +400,8 @@ void gmnal_return_srxd(gmnal_data_t *, gmnal_srxd_t *); gmnal_srxd_t *gmnal_rxbuffer_to_srxd(gmnal_data_t *, void*); void gmnal_stop_rxthread(gmnal_data_t *); void gmnal_stop_ctthread(gmnal_data_t *); -void gmnal_small_tx_callback(gm_port_t *, void *, gm_status_t); void gmnal_drop_sends_callback(gm_port_t *, void *, gm_status_t); +void gmnal_resume_sending_callback(gm_port_t *, void *, gm_status_t); char *gmnal_gm_error(gm_status_t); char *gmnal_rxevent(gm_recv_event_t*); int gmnal_is_small_msg(gmnal_data_t*, int, struct iovec*, int); @@ -445,11 +429,10 @@ void gmnal_remove_rxtwe(gmnal_data_t *); /* * Small messages */ -int gmnal_small_rx(nal_cb_t *, void *, lib_msg_t *, unsigned int, - struct iovec *, size_t, size_t); -int gmnal_small_tx(nal_cb_t *, void *, lib_msg_t *, ptl_hdr_t *, +ptl_err_t gmnal_small_rx(lib_nal_t *, void *, lib_msg_t *); +ptl_err_t gmnal_small_tx(lib_nal_t *, void *, lib_msg_t *, ptl_hdr_t *, int, ptl_nid_t, ptl_pid_t, - unsigned int, struct iovec*, int); + gmnal_stxd_t*, int); void gmnal_small_tx_callback(gm_port_t *, void *, gm_status_t); @@ -457,12 +440,12 @@ void gmnal_small_tx_callback(gm_port_t *, void *, gm_status_t); /* * Large messages */ -int gmnal_large_rx(nal_cb_t *, void *, lib_msg_t *, unsigned int, - struct iovec *, size_t, size_t); +int gmnal_large_rx(lib_nal_t *, void *, lib_msg_t *, unsigned int, + struct iovec *, size_t, size_t, size_t); -int gmnal_large_tx(nal_cb_t *, void *, lib_msg_t *, ptl_hdr_t *, +int gmnal_large_tx(lib_nal_t *, void *, lib_msg_t *, ptl_hdr_t *, int, ptl_nid_t, ptl_pid_t, unsigned int, - struct iovec*, int); + struct iovec*, size_t, int); void gmnal_large_tx_callback(gm_port_t *, void *, gm_status_t);