AM_CFLAGS = -g -Wall -D_GNU_SOURCE -DDAT_CONF="\"$(sysconfdir)/dat.conf\""
endif
+AM_CFLAGS += -DPACKAGE_DATE=$$(date +'%Y%m%d')
+
sysconf_DATA = doc/dat.conf
datlibdir = $(libdir)
#include <stdlib.h>
#endif /* __KDAPL__ */
+DAPL_DBG_TYPE g_dapl_dbg_level; /* debug type override */
DAPL_DBG_TYPE g_dapl_dbg_type; /* initialized in dapl_init.c */
DAPL_DBG_DEST g_dapl_dbg_dest; /* initialized in dapl_init.c */
+int g_dapl_dbg_mem; /* initialized in dapl_init.c */
static char *_ptr_host_ = NULL;
static char _hostname_[128];
last_t = start_t;
}
- if (type & g_dapl_dbg_type) {
+ if ((type & g_dapl_dbg_type) || (type & g_dapl_dbg_level)) {
if (DAPL_DBG_DEST_STDOUT & g_dapl_dbg_dest) {
dapl_os_get_time(¤t_t);
delta_t = current_t - last_t;
if (g_dapl_dbg_type & DAPL_DBG_TYPE_DIAG_ERRS)
dapl_stop_diag_cntrs(dh);
+ if (g_dapl_dbg_type & DAPL_DBG_TYPE_IA_STATS)
+ dapl_print_counter_str(dh, DCNT_IA_ALL_COUNTERS, 1, "_IA");
if (g_dapl_dbg_type & DAPL_DBG_TYPE_CM_STATS)
dapl_print_counter_str(dh, DCNT_IA_ALL_COUNTERS, 1, "_CM");
else if (g_dapl_dbg_type & DAPL_DBG_TYPE_CM_ERRS)
*/
if (ep_attr != NULL && (
#ifndef DAT_EXTENSIONS
- ep_attr->service_type !=
- DAT_SERVICE_TYPE_RC ||
+ ep_attr->service_type != DAT_SERVICE_TYPE_RC ||
#endif
(recv_evd_handle == DAT_HANDLE_NULL
&& ep_attr->max_recv_dtos != 0)
dapl_ep_check_recv_completion_flags
(ep_attr->recv_completion_flags)))) {
dat_status = DAT_ERROR(DAT_INVALID_PARAMETER, DAT_INVALID_ARG6);
+ dapl_log(DAPL_DBG_TYPE_ERR, "dapl_ep_create: failed EP attributes\n");
goto bail;
}
ep_attr->max_request_dtos > ep_attr_limit.max_request_dtos
|| ep_attr->max_recv_iov > ep_attr_limit.max_recv_iov
|| ep_attr->max_request_iov > ep_attr_limit.max_request_iov
- || ep_attr->max_rdma_read_in >
- ep_attr_limit.max_rdma_read_in
- || ep_attr->max_rdma_read_out >
- ep_attr_limit.max_rdma_read_out)
+ || ep_attr->max_rdma_read_in > ep_attr_limit.max_rdma_read_in
+ || ep_attr->max_rdma_read_out > ep_attr_limit.max_rdma_read_out)
{
dat_status = DAT_INVALID_PARAMETER | DAT_INVALID_ARG6;
+ dapl_log(DAPL_DBG_TYPE_ERR, "dapl_ep_create: failed Transport attributes\n");
goto bail;
}
}
#ifdef DAPL_DBG
/* check if event pending and warn, don't assert, state is valid */
if (ep_ptr->param.ep_state == DAT_EP_STATE_DISCONNECT_PENDING) {
- dapl_dbg_log(DAPL_DBG_TYPE_WARN, " dat_ep_free WARNING: "
+ dapl_dbg_log(DAPL_DBG_TYPE_EP, " dat_ep_free WARNING: "
"EVENT PENDING on ep %p, disconnect "
"and wait before calling dat_ep_free\n", ep_ptr);
}
OP_RDMA_WRITE);
dapl_dbg_log(DAPL_DBG_TYPE_RTN,
- "dapl_ep_post_rdma_write () returns 0x%x", dat_status);
+ "dapl_ep_post_rdma_write () returns 0x%x\n", dat_status);
return dat_status;
}
DAPL_MAX_PRIVATE_DATA_SIZE));
dapl_dbg_log(DAPL_DBG_TYPE_CM | DAPL_DBG_TYPE_CALLBACK,
- "dapl_evd_connection_callback PEER REJ pd=%p sz=%d\n",
- prd_ptr, private_data_size);
+ "dapl_evd_connection_callback PEER REJ ep=%p pd=%p sz=%d\n",
+ ep_ptr, prd_ptr, private_data_size);
}
case DAT_CONNECTION_EVENT_DISCONNECTED:
case DAT_CONNECTION_EVENT_UNREACHABLE:
DAPL_EVD *evd;
DAT_RETURN dat_status;
- dapl_dbg_log(DAPL_DBG_TYPE_CALLBACK | DAPL_DBG_TYPE_EXCEPTION,
- "dapl_evd_cq_async_error_callback (%p, %p, %p, %p)\n",
- ib_hca_handle, ib_cq_handle, cause_ptr, context);
+ dapl_log(DAPL_DBG_TYPE_WARN, " -- %s (%p, %p, %p, %p)\n",
+ __FUNCTION__, ib_hca_handle, ib_cq_handle,
+ cause_ptr, context);
if (NULL == context) {
dapl_os_panic("NULL == context\n");
dat_status = dapls_ib_completion_notify(hca_handle,
evd_ptr,
IB_NOTIFY_ON_NEXT_COMP);
-
if (DAT_SUCCESS != dat_status) {
+ dapl_log(DAPL_DBG_TYPE_WARN, " -- %s notify ERR, CQ %p, st %x\n",
+ __FUNCTION__, (void *)evd_ptr->ib_cq_handle, state);
+
(void)dapls_evd_post_async_error_event(evd_ptr->
header.
owner_ia->
async_evd = (DAPL_EVD *) ia_ptr->async_error_evd;
DAPL_CNTR(ia_ptr, DCNT_IA_ASYNC_QP_ERROR);
- dapl_dbg_log(DAPL_DBG_TYPE_CALLBACK | DAPL_DBG_TYPE_EXCEPTION,
- "--> %s: ep %p qp %p (%x) state %d\n", __FUNCTION__,
- ep_ptr,
- ep_ptr->qp_handle, ep_ptr->qpn, ep_ptr->param.ep_state);
+ dapl_log(DAPL_DBG_TYPE_WARN, " -- %s: ep %p qp %p (%x) state %d\n",
+ __FUNCTION__, ep_ptr, ep_ptr->qp_handle,
+ ep_ptr->qpn, ep_ptr->param.ep_state);
/*
* Transition to ERROR if we are connected; other states need to
DAT_EVENT_NUMBER async_event;
DAT_RETURN dat_status;
- dapl_dbg_log(DAPL_DBG_TYPE_CALLBACK | DAPL_DBG_TYPE_EXCEPTION,
- "dapl_evd_un_async_error_callback (%p, %p, %p)\n",
- ib_hca_handle, cause_ptr, context);
-
if (NULL == context) {
dapl_os_panic("NULL == context\n");
return;
async_event,
async_evd->header.owner_ia);
}
- dapl_dbg_log(DAPL_DBG_TYPE_CALLBACK | DAPL_DBG_TYPE_EXCEPTION,
- "dapl_evd_un_async_error_callback () returns\n");
}
DAPL_DBG_TYPE_LINK_ERRS = 0x100000,
DAPL_DBG_TYPE_LINK_WARN = 0x200000,
DAPL_DBG_TYPE_DIAG_ERRS = 0x400000,
+ DAPL_DBG_TYPE_SYS_WARN = 0x800000,
+ DAPL_DBG_TYPE_VER = 0x1000000,
+ DAPL_DBG_TYPE_IA_STATS = 0x2000000,
} DAPL_DBG_TYPE;
DAPL_DBG_DEST_SYSLOG = 0x0002,
} DAPL_DBG_DEST;
+extern DAPL_DBG_TYPE g_dapl_dbg_level;
extern DAPL_DBG_TYPE g_dapl_dbg_type;
extern DAPL_DBG_DEST g_dapl_dbg_dest;
+extern int g_dapl_dbg_mem;
extern void dapl_internal_dbg_log(DAPL_DBG_TYPE type, const char *fmt, ...);
-#define dapl_log g_dapl_dbg_type==0 ? (void) 1 : dapl_internal_dbg_log
+#define dapl_log !g_dapl_dbg_type && !g_dapl_dbg_level ? (void) 1 : dapl_internal_dbg_log
#if defined(DAPL_DBG)
-#define dapl_dbg_log g_dapl_dbg_type==0 ? (void) 1 : dapl_internal_dbg_log
+#define dapl_dbg_log !g_dapl_dbg_type && !g_dapl_dbg_level ? (void) 1 : dapl_internal_dbg_log
#else
#define dapl_dbg_log(...)
#endif
#include "dapl_name_service.h"
#include "dapl_timer_util.h"
#include "dapl_vendor.h"
+#include "config.h"
+
/*
* dapl_init
/* set up debug type */
g_dapl_dbg_type = dapl_os_get_env_val("DAPL_DBG_TYPE",
DAPL_DBG_TYPE_ERR | DAPL_DBG_TYPE_WARN);
+
+ g_dapl_dbg_level = dapl_os_get_env_val("DAPL_DBG_LEVEL", 0);
+
/* set up debug destination */
g_dapl_dbg_dest = dapl_os_get_env_val("DAPL_DBG_DEST",
DAPL_DBG_DEST_STDOUT);
+ g_dapl_dbg_mem = dapl_os_get_env_val("DAPL_DBG_SYS_MEM", 5);
+
/* open log file on first logging call if necessary */
if (g_dapl_dbg_dest & DAPL_DBG_DEST_SYSLOG)
openlog("libdapl", LOG_ODELAY | LOG_PID | LOG_CONS, LOG_USER);
- dapl_log(DAPL_DBG_TYPE_UTIL, "dapl_init: dbg_type=0x%x,dbg_dest=0x%x\n",
- g_dapl_dbg_type, g_dapl_dbg_dest);
+ dapl_log(DAPL_DBG_TYPE_UTIL, "dapl_init: dbg_type=%x,dbg_dest=%x,dbg_level=%x\n",
+ g_dapl_dbg_type, g_dapl_dbg_dest, g_dapl_dbg_level);
+
+ dapl_log(DAPL_DBG_TYPE_VER, " %s dapl-%s-%u, DAPL_DBG_TYPE 0x%x\n",
+ PROVIDER_NAME, VERSION, PACKAGE_DATE, g_dapl_dbg_type);
/* See if the user is on a loopback setup */
g_dapl_loopback_connection = dapl_os_get_env_bool("DAPL_LOOPBACK");
reg_desc.for_va = virt_addr;
dat_status = DAT_SUCCESS;
+ dapl_dbg_log(DAPL_DBG_TYPE_API, "dapl_lmr_create (ia=%p,pz=%p)\n", ia, pz);
+
lmr = dapl_lmr_alloc(ia,
DAT_MEM_TYPE_VIRTUAL,
reg_desc, length, (DAT_PZ_HANDLE) pz, privileges);
lmr,
virt_addr,
length, privileges, va_type);
-
+#ifdef DAPL_COUNTERS
+ dapl_os_memchk(g_dapl_dbg_mem, "create_mr");
+#endif
if (DAT_SUCCESS != dat_status) {
dapl_lmr_dealloc(lmr);
goto bail;
#include <signal.h>
#include <netinet/tcp.h>
#include <sys/utsname.h>
+#include <sys/sysinfo.h>
#include <fcntl.h>
#if !defined(SUSE_11) && !defined(REDHAT_EL5) && defined(__ia64__)
* Memory Functions
*/
+STATIC _INLINE_ void dapl_os_memchk(int percent, const char *txt);
+
/* function prototypes */
STATIC _INLINE_ void *dapl_os_alloc (int size);
STATIC _INLINE_ int dapl_os_memcmp (const void *mem1, const void *mem2, int len);
/* memory functions */
-
+STATIC _INLINE_ void dapl_os_memchk(int percent, const char *txt)
+{
+ struct sysinfo si;
+ double mfree, threshold = (double)percent/100;
+
+ sysinfo(&si);
+ mfree = si.freeram + si.sharedram + si.bufferram;
+
+ if (mfree/(double)si.totalram < threshold) {
+ dapl_log(DAPL_DBG_TYPE_SYS_WARN,
+ " WARNING: LOW MEMORY: %s (Free %d Share %d, Bufs %d)"
+ " < %2.2f percent of total (%d MB) memory\n",
+ txt, si.freeram/(1024*1024), si.sharedram/(1024*1024),
+ si.bufferram/(1024*1024), si.totalram/(1024*1024),
+ (mfree/(double)si.totalram)*100);
+ }
+}
STATIC _INLINE_ void *dapl_os_alloc (int size)
{
+#ifdef DAPL_COUNTERS
+ dapl_os_memchk(g_dapl_dbg_mem, "malloc");
+#endif
return malloc (size);
}