コード例 #1
0
ファイル: cancel.c プロジェクト: ParaStation/psmpi2
Test(gnix_cancel, cancel_ep_no_event)
{
	int ret;

	ret = fi_cancel(&ep[0]->fid, NULL);
	cr_assert(ret == -FI_ENOENT, "fi_cancel failed");
}
コード例 #2
0
ファイル: cancel.c プロジェクト: tonyzinger/libfabric-cray
Test(gnix_cancel, cancel_ep_send)
{
	int ret;
	struct gnix_fid_ep *gnix_ep;
	struct gnix_fab_req *req;
	struct fi_cq_err_entry buf;
	struct gnix_vc *vc;
	void *foobar_ptr = NULL;
	gnix_ht_key_t *key;

	/* simulate a posted request */
	gnix_ep = container_of(ep[0], struct gnix_fid_ep, ep_fid);
	req = _gnix_fr_alloc(gnix_ep);

	req->msg.send_info[0].send_addr = 0xdeadbeef;
	req->msg.cum_send_len = req->msg.send_info[0].send_len = 128;
	req->user_context = foobar_ptr;
	req->type = GNIX_FAB_RQ_SEND;

	/* allocate, store vc */
	ret = _gnix_vc_alloc(gnix_ep, NULL, &vc);
	cr_assert(ret == FI_SUCCESS, "_gnix_vc_alloc failed");

	key = (gnix_ht_key_t *)&gnix_ep->my_name.gnix_addr;
	ret = _gnix_ht_insert(gnix_ep->vc_ht, *key, vc);
	cr_assert(!ret);

	/* make a dummy request */
	fastlock_acquire(&vc->tx_queue_lock);
	dlist_insert_head(&req->dlist, &vc->tx_queue);
	fastlock_release(&vc->tx_queue_lock);

	/* cancel simulated request */
	ret = fi_cancel(&ep[0]->fid, foobar_ptr);
	cr_assert(ret == FI_SUCCESS, "fi_cancel failed");

	/* check for event */
	ret = fi_cq_readerr(msg_cq[0], &buf, FI_SEND);
	cr_assert(ret == 1, "did not find one error event");

	cr_assert(buf.buf == (void *) 0xdeadbeef, "buffer mismatch");
	cr_assert(buf.data == 0, "data mismatch");
	cr_assert(buf.err == FI_ECANCELED, "error code mismatch");
	cr_assert(buf.prov_errno == FI_ECANCELED, "prov error code mismatch");
	cr_assert(buf.len == 128, "length mismatch");
}
コード例 #3
0
ファイル: cancel.c プロジェクト: ParaStation/psmpi2
Test(gnix_cancel, cancel_ep_no_domain)
{
	int ret;
	struct gnix_fid_ep *gnix_ep;
	struct gnix_fid_domain *gnix_dom;

	/* simulate a disconnected endpoint */
	gnix_ep = container_of(ep[0], struct gnix_fid_ep, ep_fid);
	gnix_dom = gnix_ep->domain;
	gnix_ep->domain = NULL;

	/* run test */
	ret = fi_cancel(&ep[0]->fid, NULL);
	cr_assert(ret == -FI_EDOMAIN, "fi_cancel failed");

	/* reconnect */
	gnix_ep->domain = gnix_dom;
}
コード例 #4
0
ファイル: cancel.c プロジェクト: ParaStation/psmpi2
Test(gnix_cancel, cancel_ep_recv)
{
	int ret;
	struct fi_cq_err_entry buf;

	/* simulate a posted request */
	ret = fi_recv(ep[0], (void *) 0xdeadbeef, 128, 0, FI_ADDR_UNSPEC,
			(void *) 0xcafebabe);
	cr_assert(ret == FI_SUCCESS, "fi_recv failed");

	/* cancel simulated request */
	ret = fi_cancel(&ep[0]->fid, (void *) 0xcafebabe);
	cr_assert(ret == FI_SUCCESS, "fi_cancel failed");

	/* check for event */
	ret = fi_cq_readerr(msg_cq[0], &buf, FI_RECV);
	cr_assert(ret == 1, "did not find one error event");

	cr_assert(buf.buf == (void *) 0xdeadbeef, "buffer mismatch");
	cr_assert(buf.data == 0, "data mismatch");
	cr_assert(buf.err == FI_ECANCELED, "error code mismatch");
	cr_assert(buf.prov_errno == FI_ECANCELED, "prov error code mismatch");
	cr_assert(buf.len == 128, "length mismatch");
}