#include "linux/init.h"
#include "linux/sem.h"
#include "linux/vmalloc.h"
+#include "linux/sysctl.h"
#define DEBUG_SUBSYSTEM S_GMNAL
extern int gmnal_small_msg_size;
extern int num_rx_threads;
extern int num_stxds;
+extern int gm_port;
#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
/*
gmnal_rxtwe_t *rxtwe_tail;
spinlock_t rxtwe_lock;
struct semaphore rxtwe_wait;
+ struct ctl_table_header *sysctl;
} 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
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);
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_callback = gmnal_cb_callback; \
a->cb_malloc = gmnal_cb_malloc; \
a->cb_free = gmnal_cb_free; \
a->cb_map = NULL; \
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);
#include "gmnal.h"
+
+
gmnal_data_t *global_nal_data = NULL;
+#define GLOBAL_NID_STR_LEN 16
+char global_nid_str[GLOBAL_NID_STR_LEN] = {0};
+
+/*
+ * Write the global nid /proc/sys/gmnal/globalnid
+ */
+#define GMNAL_SYSCTL 201
+#define GMNAL_SYSCTL_GLOBALNID 1
+
+static ctl_table gmnal_sysctl_table[] = {
+ {GMNAL_SYSCTL_GLOBALNID, "globalnid",
+ global_nid_str, GLOBAL_NID_STR_LEN,
+ 0444, NULL, &proc_dostring},
+ { 0 }
+};
+
+
+static ctl_table gmnalnal_top_sysctl_table[] = {
+ {GMNAL_SYSCTL, "gmnal", NULL, 0, 0555, gmnal_sysctl_table},
+ { 0 }
+};
+
+
+
+
+
+
/*
* gmnal_api_forward
* This function takes a pack block of arguments from the NAL API
ptl_pid_t portals_pid = 0;
- CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d],
- ac_size[%d]\n", interface, ptl_size, ac_size);
+ CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d], "
+ "ac_size[%d]\n", interface, ptl_size, ac_size);
PORTAL_ALLOC(nal_data, sizeof(gmnal_data_t));
}
- CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d],
- name [%s], version [%d]\n", interface, GMNAL_GM_PORT,
+ CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d], "
+ "name [%s], version [%d]\n", interface, GMNAL_GM_PORT,
"gmnal", GM_API_VERSION);
GMNAL_GM_LOCK(nal_data);
CDEBUG(D_ERROR, "gm_open Failure. No such device\n");
break;
case(GM_INCOMPATIBLE_LIB_AND_DRIVER):
- CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib
- and driver\n");
+ CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib "
+ "and driver\n");
break;
case(GM_OUT_OF_MEMORY):
CDEBUG(D_ERROR, "gm_open Failure. Out of Memory\n");
break;
default:
- CDEBUG(D_ERROR, "gm_open Failure. Unknow error
- code [%d]\n", gm_status);
+ CDEBUG(D_ERROR, "gm_open Failure. Unknow error "
+ "code [%d]\n", gm_status);
break;
}
GMNAL_GM_LOCK(nal_data);
}
CDEBUG(D_INFO, "Global node id is [%u]\n", global_nid);
nal_data->gm_global_nid = global_nid;
+ snprintf(global_nid_str, GLOBAL_NID_STR_LEN, "%u", global_nid);
/*
pid = gm_getpid();
return(NULL);
}
+ nal_data->sysctl = NULL;
+ nal_data->sysctl = register_sysctl_table (gmnalnal_top_sysctl_table, 0);
+
CDEBUG(D_INFO, "gmnal_init finished\n");
global_nal_data = nal->nal_data;
gm_close(nal_data->gm_port);
gm_finalize();
GMNAL_GM_UNLOCK(nal_data);
+ if (nal_data->sysctl)
+ unregister_sysctl_table (nal_data->sysctl);
PORTAL_FREE(nal, sizeof(nal_t));
PORTAL_FREE(nal_data, sizeof(gmnal_data_t));
PORTAL_FREE(nal_cb, sizeof(nal_cb_t));
int status = PTL_OK;
- CDEBUG(D_TRACE, "gmnal_cb_recv nal_cb [%p], private[%p], cookie[%p],
- niov[%d], iov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
+ CDEBUG(D_TRACE, "gmnal_cb_recv nal_cb [%p], private[%p], cookie[%p], "
+ "niov[%d], iov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
nal_cb, private, cookie, niov, iov, mlen, rlen);
switch(srxd->type) {
int status = PTL_OK;
struct iovec *iovec = NULL, *iovec_dup = NULL;
int i = 0;
+ ptl_kiov_t *kiov_dup = kiov;;
- CDEBUG(D_TRACE, "gmnal_cb_recv_pages nal_cb [%p],private[%p],
- cookie[%p], kniov[%d], kiov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
+ CDEBUG(D_TRACE, "gmnal_cb_recv_pages nal_cb [%p],private[%p], "
+ "cookie[%p], kniov[%d], kiov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
nal_cb, private, cookie, kniov, kiov, mlen, rlen);
if (srxd->type == GMNAL_SMALL_MESSAGE) {
CDEBUG(D_INFO, "calling gmnal_small_rx\n");
status = gmnal_small_rx(nal_cb, private, cookie, kniov,
iovec_dup, mlen, rlen);
+ for (i=0; i<kniov; i++) {
+ kunmap(kiov_dup->kiov_page);
+ kiov_dup++;
+ }
PORTAL_FREE(iovec_dup, sizeof(struct iovec)*kniov);
}
niov, iov, len);
} else {
CDEBUG(D_ERROR, "Large message send it is not supported\n");
+ lib_finalize(nal_cb, private, cookie);
return(PTL_FAIL);
gmnal_large_tx(nal_cb, private, cookie, hdr, type, nid, pid,
niov, iov, len);
int i = 0;
gmnal_data_t *nal_data;
struct iovec *iovec = NULL, *iovec_dup = NULL;
+ ptl_kiov_t *kiov_dup = kiov;
CDEBUG(D_TRACE, "gmnal_cb_send_pages nid ["LPU64"] niov[%d] len["LPSZ"]\n", nid, kniov, len);
nal_data = nal_cb->nal_data;
gmnal_large_tx(nal_cb, private, cookie, hdr, type, nid,
pid, kniov, iovec, len);
}
+ for (i=0; i<kniov; i++) {
+ kunmap(kiov_dup->kiov_page);
+ kiov_dup++;
+ }
PORTAL_FREE(iovec_dup, kniov*sizeof(struct iovec));
return(PTL_OK);
}
return(PTL_OK);
}
+int gmnal_cb_callback(nal_cb_t *nal_cb, void *private, lib_eq_t *eq,
+ ptl_event_t *ev)
+{
+
+ if (eq->event_callback != NULL) {
+ CDEBUG(D_INFO, "found callback\n");
+ eq->event_callback(ev);
+ }
+
+ return(PTL_OK);
+}
+
void *gmnal_cb_malloc(nal_cb_t *nal_cb, size_t len)
{
void *ptr = NULL;
gmnal_msghdr = (gmnal_msghdr_t*)buffer;
portals_hdr = (ptl_hdr_t*)(buffer+GMNAL_MSGHDR_SIZE);
- CDEBUG(D_INFO, "rx_event:: Sender node [%d], Sender Port [%d],
- type [%d], length [%d], buffer [%p]\n",
+ CDEBUG(D_INFO, "rx_event:: Sender node [%d], Sender Port [%d], "
+ "type [%d], length [%d], buffer [%p]\n",
snode, sport, type, length, buffer);
- CDEBUG(D_INFO, "gmnal_msghdr:: Sender node [%u], magic [%d],
- gmnal_type [%d]\n", gmnal_msghdr->sender_node_id,
+ CDEBUG(D_INFO, "gmnal_msghdr:: Sender node [%u], magic [%d], "
+ "gmnal_type [%d]\n", gmnal_msghdr->sender_node_id,
gmnal_msghdr->magic, gmnal_msghdr->type);
- CDEBUG(D_INFO, "portals_hdr:: Sender node ["LPD64"],
- dest_node ["LPD64"]\n", portals_hdr->src_nid,
+ CDEBUG(D_INFO, "portals_hdr:: Sender node ["LPD64"], "
+ "dest_node ["LPD64"]\n", portals_hdr->src_nid,
portals_hdr->dest_nid);
if (!private) {
CDEBUG(D_ERROR, "gmnal_small_rx no context\n");
+ lib_finalize(nal_cb, private, cookie);
return(PTL_FAIL);
}
* let portals library know receive is complete
*/
CDEBUG(D_PORTALS, "calling lib_finalize\n");
- lib_finalize(nal_cb, private, cookie, PTL_OK);
-
+ if (lib_finalize(nal_cb, private, cookie) != PTL_OK) {
+ /* TO DO what to do with failed lib_finalise? */
+ CDEBUG(D_INFO, "lib_finalize failed\n");
+ }
/*
* return buffer so it can be used again
*/
unsigned int local_nid;
gm_status_t gm_status = GM_SUCCESS;
- CDEBUG(D_TRACE, "gmnal_small_tx nal_cb [%p] private [%p] cookie [%p]
- hdr [%p] type [%d] global_nid ["LPU64"] pid [%d] niov [%d]
- iov [%p] size [%d]\n", nal_cb, private, cookie, hdr, type,
+ CDEBUG(D_TRACE, "gmnal_small_tx nal_cb [%p] private [%p] cookie [%p] "
+ "hdr [%p] type [%d] global_nid ["LPU64"] pid [%d] niov [%d] "
+ "iov [%p] size [%d]\n", nal_cb, private, cookie, hdr, type,
global_nid, pid, niov, iov, size);
CDEBUG(D_INFO, "portals_hdr:: dest_nid ["LPU64"], src_nid ["LPU64"]\n",
stxd->msg_size = tot_size;
- CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p]
- gmsize [%lu] msize [%d] global_nid ["LPU64"] local_nid[%d]
- stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
+ CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p] "
+ "gmsize [%lu] msize [%d] global_nid ["LPU64"] local_nid[%d] "
+ "stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
stxd->msg_size, global_nid, local_nid, stxd);
GMNAL_GM_LOCK(nal_data);
/*
* do a resend on the dropped ones
*/
- CDEBUG(D_ERROR, "send stxd [%p] was dropped
- resending\n", context);
+ CDEBUG(D_ERROR, "send stxd [%p] was dropped "
+ "resending\n", context);
GMNAL_GM_LOCK(nal_data);
gm_send_to_peer_with_callback(nal_data->gm_port,
stxd->buffer,
case(GM_YP_NO_MATCH):
default:
CDEBUG(D_ERROR, "Unknown send error\n");
+ gm_resume_sending(nal_data->gm_port, stxd->gm_priority,
+ stxd->gm_target_node, GMNAL_GM_PORT,
+ gmnal_resume_sending_callback, context);
+ return;
+
}
/*
return;
}
gmnal_return_stxd(nal_data, stxd);
- lib_finalize(nal_cb, stxd, cookie, PTL_OK);
-
+ if (lib_finalize(nal_cb, stxd, cookie) != PTL_OK) {
+ CDEBUG(D_INFO, "Call to lib_finalize failed for stxd [%p]\n",
+ stxd);
+ }
return;
}
+/*
+ * After an error on the port
+ * call this to allow future sends to complete
+ */
+void gmnal_resume_sending_callback(struct gm_port *gm_port, void *context,
+ gm_status_t status)
+{
+ gmnal_data_t *nal_data;
+ gmnal_stxd_t *stxd = (gmnal_stxd_t*)context;
+ CDEBUG(D_TRACE, "status is [%d] context is [%p]\n", status, context);
+ gmnal_return_stxd(stxd->nal_data, stxd);
+ return;
+}
void gmnal_drop_sends_callback(struct gm_port *gm_port, void *context,
context);
GMNAL_GM_LOCK(nal_data);
} else {
- CDEBUG(D_ERROR, "send_to_peer status for stxd [%p] is
- [%d][%s]\n", stxd, status, gmnal_gm_error(status));
+ CDEBUG(D_ERROR, "send_to_peer status for stxd [%p] is "
+ "[%d][%s]\n", stxd, status, gmnal_gm_error(status));
}
int niov_dup;
- CDEBUG(D_TRACE, "gmnal_large_tx nal_cb [%p] private [%p], cookie [%p]
- hdr [%p], type [%d] global_nid ["LPU64"], pid [%d], niov [%d],
- iov [%p], size [%d]\n", nal_cb, private, cookie, hdr, type,
+ CDEBUG(D_TRACE, "gmnal_large_tx nal_cb [%p] private [%p], cookie [%p] "
+ "hdr [%p], type [%d] global_nid ["LPU64"], pid [%d], niov [%d], "
+ "iov [%p], size [%d]\n", nal_cb, private, cookie, hdr, type,
global_nid, pid, niov, iov, size);
if (nal_cb)
iov->iov_base, iov->iov_len);
if (gm_status != GM_SUCCESS) {
GMNAL_GM_UNLOCK(nal_data);
- CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s]
- for memory [%p] len ["LPSZ"]\n",
+ CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s] "
+ "for memory [%p] len ["LPSZ"]\n",
gm_status, gmnal_gm_error(gm_status),
iov->iov_base, iov->iov_len);
GMNAL_GM_LOCK(nal_data);
gmnal_msghdr_t *msghdr = NULL;
gm_status_t gm_status;
- CDEBUG(D_TRACE, "gmnal_large_rx :: nal_cb[%p], private[%p],
- cookie[%p], niov[%d], iov[%p], mlen["LPSZ"], rlen["LPSZ"]\n",
+ CDEBUG(D_TRACE, "gmnal_large_rx :: nal_cb[%p], private[%p], "
+ "cookie[%p], niov[%d], iov[%p], mlen["LPSZ"], rlen["LPSZ"]\n",
nal_cb, private, cookie, nriov, riov, mlen, rlen);
if (!srxd) {
CDEBUG(D_ERROR, "gmnal_large_rx no context\n");
+ lib_finalize(nal_cb, private, cookie);
return(PTL_FAIL);
}
riov->iov_base, riov->iov_len);
if (gm_status != GM_SUCCESS) {
GMNAL_GM_UNLOCK(nal_data);
- CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s]
- for memory [%p] len ["LPSZ"]\n",
+ CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s] "
+ "for memory [%p] len ["LPSZ"]\n",
gm_status, gmnal_gm_error(gm_status),
riov->iov_base, riov->iov_len);
GMNAL_GM_LOCK(nal_data);
int ncalls = 0;
- CDEBUG(D_TRACE, "gmnal_remote_get srxd[%p], nriov[%d], riov[%p],
- nsiov[%d], siov[%p]\n", srxd, nriov, riov, nsiov, siov);
+ CDEBUG(D_TRACE, "gmnal_remote_get srxd[%p], nriov[%d], riov[%p], "
+ "nsiov[%d], siov[%p]\n", srxd, nriov, riov, nsiov, siov);
ncalls = gmnal_copyiov(0, srxd, nsiov, siov, nriov, riov);
srxd->gm_source_node,
&source_node) != GM_SUCCESS) {
- CDEBUG(D_ERROR, "cannot resolve global_id [%u]
- to local node_id\n", srxd->gm_source_node);
+ CDEBUG(D_ERROR, "cannot resolve global_id [%u] "
+ "to local node_id\n", srxd->gm_source_node);
GMNAL_GM_UNLOCK(nal_data);
return(GMNAL_STATUS_FAIL);
}
* Let our client application proceed
*/
CDEBUG(D_ERROR, "final callback context[%p]\n", srxd);
- lib_finalize(nal_cb, srxd, srxd->cookie, PTL_OK);
+ if (lib_finalize(nal_cb, srxd, srxd->cookie) != PTL_OK) {
+ CDEBUG(D_INFO, "Call to lib_finalize failed for srxd [%p]\n",
+ srxd);
+ }
/*
* send an ack to the sender to let him know we got the data
stxd->msg_size= sizeof(gmnal_msghdr_t);
- CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p]
- gmsize [%lu] msize [%d] global_nid [%u] local_nid[%d]
- stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
+ CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p] "
+ "gmsize [%lu] msize [%d] global_nid [%u] local_nid[%d] "
+ "stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
stxd->msg_size, srxd->gm_source_node, local_nid, stxd);
GMNAL_GM_LOCK(nal_data);
stxd->gm_priority = GM_LOW_PRIORITY;
CDEBUG(D_INFO, "gmnal_large_tx_ack_received stxd [%p]\n", stxd);
- lib_finalize(nal_cb, stxd, stxd->cookie, PTL_OK);
+ if (lib_finalize(nal_cb, stxd, stxd->cookie) != PTL_OK) {
+ CDEBUG(D_INFO, "Call to lib_finalize failed for stxd [%p]\n",
+ stxd);
+ }
/*
* extract the iovec from the stxd, deregister the memory.
*/
int num_rx_threads = -1;
int num_stxds = 5;
+int gm_port = 4;
ptl_handle_ni_t kgmnal_ni;
MODULE_PARM(gmnal_small_msg_size, "i");
MODULE_PARM(num_rx_threads, "i");
MODULE_PARM(num_stxds, "i");
+MODULE_PARM(gm_port, "i");
MODULE_AUTHOR("Morgan Doyle");
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (!txbuffer) {
- CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],"
+ " size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(txd, sizeof(gmnal_stxd_t));
return(GMNAL_STATUS_FAIL);
txd->next = nal_data->stxd;
nal_data->stxd = txd;
- CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
}
for (i=0; i<=nrxt_stx; i++) {
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (!txbuffer) {
- CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],"
+ " size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(txd, sizeof(gmnal_stxd_t));
return(GMNAL_STATUS_FAIL);
txd->next = nal_data->rxt_stxd;
nal_data->rxt_stxd = txd;
- CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
}
/*
CDEBUG(D_TRACE, "gmnal_free_small tx\n");
while(txd) {
- CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
_txd = txd;
txd = txd->next;
GMNAL_GM_LOCK(nal_data);
}
txd = nal_data->rxt_stxd;
while(txd) {
- CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
_txd = txd;
txd = txd->next;
GMNAL_GM_LOCK(nal_data);
#if 0
PORTAL_ALLOC(rxbuffer, GMNAL_SMALL_MSG_SIZE(nal_data));
if (!rxbuffer) {
- CDEBUG(D_ERROR, "Failed to malloc rxbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to malloc rxbuffer [%d], "
+ "size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(rxd, sizeof(gmnal_srxd_t));
return(GMNAL_STATUS_FAIL);
}
- CDEBUG(D_NET, "Calling gm_register_memory with port [%p]
- rxbuffer [%p], size [%d]\n", nal_data->gm_port,
+ CDEBUG(D_NET, "Calling gm_register_memory with port [%p] "
+ "rxbuffer [%p], size [%d]\n", nal_data->gm_port,
rxbuffer, GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_LOCK(nal_data);
gm_status = gm_register_memory(nal_data->gm_port, rxbuffer,
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (gm_status != GM_SUCCESS) {
- CDEBUG(D_ERROR, "gm_register_memory failed buffer [%p],
- index [%d]\n", rxbuffer, i);
+ CDEBUG(D_ERROR, "gm_register_memory failed buffer [%p],"
+ " index [%d]\n", rxbuffer, i);
switch(gm_status) {
case(GM_FAILURE):
CDEBUG(D_ERROR, "GM_FAILURE\n");
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (!rxbuffer) {
- CDEBUG(D_ERROR, "Failed to gm_dma_malloc rxbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to gm_dma_malloc rxbuffer [%d],"
+ " size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(rxd, sizeof(gmnal_srxd_t));
return(GMNAL_STATUS_FAIL);
if (gm_hash_insert(nal_data->srxd_hash,
(void*)rxbuffer, (void*)rxd)) {
- CDEBUG(D_ERROR, "failed to create hash entry rxd[%p]
- for rxbuffer[%p]\n", rxd, rxbuffer);
+ CDEBUG(D_ERROR, "failed to create hash entry rxd[%p] "
+ "for rxbuffer[%p]\n", rxd, rxbuffer);
return(GMNAL_STATUS_FAIL);
}
rxd->next = nal_data->srxd;
nal_data->srxd = rxd;
- CDEBUG(D_INFO, "Registered rxd [%p] with buffer [%p],
- size [%d]\n", rxd, rxd->buffer, rxd->size);
+ CDEBUG(D_INFO, "Registered rxd [%p] with buffer [%p], "
+ "size [%d]\n", rxd, rxd->buffer, rxd->size);
}
return(GMNAL_STATUS_OK);
char *
gmnal_gm_error(gm_status_t status)
{
+ return(gm_strerror(status));
+
switch(status) {
case(GM_SUCCESS):
return("SUCCESS");
}
spin_lock(&nal_data->rxtwe_lock);
if (nal_data->rxtwe_head) {
- CDEBUG(D_WARNING, "Got a work entry\n");
+ CDEBUG(D_INFO, "Got a work entry\n");
we = nal_data->rxtwe_head;
nal_data->rxtwe_head = we->next;
if (!nal_data->rxtwe_head)
spin_unlock(&nal_data->rxtwe_lock);
} while (!we);
- CDEBUG(D_WARNING, "Returning we[%p]\n", we);
+ CDEBUG(D_INFO, "Returning we[%p]\n", we);
return(we);
}
free(pcfg.pcfg_pbuf1);
close(pfd);
printf("%u\n", nid);
- exit(nid);
+ exit(0);
}
#include "linux/init.h"
#include "linux/sem.h"
#include "linux/vmalloc.h"
+#include "linux/sysctl.h"
#define DEBUG_SUBSYSTEM S_GMNAL
extern int gmnal_small_msg_size;
extern int num_rx_threads;
extern int num_stxds;
+extern int gm_port;
#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
/*
gmnal_rxtwe_t *rxtwe_tail;
spinlock_t rxtwe_lock;
struct semaphore rxtwe_wait;
+ struct ctl_table_header *sysctl;
} 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
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);
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_callback = gmnal_cb_callback; \
a->cb_malloc = gmnal_cb_malloc; \
a->cb_free = gmnal_cb_free; \
a->cb_map = NULL; \
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);
#include "gmnal.h"
+
+
gmnal_data_t *global_nal_data = NULL;
+#define GLOBAL_NID_STR_LEN 16
+char global_nid_str[GLOBAL_NID_STR_LEN] = {0};
+
+/*
+ * Write the global nid /proc/sys/gmnal/globalnid
+ */
+#define GMNAL_SYSCTL 201
+#define GMNAL_SYSCTL_GLOBALNID 1
+
+static ctl_table gmnal_sysctl_table[] = {
+ {GMNAL_SYSCTL_GLOBALNID, "globalnid",
+ global_nid_str, GLOBAL_NID_STR_LEN,
+ 0444, NULL, &proc_dostring},
+ { 0 }
+};
+
+
+static ctl_table gmnalnal_top_sysctl_table[] = {
+ {GMNAL_SYSCTL, "gmnal", NULL, 0, 0555, gmnal_sysctl_table},
+ { 0 }
+};
+
+
+
+
+
+
/*
* gmnal_api_forward
* This function takes a pack block of arguments from the NAL API
ptl_pid_t portals_pid = 0;
- CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d],
- ac_size[%d]\n", interface, ptl_size, ac_size);
+ CDEBUG(D_TRACE, "gmnal_init : interface [%d], ptl_size [%d], "
+ "ac_size[%d]\n", interface, ptl_size, ac_size);
PORTAL_ALLOC(nal_data, sizeof(gmnal_data_t));
}
- CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d],
- name [%s], version [%d]\n", interface, GMNAL_GM_PORT,
+ CDEBUG(D_NET, "Calling gm_open with interface [%d], port [%d], "
+ "name [%s], version [%d]\n", interface, GMNAL_GM_PORT,
"gmnal", GM_API_VERSION);
GMNAL_GM_LOCK(nal_data);
CDEBUG(D_ERROR, "gm_open Failure. No such device\n");
break;
case(GM_INCOMPATIBLE_LIB_AND_DRIVER):
- CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib
- and driver\n");
+ CDEBUG(D_ERROR, "gm_open Failure. Incompatile lib "
+ "and driver\n");
break;
case(GM_OUT_OF_MEMORY):
CDEBUG(D_ERROR, "gm_open Failure. Out of Memory\n");
break;
default:
- CDEBUG(D_ERROR, "gm_open Failure. Unknow error
- code [%d]\n", gm_status);
+ CDEBUG(D_ERROR, "gm_open Failure. Unknow error "
+ "code [%d]\n", gm_status);
break;
}
GMNAL_GM_LOCK(nal_data);
}
CDEBUG(D_INFO, "Global node id is [%u]\n", global_nid);
nal_data->gm_global_nid = global_nid;
+ snprintf(global_nid_str, GLOBAL_NID_STR_LEN, "%u", global_nid);
/*
pid = gm_getpid();
return(NULL);
}
+ nal_data->sysctl = NULL;
+ nal_data->sysctl = register_sysctl_table (gmnalnal_top_sysctl_table, 0);
+
CDEBUG(D_INFO, "gmnal_init finished\n");
global_nal_data = nal->nal_data;
gm_close(nal_data->gm_port);
gm_finalize();
GMNAL_GM_UNLOCK(nal_data);
+ if (nal_data->sysctl)
+ unregister_sysctl_table (nal_data->sysctl);
PORTAL_FREE(nal, sizeof(nal_t));
PORTAL_FREE(nal_data, sizeof(gmnal_data_t));
PORTAL_FREE(nal_cb, sizeof(nal_cb_t));
int status = PTL_OK;
- CDEBUG(D_TRACE, "gmnal_cb_recv nal_cb [%p], private[%p], cookie[%p],
- niov[%d], iov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
+ CDEBUG(D_TRACE, "gmnal_cb_recv nal_cb [%p], private[%p], cookie[%p], "
+ "niov[%d], iov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
nal_cb, private, cookie, niov, iov, mlen, rlen);
switch(srxd->type) {
int status = PTL_OK;
struct iovec *iovec = NULL, *iovec_dup = NULL;
int i = 0;
+ ptl_kiov_t *kiov_dup = kiov;;
- CDEBUG(D_TRACE, "gmnal_cb_recv_pages nal_cb [%p],private[%p],
- cookie[%p], kniov[%d], kiov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
+ CDEBUG(D_TRACE, "gmnal_cb_recv_pages nal_cb [%p],private[%p], "
+ "cookie[%p], kniov[%d], kiov [%p], mlen["LPSZ"], rlen["LPSZ"]\n",
nal_cb, private, cookie, kniov, kiov, mlen, rlen);
if (srxd->type == GMNAL_SMALL_MESSAGE) {
CDEBUG(D_INFO, "calling gmnal_small_rx\n");
status = gmnal_small_rx(nal_cb, private, cookie, kniov,
iovec_dup, mlen, rlen);
+ for (i=0; i<kniov; i++) {
+ kunmap(kiov_dup->kiov_page);
+ kiov_dup++;
+ }
PORTAL_FREE(iovec_dup, sizeof(struct iovec)*kniov);
}
niov, iov, len);
} else {
CDEBUG(D_ERROR, "Large message send it is not supported\n");
+ lib_finalize(nal_cb, private, cookie);
return(PTL_FAIL);
gmnal_large_tx(nal_cb, private, cookie, hdr, type, nid, pid,
niov, iov, len);
int i = 0;
gmnal_data_t *nal_data;
struct iovec *iovec = NULL, *iovec_dup = NULL;
+ ptl_kiov_t *kiov_dup = kiov;
CDEBUG(D_TRACE, "gmnal_cb_send_pages nid ["LPU64"] niov[%d] len["LPSZ"]\n", nid, kniov, len);
nal_data = nal_cb->nal_data;
gmnal_large_tx(nal_cb, private, cookie, hdr, type, nid,
pid, kniov, iovec, len);
}
+ for (i=0; i<kniov; i++) {
+ kunmap(kiov_dup->kiov_page);
+ kiov_dup++;
+ }
PORTAL_FREE(iovec_dup, kniov*sizeof(struct iovec));
return(PTL_OK);
}
return(PTL_OK);
}
+int gmnal_cb_callback(nal_cb_t *nal_cb, void *private, lib_eq_t *eq,
+ ptl_event_t *ev)
+{
+
+ if (eq->event_callback != NULL) {
+ CDEBUG(D_INFO, "found callback\n");
+ eq->event_callback(ev);
+ }
+
+ return(PTL_OK);
+}
+
void *gmnal_cb_malloc(nal_cb_t *nal_cb, size_t len)
{
void *ptr = NULL;
gmnal_msghdr = (gmnal_msghdr_t*)buffer;
portals_hdr = (ptl_hdr_t*)(buffer+GMNAL_MSGHDR_SIZE);
- CDEBUG(D_INFO, "rx_event:: Sender node [%d], Sender Port [%d],
- type [%d], length [%d], buffer [%p]\n",
+ CDEBUG(D_INFO, "rx_event:: Sender node [%d], Sender Port [%d], "
+ "type [%d], length [%d], buffer [%p]\n",
snode, sport, type, length, buffer);
- CDEBUG(D_INFO, "gmnal_msghdr:: Sender node [%u], magic [%d],
- gmnal_type [%d]\n", gmnal_msghdr->sender_node_id,
+ CDEBUG(D_INFO, "gmnal_msghdr:: Sender node [%u], magic [%d], "
+ "gmnal_type [%d]\n", gmnal_msghdr->sender_node_id,
gmnal_msghdr->magic, gmnal_msghdr->type);
- CDEBUG(D_INFO, "portals_hdr:: Sender node ["LPD64"],
- dest_node ["LPD64"]\n", portals_hdr->src_nid,
+ CDEBUG(D_INFO, "portals_hdr:: Sender node ["LPD64"], "
+ "dest_node ["LPD64"]\n", portals_hdr->src_nid,
portals_hdr->dest_nid);
if (!private) {
CDEBUG(D_ERROR, "gmnal_small_rx no context\n");
+ lib_finalize(nal_cb, private, cookie);
return(PTL_FAIL);
}
* let portals library know receive is complete
*/
CDEBUG(D_PORTALS, "calling lib_finalize\n");
- lib_finalize(nal_cb, private, cookie, PTL_OK);
-
+ if (lib_finalize(nal_cb, private, cookie) != PTL_OK) {
+ /* TO DO what to do with failed lib_finalise? */
+ CDEBUG(D_INFO, "lib_finalize failed\n");
+ }
/*
* return buffer so it can be used again
*/
unsigned int local_nid;
gm_status_t gm_status = GM_SUCCESS;
- CDEBUG(D_TRACE, "gmnal_small_tx nal_cb [%p] private [%p] cookie [%p]
- hdr [%p] type [%d] global_nid ["LPU64"] pid [%d] niov [%d]
- iov [%p] size [%d]\n", nal_cb, private, cookie, hdr, type,
+ CDEBUG(D_TRACE, "gmnal_small_tx nal_cb [%p] private [%p] cookie [%p] "
+ "hdr [%p] type [%d] global_nid ["LPU64"] pid [%d] niov [%d] "
+ "iov [%p] size [%d]\n", nal_cb, private, cookie, hdr, type,
global_nid, pid, niov, iov, size);
CDEBUG(D_INFO, "portals_hdr:: dest_nid ["LPU64"], src_nid ["LPU64"]\n",
stxd->msg_size = tot_size;
- CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p]
- gmsize [%lu] msize [%d] global_nid ["LPU64"] local_nid[%d]
- stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
+ CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p] "
+ "gmsize [%lu] msize [%d] global_nid ["LPU64"] local_nid[%d] "
+ "stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
stxd->msg_size, global_nid, local_nid, stxd);
GMNAL_GM_LOCK(nal_data);
/*
* do a resend on the dropped ones
*/
- CDEBUG(D_ERROR, "send stxd [%p] was dropped
- resending\n", context);
+ CDEBUG(D_ERROR, "send stxd [%p] was dropped "
+ "resending\n", context);
GMNAL_GM_LOCK(nal_data);
gm_send_to_peer_with_callback(nal_data->gm_port,
stxd->buffer,
case(GM_YP_NO_MATCH):
default:
CDEBUG(D_ERROR, "Unknown send error\n");
+ gm_resume_sending(nal_data->gm_port, stxd->gm_priority,
+ stxd->gm_target_node, GMNAL_GM_PORT,
+ gmnal_resume_sending_callback, context);
+ return;
+
}
/*
return;
}
gmnal_return_stxd(nal_data, stxd);
- lib_finalize(nal_cb, stxd, cookie, PTL_OK);
-
+ if (lib_finalize(nal_cb, stxd, cookie) != PTL_OK) {
+ CDEBUG(D_INFO, "Call to lib_finalize failed for stxd [%p]\n",
+ stxd);
+ }
return;
}
+/*
+ * After an error on the port
+ * call this to allow future sends to complete
+ */
+void gmnal_resume_sending_callback(struct gm_port *gm_port, void *context,
+ gm_status_t status)
+{
+ gmnal_data_t *nal_data;
+ gmnal_stxd_t *stxd = (gmnal_stxd_t*)context;
+ CDEBUG(D_TRACE, "status is [%d] context is [%p]\n", status, context);
+ gmnal_return_stxd(stxd->nal_data, stxd);
+ return;
+}
void gmnal_drop_sends_callback(struct gm_port *gm_port, void *context,
context);
GMNAL_GM_LOCK(nal_data);
} else {
- CDEBUG(D_ERROR, "send_to_peer status for stxd [%p] is
- [%d][%s]\n", stxd, status, gmnal_gm_error(status));
+ CDEBUG(D_ERROR, "send_to_peer status for stxd [%p] is "
+ "[%d][%s]\n", stxd, status, gmnal_gm_error(status));
}
int niov_dup;
- CDEBUG(D_TRACE, "gmnal_large_tx nal_cb [%p] private [%p], cookie [%p]
- hdr [%p], type [%d] global_nid ["LPU64"], pid [%d], niov [%d],
- iov [%p], size [%d]\n", nal_cb, private, cookie, hdr, type,
+ CDEBUG(D_TRACE, "gmnal_large_tx nal_cb [%p] private [%p], cookie [%p] "
+ "hdr [%p], type [%d] global_nid ["LPU64"], pid [%d], niov [%d], "
+ "iov [%p], size [%d]\n", nal_cb, private, cookie, hdr, type,
global_nid, pid, niov, iov, size);
if (nal_cb)
iov->iov_base, iov->iov_len);
if (gm_status != GM_SUCCESS) {
GMNAL_GM_UNLOCK(nal_data);
- CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s]
- for memory [%p] len ["LPSZ"]\n",
+ CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s] "
+ "for memory [%p] len ["LPSZ"]\n",
gm_status, gmnal_gm_error(gm_status),
iov->iov_base, iov->iov_len);
GMNAL_GM_LOCK(nal_data);
gmnal_msghdr_t *msghdr = NULL;
gm_status_t gm_status;
- CDEBUG(D_TRACE, "gmnal_large_rx :: nal_cb[%p], private[%p],
- cookie[%p], niov[%d], iov[%p], mlen["LPSZ"], rlen["LPSZ"]\n",
+ CDEBUG(D_TRACE, "gmnal_large_rx :: nal_cb[%p], private[%p], "
+ "cookie[%p], niov[%d], iov[%p], mlen["LPSZ"], rlen["LPSZ"]\n",
nal_cb, private, cookie, nriov, riov, mlen, rlen);
if (!srxd) {
CDEBUG(D_ERROR, "gmnal_large_rx no context\n");
+ lib_finalize(nal_cb, private, cookie);
return(PTL_FAIL);
}
riov->iov_base, riov->iov_len);
if (gm_status != GM_SUCCESS) {
GMNAL_GM_UNLOCK(nal_data);
- CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s]
- for memory [%p] len ["LPSZ"]\n",
+ CDEBUG(D_ERROR, "gm_register_memory returns [%d][%s] "
+ "for memory [%p] len ["LPSZ"]\n",
gm_status, gmnal_gm_error(gm_status),
riov->iov_base, riov->iov_len);
GMNAL_GM_LOCK(nal_data);
int ncalls = 0;
- CDEBUG(D_TRACE, "gmnal_remote_get srxd[%p], nriov[%d], riov[%p],
- nsiov[%d], siov[%p]\n", srxd, nriov, riov, nsiov, siov);
+ CDEBUG(D_TRACE, "gmnal_remote_get srxd[%p], nriov[%d], riov[%p], "
+ "nsiov[%d], siov[%p]\n", srxd, nriov, riov, nsiov, siov);
ncalls = gmnal_copyiov(0, srxd, nsiov, siov, nriov, riov);
srxd->gm_source_node,
&source_node) != GM_SUCCESS) {
- CDEBUG(D_ERROR, "cannot resolve global_id [%u]
- to local node_id\n", srxd->gm_source_node);
+ CDEBUG(D_ERROR, "cannot resolve global_id [%u] "
+ "to local node_id\n", srxd->gm_source_node);
GMNAL_GM_UNLOCK(nal_data);
return(GMNAL_STATUS_FAIL);
}
* Let our client application proceed
*/
CDEBUG(D_ERROR, "final callback context[%p]\n", srxd);
- lib_finalize(nal_cb, srxd, srxd->cookie, PTL_OK);
+ if (lib_finalize(nal_cb, srxd, srxd->cookie) != PTL_OK) {
+ CDEBUG(D_INFO, "Call to lib_finalize failed for srxd [%p]\n",
+ srxd);
+ }
/*
* send an ack to the sender to let him know we got the data
stxd->msg_size= sizeof(gmnal_msghdr_t);
- CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p]
- gmsize [%lu] msize [%d] global_nid [%u] local_nid[%d]
- stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
+ CDEBUG(D_NET, "Calling gm_send_to_peer port [%p] buffer [%p] "
+ "gmsize [%lu] msize [%d] global_nid [%u] local_nid[%d] "
+ "stxd [%p]\n", nal_data->gm_port, stxd->buffer, stxd->gm_size,
stxd->msg_size, srxd->gm_source_node, local_nid, stxd);
GMNAL_GM_LOCK(nal_data);
stxd->gm_priority = GM_LOW_PRIORITY;
CDEBUG(D_INFO, "gmnal_large_tx_ack_received stxd [%p]\n", stxd);
- lib_finalize(nal_cb, stxd, stxd->cookie, PTL_OK);
+ if (lib_finalize(nal_cb, stxd, stxd->cookie) != PTL_OK) {
+ CDEBUG(D_INFO, "Call to lib_finalize failed for stxd [%p]\n",
+ stxd);
+ }
/*
* extract the iovec from the stxd, deregister the memory.
*/
int num_rx_threads = -1;
int num_stxds = 5;
+int gm_port = 4;
ptl_handle_ni_t kgmnal_ni;
MODULE_PARM(gmnal_small_msg_size, "i");
MODULE_PARM(num_rx_threads, "i");
MODULE_PARM(num_stxds, "i");
+MODULE_PARM(gm_port, "i");
MODULE_AUTHOR("Morgan Doyle");
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (!txbuffer) {
- CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],"
+ " size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(txd, sizeof(gmnal_stxd_t));
return(GMNAL_STATUS_FAIL);
txd->next = nal_data->stxd;
nal_data->stxd = txd;
- CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
}
for (i=0; i<=nrxt_stx; i++) {
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (!txbuffer) {
- CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to gm_dma_malloc txbuffer [%d],"
+ " size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(txd, sizeof(gmnal_stxd_t));
return(GMNAL_STATUS_FAIL);
txd->next = nal_data->rxt_stxd;
nal_data->rxt_stxd = txd;
- CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Registered txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
}
/*
CDEBUG(D_TRACE, "gmnal_free_small tx\n");
while(txd) {
- CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
_txd = txd;
txd = txd->next;
GMNAL_GM_LOCK(nal_data);
}
txd = nal_data->rxt_stxd;
while(txd) {
- CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p],
- size [%d]\n", txd, txd->buffer, txd->buffer_size);
+ CDEBUG(D_INFO, "Freeing txd [%p] with buffer [%p], "
+ "size [%d]\n", txd, txd->buffer, txd->buffer_size);
_txd = txd;
txd = txd->next;
GMNAL_GM_LOCK(nal_data);
#if 0
PORTAL_ALLOC(rxbuffer, GMNAL_SMALL_MSG_SIZE(nal_data));
if (!rxbuffer) {
- CDEBUG(D_ERROR, "Failed to malloc rxbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to malloc rxbuffer [%d], "
+ "size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(rxd, sizeof(gmnal_srxd_t));
return(GMNAL_STATUS_FAIL);
}
- CDEBUG(D_NET, "Calling gm_register_memory with port [%p]
- rxbuffer [%p], size [%d]\n", nal_data->gm_port,
+ CDEBUG(D_NET, "Calling gm_register_memory with port [%p] "
+ "rxbuffer [%p], size [%d]\n", nal_data->gm_port,
rxbuffer, GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_LOCK(nal_data);
gm_status = gm_register_memory(nal_data->gm_port, rxbuffer,
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (gm_status != GM_SUCCESS) {
- CDEBUG(D_ERROR, "gm_register_memory failed buffer [%p],
- index [%d]\n", rxbuffer, i);
+ CDEBUG(D_ERROR, "gm_register_memory failed buffer [%p],"
+ " index [%d]\n", rxbuffer, i);
switch(gm_status) {
case(GM_FAILURE):
CDEBUG(D_ERROR, "GM_FAILURE\n");
GMNAL_SMALL_MSG_SIZE(nal_data));
GMNAL_GM_UNLOCK(nal_data);
if (!rxbuffer) {
- CDEBUG(D_ERROR, "Failed to gm_dma_malloc rxbuffer [%d],
- size [%d]\n", i,
+ CDEBUG(D_ERROR, "Failed to gm_dma_malloc rxbuffer [%d],"
+ " size [%d]\n", i,
GMNAL_SMALL_MSG_SIZE(nal_data));
PORTAL_FREE(rxd, sizeof(gmnal_srxd_t));
return(GMNAL_STATUS_FAIL);
if (gm_hash_insert(nal_data->srxd_hash,
(void*)rxbuffer, (void*)rxd)) {
- CDEBUG(D_ERROR, "failed to create hash entry rxd[%p]
- for rxbuffer[%p]\n", rxd, rxbuffer);
+ CDEBUG(D_ERROR, "failed to create hash entry rxd[%p] "
+ "for rxbuffer[%p]\n", rxd, rxbuffer);
return(GMNAL_STATUS_FAIL);
}
rxd->next = nal_data->srxd;
nal_data->srxd = rxd;
- CDEBUG(D_INFO, "Registered rxd [%p] with buffer [%p],
- size [%d]\n", rxd, rxd->buffer, rxd->size);
+ CDEBUG(D_INFO, "Registered rxd [%p] with buffer [%p], "
+ "size [%d]\n", rxd, rxd->buffer, rxd->size);
}
return(GMNAL_STATUS_OK);
char *
gmnal_gm_error(gm_status_t status)
{
+ return(gm_strerror(status));
+
switch(status) {
case(GM_SUCCESS):
return("SUCCESS");
}
spin_lock(&nal_data->rxtwe_lock);
if (nal_data->rxtwe_head) {
- CDEBUG(D_WARNING, "Got a work entry\n");
+ CDEBUG(D_INFO, "Got a work entry\n");
we = nal_data->rxtwe_head;
nal_data->rxtwe_head = we->next;
if (!nal_data->rxtwe_head)
spin_unlock(&nal_data->rxtwe_lock);
} while (!we);
- CDEBUG(D_WARNING, "Returning we[%p]\n", we);
+ CDEBUG(D_INFO, "Returning we[%p]\n", we);
return(we);
}
free(pcfg.pcfg_pbuf1);
close(pfd);
printf("%u\n", nid);
- exit(nid);
+ exit(0);
}