Ludwig Nussel
4b801c3ccb
Fix all issues with dapl OBS-URL: https://build.opensuse.org/request/show/243995 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/dapl?expand=0&rev=1
300 lines
12 KiB
Diff
300 lines
12 KiB
Diff
---
|
|
dapl/openib_scm/cm.c | 38 ++++++++++++++++++++++++--------------
|
|
dapl/openib_ucm/cm.c | 29 +++++++++++++++++++++--------
|
|
dapl/openib_ucm/device.c | 8 ++++----
|
|
test/dapltest/test/dapl_limit.c | 11 +++++++----
|
|
4 files changed, 56 insertions(+), 30 deletions(-)
|
|
|
|
Index: dapl/openib_scm/cm.c
|
|
===================================================================
|
|
--- dapl/openib_scm/cm.c.orig 2014-04-07 19:27:35.000000000 +0200
|
|
+++ dapl/openib_scm/cm.c 2014-06-27 14:10:00.894759920 +0200
|
|
@@ -518,6 +518,7 @@ static void dapli_socket_connected(dp_ib
|
|
int len, exp;
|
|
struct iovec iov[2];
|
|
struct dapl_ep *ep_ptr = cm_ptr->ep;
|
|
+ uint64_t tmp, tmp2;
|
|
|
|
if (err) {
|
|
dapl_log(DAPL_DBG_TYPE_CM_WARN,
|
|
@@ -582,12 +583,12 @@ static void dapli_socket_connected(dp_ib
|
|
ntohs(cm_ptr->msg.saddr.ib.lid),
|
|
ntohl(cm_ptr->msg.saddr.ib.qpn),
|
|
ntohs(cm_ptr->msg.p_size));
|
|
+ memcpy(&tmp, &cm_ptr->msg.saddr.ib.gid[0], sizeof(uint64_t));
|
|
+ memcpy(&tmp2, &cm_ptr->msg.saddr.ib.gid[8], sizeof(uint64_t));
|
|
dapl_dbg_log(DAPL_DBG_TYPE_CM,
|
|
" CONN_PENDING: SRC GID subnet %016llx id %016llx\n",
|
|
- (unsigned long long)
|
|
- htonll(*(uint64_t*)&cm_ptr->msg.saddr.ib.gid[0]),
|
|
- (unsigned long long)
|
|
- htonll(*(uint64_t*)&cm_ptr->msg.saddr.ib.gid[8]));
|
|
+ (unsigned long long) htonll(tmp),
|
|
+ (unsigned long long) htonll(tmp2));
|
|
|
|
DAPL_CNTR(((DAPL_IA *)dapl_llist_peek_head(&cm_ptr->hca->ia_list_head)), DCNT_IA_CM_REQ_TX);
|
|
return;
|
|
@@ -614,6 +615,9 @@ dapli_socket_connect(DAPL_EP * ep_ptr,
|
|
socklen_t sl;
|
|
DAPL_IA *ia_ptr = ep_ptr->header.owner_ia;
|
|
DAT_RETURN dat_ret = DAT_INSUFFICIENT_RESOURCES;
|
|
+#ifdef DAPL_DBG
|
|
+ union{ uint8_t *u8p; uint16_t *u16p; }pun;
|
|
+#endif
|
|
|
|
dapl_dbg_log(DAPL_DBG_TYPE_EP, " connect: r_qual %d p_size=%d\n",
|
|
r_qual, p_size);
|
|
@@ -649,8 +653,10 @@ dapli_socket_connect(DAPL_EP * ep_ptr,
|
|
|
|
#ifdef DAPL_DBG
|
|
/* DBG: Active PID [0], PASSIVE PID [2]*/
|
|
- *(uint16_t*)&cm_ptr->msg.resv[0] = htons((uint16_t)dapl_os_getpid());
|
|
- *(uint16_t*)&cm_ptr->msg.resv[2] = ((struct sockaddr_in *)&cm_ptr->addr)->sin_port;
|
|
+ pun.u8p = &cm_ptr->msg.resv[0];
|
|
+ *pun.u16p = htons((uint16_t)dapl_os_getpid());
|
|
+ pun.u8p += 2;
|
|
+ *pun.u16p = ((struct sockaddr_in *)&cm_ptr->addr)->sin_port;
|
|
#endif
|
|
((struct sockaddr_in *)&cm_ptr->addr)->sin_port = htons(r_qual + 1000);
|
|
ret = dapl_connect_socket(cm_ptr->socket, (struct sockaddr *)&cm_ptr->addr,
|
|
@@ -736,6 +742,8 @@ static void dapli_socket_connect_rtu(dp_
|
|
len = recv(cm_ptr->socket, (char *)&cm_ptr->msg, exp, 0);
|
|
if (len != exp || ntohs(cm_ptr->msg.ver) < DCM_VER_MIN) {
|
|
int err = dapl_socket_errno();
|
|
+ union{ uint8_t *ui8p; uint16_t *ui16p; }pun = { &cm_ptr->msg.resv[0] };
|
|
+ union{ uint8_t *ui8p; uint16_t *ui16p; }pun2 = { &cm_ptr->msg.resv[2] };
|
|
dapl_log(DAPL_DBG_TYPE_CM_WARN,
|
|
" CONN_REP_PENDING: sk %d ERR 0x%x, rcnt=%d, v=%d ->"
|
|
" %s PORT L-%x R-%x PID L-%x R-%x %d\n",
|
|
@@ -743,8 +751,8 @@ static void dapli_socket_connect_rtu(dp_
|
|
inet_ntoa(((struct sockaddr_in *)&cm_ptr->addr)->sin_addr),
|
|
ntohs(((struct sockaddr_in *)&cm_ptr->msg.daddr.so)->sin_port),
|
|
ntohs(((struct sockaddr_in *)&cm_ptr->addr)->sin_port),
|
|
- ntohs(*(uint16_t*)&cm_ptr->msg.resv[0]),
|
|
- ntohs(*(uint16_t*)&cm_ptr->msg.resv[2]),cm_ptr->retry);
|
|
+ ntohs(*pun.ui16p), ntohs(*pun2.ui16p),
|
|
+ cm_ptr->retry);
|
|
|
|
/* Retry; corner case where server tcp stack resets under load */
|
|
if (err == ECONNRESET && --cm_ptr->retry) {
|
|
@@ -1215,7 +1223,11 @@ dapli_socket_accept_usr(DAPL_EP * ep_ptr
|
|
int len, exp = sizeof(ib_cm_msg_t) - DCM_MAX_PDATA_SIZE;
|
|
DAT_RETURN ret = DAT_INTERNAL_ERROR;
|
|
socklen_t sl;
|
|
-
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun = { &local.saddr.ib.gid[0] };
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun2 = { &local.saddr.ib.gid[8] };
|
|
+#ifdef DAPL_DBG
|
|
+ union{ uint8_t *u8p; uint16_t *u16p; }pun3 = { &cm_ptr->msg.resv[2] };
|
|
+#endif
|
|
if (p_size > DCM_MAX_PDATA_SIZE) {
|
|
dapl_log(DAPL_DBG_TYPE_ERR,
|
|
" accept_usr: psize(%d) too large\n", p_size);
|
|
@@ -1304,7 +1316,7 @@ dapli_socket_accept_usr(DAPL_EP * ep_ptr
|
|
|
|
#ifdef DAPL_DBG
|
|
/* DBG: Active PID [0], PASSIVE PID [2] */
|
|
- *(uint16_t*)&cm_ptr->msg.resv[2] = htons((uint16_t)dapl_os_getpid());
|
|
+ *pun3.u16p = htons((uint16_t)dapl_os_getpid());
|
|
dapl_os_memcpy(local.resv, cm_ptr->msg.resv, 4);
|
|
#endif
|
|
cm_ptr->hca = ia_ptr->hca_ptr;
|
|
@@ -1346,10 +1358,8 @@ dapli_socket_accept_usr(DAPL_EP * ep_ptr
|
|
ntohl(local.saddr.ib.qpn), ntohs(local.p_size));
|
|
dapl_dbg_log(DAPL_DBG_TYPE_CM,
|
|
" ACCEPT_USR: local GID subnet %016llx id %016llx\n",
|
|
- (unsigned long long)
|
|
- htonll(*(uint64_t*)&local.saddr.ib.gid[0]),
|
|
- (unsigned long long)
|
|
- htonll(*(uint64_t*)&local.saddr.ib.gid[8]));
|
|
+ (unsigned long long) htonll(*pun.u64p),
|
|
+ (unsigned long long) htonll(*pun2.u64p));
|
|
|
|
dapl_dbg_log(DAPL_DBG_TYPE_EP, " PASSIVE: accepted!\n");
|
|
|
|
Index: dapl/openib_ucm/cm.c
|
|
===================================================================
|
|
--- dapl/openib_ucm/cm.c.orig 2014-04-07 19:27:35.000000000 +0200
|
|
+++ dapl/openib_ucm/cm.c 2014-06-27 13:44:42.207746121 +0200
|
|
@@ -154,6 +154,7 @@ static void ucm_free_port(ib_hca_transpo
|
|
static void ucm_check_timers(dp_ib_cm_handle_t cm, int *timer)
|
|
{
|
|
DAPL_OS_TIMEVAL time;
|
|
+ union{ uint8_t *ui8p; DAT_UINT32 *duip; }pun = { &cm->msg.resv[0] };
|
|
|
|
dapl_os_lock(&cm->lock);
|
|
dapl_os_get_time(&time);
|
|
@@ -716,12 +717,15 @@ void dapls_cm_release(dp_ib_cm_handle_t
|
|
dp_ib_cm_handle_t dapls_ib_cm_create(DAPL_EP *ep)
|
|
{
|
|
dp_ib_cm_handle_t cm;
|
|
+ union{ uint8_t *ui8p; DAT_UINT32 *duip; }pun;
|
|
|
|
/* Allocate CM, init lock, and initialize */
|
|
if ((cm = dapl_os_alloc(sizeof(*cm))) == NULL)
|
|
return NULL;
|
|
|
|
(void)dapl_os_memzero(cm, sizeof(*cm));
|
|
+ pun.ui8p = &cm->msg.resv[0];
|
|
+
|
|
if (dapl_os_lock_init(&cm->lock))
|
|
goto bail;
|
|
|
|
@@ -903,6 +907,8 @@ DAT_RETURN dapli_cm_disconnect(dp_ib_cm_
|
|
{
|
|
int finalize = 1;
|
|
int wakeup = 0;
|
|
+ union{ uint8_t *ui8p; DAT_UINT32 *duip; }pun = { &cm->msg.resv[0] };
|
|
+
|
|
|
|
dapl_os_lock(&cm->lock);
|
|
switch (cm->state) {
|
|
@@ -1062,6 +1068,11 @@ bail:
|
|
*/
|
|
static void ucm_connect_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg)
|
|
{
|
|
+#ifdef DAT_EXTENSIONS
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun = { &cm->msg.daddr.ib.gid[0] };
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun2 = { &cm->msg.daddr.ib.gid[8] };
|
|
+#endif
|
|
+
|
|
DAPL_EP *ep = cm->ep;
|
|
ib_cm_events_t event = IB_CME_CONNECTED;
|
|
|
|
@@ -1246,8 +1257,7 @@ ud_bail:
|
|
&xevent.remote_ah.ia_addr)->ib.lid),
|
|
ntohl(((union dcm_addr*)
|
|
&xevent.remote_ah.ia_addr)->ib.qpn),
|
|
- ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[0]),
|
|
- ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[8]));
|
|
+ ntohll(*pun.u64p), ntohll(*pun2.u64p));
|
|
|
|
if (event == IB_CME_CONNECTED)
|
|
event = DAT_IB_UD_CONNECTION_EVENT_ESTABLISHED;
|
|
@@ -1375,6 +1385,10 @@ bail:
|
|
*/
|
|
static void ucm_accept_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg)
|
|
{
|
|
+#ifdef DAT_EXTENSIONS
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun = { &cm->msg.daddr.ib.gid[0] };
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun2 = { &cm->msg.daddr.ib.gid[8] };
|
|
+#endif
|
|
dapl_os_lock(&cm->lock);
|
|
if ((ntohs(msg->op) != DCM_RTU) || (cm->state != DCM_RTU_PENDING)) {
|
|
dapl_log(DAPL_DBG_TYPE_WARN,
|
|
@@ -1435,8 +1449,7 @@ static void ucm_accept_rtu(dp_ib_cm_hand
|
|
&xevent.remote_ah.ia_addr)->ib.lid),
|
|
ntohl(((union dcm_addr*)
|
|
&xevent.remote_ah.ia_addr)->ib.qpn),
|
|
- ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[0]),
|
|
- ntohll(*(uint64_t*)&cm->msg.daddr.ib.gid[8]));
|
|
+ ntohll(*pun.u64p), ntohll(*pun2.u64p));
|
|
|
|
dapls_evd_post_connection_event_ext(
|
|
(DAPL_EVD *)cm->ep->param.connect_evd_handle,
|
|
@@ -1552,6 +1565,8 @@ dapli_accept_usr(DAPL_EP *ep, DAPL_CR *c
|
|
{
|
|
DAPL_IA *ia = ep->header.owner_ia;
|
|
dp_ib_cm_handle_t cm = cr->ib_cm_handle;
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun = { &cm->msg.daddr.ib.gid[0] };
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun2 = { &cm->msg.daddr.ib.gid[8] };
|
|
|
|
if (p_size > DCM_MAX_PDATA_SIZE)
|
|
return DAT_LENGTH_ERROR;
|
|
@@ -1585,10 +1600,8 @@ dapli_accept_usr(DAPL_EP *ep, DAPL_CR *c
|
|
|
|
dapl_dbg_log(DAPL_DBG_TYPE_CM,
|
|
" ACCEPT_USR: remote GID subnet %016llx id %016llx\n",
|
|
- (unsigned long long)
|
|
- htonll(*(uint64_t*)&cm->msg.daddr.ib.gid[0]),
|
|
- (unsigned long long)
|
|
- htonll(*(uint64_t*)&cm->msg.daddr.ib.gid[8]));
|
|
+ (unsigned long long) htonll(*pun.u64p),
|
|
+ (unsigned long long) htonll(*pun2.u64p));
|
|
|
|
#ifdef DAT_EXTENSIONS
|
|
if (cm->msg.daddr.ib.qp_type == IBV_QPT_UD &&
|
|
Index: dapl/openib_ucm/device.c
|
|
===================================================================
|
|
--- dapl/openib_ucm/device.c.orig 2014-04-07 19:27:35.000000000 +0200
|
|
+++ dapl/openib_ucm/device.c 2014-06-27 13:44:42.207746121 +0200
|
|
@@ -197,6 +197,8 @@ DAT_RETURN dapls_ib_open_hca(IN IB_HCA_N
|
|
struct ibv_port_attr port_attr;
|
|
int i;
|
|
DAT_RETURN dat_status;
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun = { &hca_ptr->ib_trans.addr.ib.gid[0] };
|
|
+ union{ uint8_t *u8p; uint64_t *u64p; }pun2 = { &hca_ptr->ib_trans.addr.ib.gid[8] };
|
|
|
|
/* Get list of all IB devices, find match, open */
|
|
dev_list = ibv_get_device_list(NULL);
|
|
@@ -337,10 +339,8 @@ found:
|
|
" ID 0x" F64x "\n",
|
|
ntohl(hca_ptr->ib_trans.addr.ib.qpn),
|
|
ntohs(hca_ptr->ib_trans.addr.ib.lid),
|
|
- (unsigned long long)
|
|
- ntohll(*(uint64_t*)&hca_ptr->ib_trans.addr.ib.gid[0]),
|
|
- (unsigned long long)
|
|
- ntohll(*(uint64_t*)&hca_ptr->ib_trans.addr.ib.gid[8]));
|
|
+ (unsigned long long) ntohll(*pun.u64p),
|
|
+ (unsigned long long) ntohll(*pun2.u64p));
|
|
|
|
/* save LID, GID, QPN, PORT address information, for ia_queries */
|
|
/* Set AF_INET6 to insure callee address storage of 28 bytes */
|
|
Index: test/dapltest/test/dapl_limit.c
|
|
===================================================================
|
|
--- test/dapltest/test/dapl_limit.c.orig 2014-05-05 18:11:33.000000000 +0200
|
|
+++ test/dapltest/test/dapl_limit.c 2014-06-27 13:44:42.208746108 +0200
|
|
@@ -162,6 +162,7 @@ limit_test(DT_Tdep_Print_Head * phead, L
|
|
unsigned int count = START_COUNT;
|
|
OneOpen *hdlptr = (OneOpen *)
|
|
DT_Mdep_Malloc(count * sizeof(*hdlptr));
|
|
+ union { OneOpen **oop; DAT_HANDLE **dhpp; }pun = { &hdlptr };
|
|
|
|
/* IA Exhaustion test loop */
|
|
if (hdlptr) {
|
|
@@ -175,7 +176,7 @@ limit_test(DT_Tdep_Print_Head * phead, L
|
|
DT_Mdep_Schedule();
|
|
if (w == count
|
|
&& !more_handles(phead,
|
|
- (DAT_HANDLE **) & hdlptr,
|
|
+ pun.dhpp,
|
|
&count, sizeof(*hdlptr))) {
|
|
DT_Tdep_PT_Printf(phead,
|
|
"%s: IAs opened: %d\n",
|
|
@@ -947,6 +948,7 @@ limit_test(DT_Tdep_Print_Head * phead, L
|
|
unsigned int count = START_COUNT;
|
|
Bpool **hdlptr = (Bpool **)
|
|
DT_Mdep_Malloc(count * sizeof(*hdlptr));
|
|
+ union { Bpool ***bpppp; DAT_HANDLE **dhpp; }pun = { &hdlptr };
|
|
|
|
/* LMR Exhaustion test loop */
|
|
if (hdlptr) {
|
|
@@ -961,7 +963,7 @@ limit_test(DT_Tdep_Print_Head * phead, L
|
|
DT_Mdep_Schedule();
|
|
if (w == count
|
|
&& !more_handles(phead,
|
|
- (DAT_HANDLE **) & hdlptr,
|
|
+ pun.dhpp,
|
|
&count, sizeof(*hdlptr))) {
|
|
DT_Tdep_PT_Printf(phead,
|
|
"%s: no memory for LMR handles\n",
|
|
@@ -1035,6 +1037,8 @@ limit_test(DT_Tdep_Print_Head * phead, L
|
|
unsigned int count = START_COUNT;
|
|
DAT_LMR_TRIPLET *hdlptr = (DAT_LMR_TRIPLET *)
|
|
DT_Mdep_Malloc(count * cmd->width * sizeof(*hdlptr));
|
|
+ union { DAT_LMR_TRIPLET **dltp; DAT_HANDLE **dhpp; }pun =
|
|
+ { &hdlptr };
|
|
|
|
/* Recv-Post Exhaustion test loop */
|
|
if (hdlptr) {
|
|
@@ -1049,8 +1053,7 @@ limit_test(DT_Tdep_Print_Head * phead, L
|
|
for (w = 0; w < cmd->maximum && !done; w++) {
|
|
DT_Mdep_Schedule();
|
|
if (w == count
|
|
- && !more_handles(phead,
|
|
- (DAT_HANDLE **) & hdlptr,
|
|
+ && !more_handles(phead, pun.dhpp,
|
|
&count,
|
|
cmd->width *
|
|
sizeof(*hdlptr))) {
|