Whamcloud - gitweb
b=5786
[fs/lustre-release.git] / lnet / klnds / gmlnd / gmlnd.h
index e48552e..604d367 100644 (file)
 #ifndef __INCLUDE_GMNAL_H__
 #define __INCLUDE_GMNAL_H__
 
+/* XXX Lustre as of V1.2.2 drop defines VERSION, which causes problems
+ * when including <GM>/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
 #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"
 
 extern  int gmnal_small_msg_size;
 extern  int num_rx_threads;
 extern  int num_stxds;
-extern  int gm_port;
+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  gm_port
+#define GMNAL_GM_PORT_ID       gm_port_id
 
 
 /*
@@ -153,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)
 
@@ -190,6 +201,7 @@ typedef struct _gmnal_rxtwe {
 #define NRXTHREADS 10 /* max number of receiver threads */
 
 typedef struct _gmnal_data_t {
+       int             refcnt;
        spinlock_t      cb_lock;
        spinlock_t      stxd_lock;
        struct semaphore stxd_token;
@@ -205,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;
@@ -325,14 +337,9 @@ void gmnal_api_unlock(nal_t *, unsigned long *);
 
 
 #define GMNAL_INIT_NAL(a)      do {    \
-                                a->startup = gmnal_api_startup; \
-                               a->forward = gmnal_api_forward; \
-                               a->shutdown = gmnal_api_shutdown; \
-                               a->yield = gmnal_api_yield; \
-                               a->lock = gmnal_api_lock; \
-                               a->unlock = gmnal_api_unlock; \
-                               a->timeout = NULL; \
-                               a->nal_data = NULL; \
+                                (a)->nal_ni_init = gmnal_api_startup; \
+                               (a)->nal_ni_fini = gmnal_api_shutdown; \
+                               (a)->nal_data = NULL; \
                                } while (0)
 
 
@@ -340,39 +347,19 @@ 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);
-
-int gmnal_cb_callback(nal_cb_t *, void *, lib_eq_t *, ptl_event_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 *);
 
 int gmnal_init(void);
 
@@ -381,22 +368,14 @@ 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 = gmnal_cb_callback; \
-                               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)
 
 
@@ -421,7 +400,6 @@ 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);
@@ -451,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);
 
 
@@ -463,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);