#ifdef DAPL_DBG
static char *optable[] =
{
+ "OP_RDMA_WRITE",
+ "OP_RDMA_WRITE_IMM",
"OP_SEND",
+ "OP_SEND_IMM",
"OP_RDMA_READ",
- "OP_RDMA_WRITE",
"OP_COMP_AND_SWAP",
"OP_FETCH_AND_ADD",
"OP_RECEIVE",
+ "OP_RECEIVE_IMM",
"OP_BIND_MW",
-#ifdef DAT_EXTENSIONS
- "OP_COMP_AND_SWAP_RESP",
- "OP_FETCH_AND_ADD_RESP",
-#endif
0
};
DAPL_COOKIE *cookie;
DAT_DTO_COMPLETION_STATUS dto_status;
+
/*
* All that can be relied on if the status is bad is the status
* and WRID.
{
case DAPL_COOKIE_TYPE_DTO:
{
+#ifdef DAT_EXTENSIONS
+ /* Extended via request post or message receive */
+ if ((cookie->val.dto.type == DAPL_DTO_TYPE_EXTENSION) ||
+ (cookie->val.dto.type == DAPL_DTO_TYPE_RECV &&
+ DAPL_GET_CQE_OPTYPE(cqe_ptr) != OP_RECEIVE))
+ {
+ dapls_cqe_to_event_extension(ep_ptr, cookie,
+ cqe_ptr, event_ptr);
+ break;
+ }
+#endif
DAPL_COOKIE_BUFFER *buffer;
if ( DAPL_DTO_TYPE_RECV == cookie->val.dto.type )
cookie->val.dto.cookie;
event_ptr->event_data.dto_completion_event_data.status = dto_status;
-#ifdef DAPL_DBG
- if (dto_status == DAT_DTO_SUCCESS)
- {
- uint32_t ibtype;
-
- ibtype = DAPL_GET_CQE_OPTYPE (cqe_ptr);
-
- dapl_os_assert ((ibtype == OP_SEND &&
- cookie->val.dto.type == DAPL_DTO_TYPE_SEND)
- || (ibtype == OP_RECEIVE &&
- cookie->val.dto.type == DAPL_DTO_TYPE_RECV)
- || (ibtype == OP_RDMA_WRITE &&
- cookie->val.dto.type == DAPL_DTO_TYPE_RDMA_WRITE)
- || (ibtype == OP_RDMA_READ &&
- cookie->val.dto.type == DAPL_DTO_TYPE_RDMA_READ));
- }
-#endif /* DAPL_DBG */
-
if ( cookie->val.dto.type == DAPL_DTO_TYPE_SEND ||
cookie->val.dto.type == DAPL_DTO_TYPE_RDMA_WRITE )
{
dapls_cookie_dealloc (&ep_ptr->req_buffer, cookie);
break;
}
-#ifdef DAT_EXTENSIONS
- case DAPL_COOKIE_TYPE_EXTENSION:
- {
- dapls_cqe_to_event_extension(ep_ptr, cookie, cqe_ptr, event_ptr);
- break;
- }
-#endif
default:
{
dapl_os_assert (!"Invalid Operation type");
\r
#define DTO_TIMEOUT (1000*1000*5)
#define CONN_TIMEOUT (1000*1000*10)
-#define SERVER_TIMEOUT (1000*1000*20)\r
+#define SERVER_TIMEOUT (1000*1000*120)\r
#define SERVER_CONN_QUAL 31111\r
#define BUF_SIZE 256\r
#define BUF_SIZE_ATOMIC 8\r
DAT_CR_HANDLE cr = DAT_HANDLE_NULL;\r
int server;\r
\r
-char *usage = "[-s] | hostname\n";\r
+char *usage = "-s | hostname (default == -s)\n";\r
\r
void\r
send_msg(\r
region,\r
BUF_SIZE,\r
pz,\r
- DAT_MEM_PRIV_ALL_FLAG,\r
+ DAT_MEM_PRIV_ALL_FLAG|DAT_IB_MEM_PRIV_REMOTE_ATOMIC,\r
DAT_VA_TYPE_VA,
&lmr[ i ],\r
&lmr_context[ i ],\r
®_size[ i ],\r
®_addr[ i ]);\r
_OK(status, "dat_lmr_create");\r
- printf(" buf[%d]=%p, reg_addr[%d]=%p\n",\r
- i, buf[ i ], i, reg_addr[ i ]);\r
}\r
\r
/* register atomic return buffer for original data */\r
region,\r
BUF_SIZE_ATOMIC,\r
pz,\r
- DAT_MEM_PRIV_ALL_FLAG,\r
+ DAT_MEM_PRIV_ALL_FLAG|DAT_IB_MEM_PRIV_REMOTE_ATOMIC,\r
DAT_VA_TYPE_VA,
&lmr_atomic,\r
&lmr_atomic_context,\r
disconnect_ep()\r
{\r
DAT_RETURN status;\r
- int i;\r
+ int i;\r
+ DAT_EVENT event;\r
+ DAT_COUNT nmore;\r
\r
status = dat_ep_disconnect(ep, DAT_CLOSE_DEFAULT);\r
_OK(status, "dat_ep_disconnect");\r
\r
- printf("EP disconnected\n");\r
-\r
+ status = dat_evd_wait(con_evd, DAT_TIMEOUT_INFINITE, 1, &event, &nmore);
+ _OK(status, "dat_ep_disconnect");
+ \r
if (server) {\r
status = dat_psp_free(psp);\r
- _OK(status, "dat_ep_disconnect");\r
+ _OK(status, "dat_psp_free");\r
}\r
\r
for (i = 0; i < REG_MEM_COUNT; i++) {\r
immed_data,\r
DAT_COMPLETION_DEFAULT_FLAG);\r
_OK(status, "dat_ib_post_rdma_write_immed");\r
- printf("dat_ib_post_rdma_write_immed posted\n");\r
\r
/*\r
* Collect first event, write completion or the inbound recv with immed\r
}\r
\r
if (server)\r
- printf("SUCCESS: Server received immed_data=0x%x\n", immed_data_recv);\r
+ printf("Server received immed_data=0x%x\n", immed_data_recv);\r
else\r
- printf("SUCCESS: Client received immed_data=0x%x\n", immed_data_recv);\r
+ printf("Client received immed_data=0x%x\n", immed_data_recv);\r
\r
- printf("RCV buffer %p contains: %s\n", \r
+ printf("rdma buffer %p contains: %s\n", \r
buf[ RCV_RDMA_BUF_INDEX ], buf[ RCV_RDMA_BUF_INDEX ]);\r
\r
+ printf("\n RDMA_WRITE_WITH_IMMEDIATE_DATA test - PASSED\n");\r
return (0);\r
}\r
\r
DAT_COMPLETION_DEFAULT_FLAG);\r
} else {\r
*target = 0x54321;\r
- sleep(1);\r
+ sleep(1); \r
/* client does compare and should swap */\r
status = dat_ib_post_cmp_and_swap( ep, \r
(DAT_UINT64)0x12345, \r
DAT_COMPLETION_DEFAULT_FLAG);\r
}\r
_OK(status, "dat_ib_post_cmp_and_swap");\r
- printf("dat_ib_post_cmp_and_swap posted\n");\r
-\r
status = dat_evd_wait(dto_evd, DTO_TIMEOUT, 1, &event, &nmore);\r
_OK(status, "dat_evd_wait for compare and swap");\r
if (event.event_number != DAT_IB_DTO_EVENT) {\r
*atomic_buf);\r
exit(1);\r
}\r
-\r
+ sleep(1); /* wait for other side to complete swap */\r
if (server) {\r
printf("Server got original data = 0x%llx, expected 0x54321\n", *atomic_buf);\r
printf("Client final result (on server) = 0x%llx, expected 0x98765\n", *target);\r
+\r
+ if (*atomic_buf != 0x54321 || *target != 0x98765) {\r
+ printf("ERROR: Server CMP_SWAP\n");\r
+ exit(1);\r
+ }\r
} else {\r
printf("Client got original data = 0x%llx, expected 0x12345\n",*atomic_buf);\r
printf("Server final result (on client) = 0x%llx, expected 0x54321\n", *target);\r
+\r
+ if (*atomic_buf != 0x12345 || *target != 0x54321) {\r
+ printf("ERROR: Client CMP_SWAP\n");\r
+ exit(1);\r
+ }\r
}\r
- sleep(1);\r
+ printf("\n CMP_SWAP test - PASSED\n");\r
return(0);\r
}\r
\r
\r
cookie.as_64 = 0x7777;\r
if (server) {\r
+ /* Wait for client to finish cmp_swap */\r
+ while (*target != 0x98765)\r
+ sleep(1);\r
*target = 0x10;\r
sleep(1);\r
status = dat_ib_post_fetch_and_add( ep, \r
&r_iov, \r
DAT_COMPLETION_DEFAULT_FLAG);\r
} else {\r
+ /* Wait for server, no swap so nothing to check */\r
*target = 0x100;\r
sleep(1);\r
status = dat_ib_post_fetch_and_add( ep, \r
DAT_COMPLETION_DEFAULT_FLAG);\r
}\r
_OK(status, "dat_ib_post_fetch_and_add");\r
- printf("dat_ib_post_fetch_and_add posted\n");\r
status = dat_evd_wait(dto_evd, DTO_TIMEOUT, 1, &event, &nmore);\r
_OK(status, "dat_evd_wait for fetch and add");\r
if (event.event_number != DAT_IB_DTO_EVENT) {\r
exit(1);\r
}\r
\r
- sleep(1);\r
+ sleep(1); /* wait for other side to complete fetch_add */\r
+\r
if (server) {\r
printf("Server got original data = 0x%llx, expected 0x200\n", *atomic_buf);\r
printf("Client final result (on server) = 0x%llx, expected 0x30\n", *target);\r
+\r
+ if (*atomic_buf != 0x200 || *target != 0x30) {\r
+ printf("ERROR: Server FETCH_ADD\n");\r
+ exit(1);\r
+ }\r
} else {\r
printf("Server side original data = 0x%llx, expected 0x20\n", *atomic_buf);\r
printf("Server final result (on client) = 0x%llx, expected 0x300\n", *target);\r
- }\r
\r
+ if (*atomic_buf != 0x20 || *target != 0x300) {\r
+ printf("ERROR: Server FETCH_ADD\n");\r
+ exit(1);\r
+ }\r
+ }\r
+ printf("\n FETCH_ADD test - PASSED\n");\r
return(0);\r
}\r
\r
int\r
main(int argc, char **argv)\r
{\r
- char *hostname;\r
+ char *hostname;\r
\r
- if (argc != 2) {\r
+ if (argc > 2) {\r
printf(usage);\r
exit(1);\r
}\r
- if (strcmp(argv[ 1 ], "-s") == 0)\r
+\r
+ if ((argc == 1) || strcmp(argv[ 1 ], "-s") == 0)\r
{\r
server = 1;\r
} else {\r
hostname = argv[ 1 ];\r
}\r
\r
+\r
/*\r
* connect\r
*/\r