Lines Matching refs:ep

53 	struct scif_endpt *ep;  in scif_open()  local
57 ep = kzalloc(sizeof(*ep), GFP_KERNEL); in scif_open()
58 if (!ep) in scif_open()
61 ep->qp_info.qp = kzalloc(sizeof(*ep->qp_info.qp), GFP_KERNEL); in scif_open()
62 if (!ep->qp_info.qp) in scif_open()
65 err = scif_anon_inode_getfile(ep); in scif_open()
69 spin_lock_init(&ep->lock); in scif_open()
70 mutex_init(&ep->sendlock); in scif_open()
71 mutex_init(&ep->recvlock); in scif_open()
73 scif_rma_ep_init(ep); in scif_open()
74 ep->state = SCIFEP_UNBOUND; in scif_open()
76 "SCIFAPI open: ep %p success\n", ep); in scif_open()
77 return ep; in scif_open()
80 kfree(ep->qp_info.qp); in scif_open()
82 kfree(ep); in scif_open()
92 static struct scif_endpt *scif_disconnect_ep(struct scif_endpt *ep) in scif_disconnect_ep() argument
108 wake_up_interruptible(&ep->sendwq); in scif_disconnect_ep()
109 wake_up_interruptible(&ep->recvwq); in scif_disconnect_ep()
110 mutex_lock(&ep->sendlock); in scif_disconnect_ep()
111 mutex_unlock(&ep->sendlock); in scif_disconnect_ep()
112 mutex_lock(&ep->recvlock); in scif_disconnect_ep()
113 mutex_unlock(&ep->recvlock); in scif_disconnect_ep()
119 if (tmpep == ep) { in scif_disconnect_ep()
122 spin_lock(&ep->lock); in scif_disconnect_ep()
136 if (tmpep == ep) { in scif_disconnect_ep()
145 init_completion(&ep->discon); in scif_disconnect_ep()
147 msg.src = ep->port; in scif_disconnect_ep()
148 msg.dst = ep->peer; in scif_disconnect_ep()
149 msg.payload[0] = (u64)ep; in scif_disconnect_ep()
150 msg.payload[1] = ep->remote_ep; in scif_disconnect_ep()
152 err = scif_nodeqp_send(ep->remote_dev, &msg); in scif_disconnect_ep()
153 spin_unlock(&ep->lock); in scif_disconnect_ep()
158 wait_for_completion_timeout(&ep->discon, in scif_disconnect_ep()
160 return ep; in scif_disconnect_ep()
165 struct scif_endpt *ep = (struct scif_endpt *)epd; in scif_close() local
172 ep, scif_ep_states[ep->state]); in scif_close()
174 spin_lock(&ep->lock); in scif_close()
175 flush_conn = (ep->conn_async_state == ASYNC_CONN_INPROGRESS); in scif_close()
176 spin_unlock(&ep->lock); in scif_close()
181 spin_lock(&ep->lock); in scif_close()
182 oldstate = ep->state; in scif_close()
184 ep->state = SCIFEP_CLOSING; in scif_close()
191 spin_unlock(&ep->lock); in scif_close()
197 if (tmpep == ep) { in scif_close()
207 spin_unlock(&ep->lock); in scif_close()
213 spin_unlock(&ep->lock); in scif_close()
215 scif_disconnect_ep(ep); in scif_close()
225 spin_unlock(&ep->lock); in scif_close()
231 if (tmpep == ep) in scif_close()
235 while (ep->acceptcnt) { in scif_close()
236 aep = list_first_entry(&ep->li_accept, in scif_close()
270 ep->acceptcnt--; in scif_close()
273 spin_lock(&ep->lock); in scif_close()
277 while (ep->conreqcnt) { in scif_close()
278 conreq = list_first_entry(&ep->conlist, in scif_close()
294 ep->conreqcnt--; in scif_close()
298 spin_unlock(&ep->lock); in scif_close()
300 wake_up_interruptible(&ep->conwq); in scif_close()
304 scif_put_port(ep->port.port); in scif_close()
305 scif_anon_inode_fput(ep); in scif_close()
306 scif_teardown_ep(ep); in scif_close()
307 scif_add_epd_to_zombie_list(ep, !SCIF_EPLOCK_HELD); in scif_close()
319 struct scif_endpt *ep = (struct scif_endpt *)epd; in __scif_flush() local
321 switch (ep->state) { in __scif_flush()
324 ep->state = SCIFEP_CLLISTEN; in __scif_flush()
327 wake_up_interruptible(&ep->conwq); in __scif_flush()
338 struct scif_endpt *ep = (struct scif_endpt *)epd; in scif_bind() local
344 ep, scif_ep_states[ep->state], pn); in scif_bind()
357 spin_lock(&ep->lock); in scif_bind()
358 if (ep->state == SCIFEP_BOUND) { in scif_bind()
361 } else if (ep->state != SCIFEP_UNBOUND) { in scif_bind()
380 ep->state = SCIFEP_BOUND; in scif_bind()
381 ep->port.node = scif_info.nodeid; in scif_bind()
382 ep->port.port = pn; in scif_bind()
383 ep->conn_async_state = ASYNC_CONN_IDLE; in scif_bind()
388 spin_unlock(&ep->lock); in scif_bind()
396 struct scif_endpt *ep = (struct scif_endpt *)epd; in scif_listen() local
399 "SCIFAPI listen: ep %p %s\n", ep, scif_ep_states[ep->state]); in scif_listen()
400 spin_lock(&ep->lock); in scif_listen()
401 switch (ep->state) { in scif_listen()
407 spin_unlock(&ep->lock); in scif_listen()
413 spin_unlock(&ep->lock); in scif_listen()
419 ep->state = SCIFEP_LISTENING; in scif_listen()
420 ep->backlog = backlog; in scif_listen()
422 ep->conreqcnt = 0; in scif_listen()
423 ep->acceptcnt = 0; in scif_listen()
424 INIT_LIST_HEAD(&ep->conlist); in scif_listen()
425 init_waitqueue_head(&ep->conwq); in scif_listen()
426 INIT_LIST_HEAD(&ep->li_accept); in scif_listen()
427 spin_unlock(&ep->lock); in scif_listen()
433 scif_teardown_ep(ep); in scif_listen()
434 ep->qp_info.qp = NULL; in scif_listen()
437 list_add_tail(&ep->list, &scif_info.listen); in scif_listen()
471 static int scif_conn_func(struct scif_endpt *ep) in scif_conn_func() argument
477 err = scif_reserve_dma_chan(ep); in scif_conn_func()
479 dev_err(&ep->remote_dev->sdev->dev, in scif_conn_func()
481 ep->state = SCIFEP_BOUND; in scif_conn_func()
485 err = scif_setup_qp_connect(ep->qp_info.qp, &ep->qp_info.qp_offset, in scif_conn_func()
486 SCIF_ENDPT_QP_SIZE, ep->remote_dev); in scif_conn_func()
488 dev_err(&ep->remote_dev->sdev->dev, in scif_conn_func()
490 __func__, err, ep->qp_info.qp_offset); in scif_conn_func()
491 ep->state = SCIFEP_BOUND; in scif_conn_func()
495 spdev = scif_get_peer_dev(ep->remote_dev); in scif_conn_func()
501 msg.src = ep->port; in scif_conn_func()
502 msg.dst = ep->conn_port; in scif_conn_func()
504 msg.payload[0] = (u64)ep; in scif_conn_func()
505 msg.payload[1] = ep->qp_info.qp_offset; in scif_conn_func()
506 err = _scif_nodeqp_send(ep->remote_dev, &msg); in scif_conn_func()
514 err = wait_event_timeout(ep->conwq, ep->state != SCIFEP_CONNECTING, in scif_conn_func()
517 dev_err(&ep->remote_dev->sdev->dev, in scif_conn_func()
519 ep->state = SCIFEP_BOUND; in scif_conn_func()
521 spdev = scif_get_peer_dev(ep->remote_dev); in scif_conn_func()
526 if (ep->state == SCIFEP_MAPPING) { in scif_conn_func()
527 err = scif_setup_qp_connect_response(ep->remote_dev, in scif_conn_func()
528 ep->qp_info.qp, in scif_conn_func()
529 ep->qp_info.gnt_pld); in scif_conn_func()
535 dev_err(&ep->remote_dev->sdev->dev, in scif_conn_func()
538 msg.payload[0] = ep->remote_ep; in scif_conn_func()
539 _scif_nodeqp_send(ep->remote_dev, &msg); in scif_conn_func()
540 ep->state = SCIFEP_BOUND; in scif_conn_func()
545 msg.payload[0] = ep->remote_ep; in scif_conn_func()
546 err = _scif_nodeqp_send(ep->remote_dev, &msg); in scif_conn_func()
548 ep->state = SCIFEP_BOUND; in scif_conn_func()
551 ep->state = SCIFEP_CONNECTED; in scif_conn_func()
553 list_add_tail(&ep->list, &scif_info.connected); in scif_conn_func()
555 dev_dbg(&ep->remote_dev->sdev->dev, in scif_conn_func()
556 "SCIFAPI connect: ep %p connected\n", ep); in scif_conn_func()
557 } else if (ep->state == SCIFEP_BOUND) { in scif_conn_func()
558 dev_dbg(&ep->remote_dev->sdev->dev, in scif_conn_func()
559 "SCIFAPI connect: ep %p connection refused\n", ep); in scif_conn_func()
568 scif_cleanup_ep_qp(ep); in scif_conn_func()
581 struct scif_endpt *ep; in scif_conn_handler() local
584 ep = NULL; in scif_conn_handler()
587 ep = list_first_entry(&scif_info.nb_connect_list, in scif_conn_handler()
589 list_del(&ep->conn_list); in scif_conn_handler()
592 if (ep) { in scif_conn_handler()
593 ep->conn_err = scif_conn_func(ep); in scif_conn_handler()
594 wake_up_interruptible(&ep->conn_pend_wq); in scif_conn_handler()
596 } while (ep); in scif_conn_handler()
601 struct scif_endpt *ep = (struct scif_endpt *)epd; in __scif_connect() local
606 dev_dbg(scif_info.mdev.this_device, "SCIFAPI connect: ep %p %s\n", ep, in __scif_connect()
607 scif_ep_states[ep->state]); in __scif_connect()
621 spin_lock(&ep->lock); in __scif_connect()
622 switch (ep->state) { in __scif_connect()
628 if (ep->conn_async_state == ASYNC_CONN_INPROGRESS) in __scif_connect()
629 ep->conn_async_state = ASYNC_CONN_FLUSH_WORK; in __scif_connect()
639 if (ep->conn_async_state == ASYNC_CONN_INPROGRESS) in __scif_connect()
645 if (ep->conn_async_state == ASYNC_CONN_INPROGRESS) in __scif_connect()
646 ep->conn_async_state = ASYNC_CONN_FLUSH_WORK; in __scif_connect()
651 ep->port.port = scif_get_new_port(); in __scif_connect()
652 if (!ep->port.port) { in __scif_connect()
655 ep->port.node = scif_info.nodeid; in __scif_connect()
656 ep->conn_async_state = ASYNC_CONN_IDLE; in __scif_connect()
672 if (ep->conn_async_state == ASYNC_CONN_INPROGRESS) { in __scif_connect()
673 ep->conn_async_state = ASYNC_CONN_FLUSH_WORK; in __scif_connect()
674 } else if (ep->conn_async_state == ASYNC_CONN_FLUSH_WORK) { in __scif_connect()
677 ep->conn_port = *dst; in __scif_connect()
678 init_waitqueue_head(&ep->sendwq); in __scif_connect()
679 init_waitqueue_head(&ep->recvwq); in __scif_connect()
680 init_waitqueue_head(&ep->conwq); in __scif_connect()
681 ep->conn_async_state = 0; in __scif_connect()
684 ep->conn_async_state = ASYNC_CONN_INPROGRESS; in __scif_connect()
689 if (err || ep->conn_async_state == ASYNC_CONN_FLUSH_WORK) in __scif_connect()
692 ep->state = SCIFEP_CONNECTING; in __scif_connect()
693 ep->remote_dev = &scif_dev[dst->node]; in __scif_connect()
694 ep->qp_info.qp->magic = SCIFEP_MAGIC; in __scif_connect()
695 if (ep->conn_async_state == ASYNC_CONN_INPROGRESS) { in __scif_connect()
696 init_waitqueue_head(&ep->conn_pend_wq); in __scif_connect()
698 list_add_tail(&ep->conn_list, &scif_info.nb_connect_list); in __scif_connect()
704 spin_unlock(&ep->lock); in __scif_connect()
708 } else if (ep->conn_async_state == ASYNC_CONN_FLUSH_WORK) { in __scif_connect()
710 err = ep->conn_err; in __scif_connect()
711 spin_lock(&ep->lock); in __scif_connect()
712 ep->conn_async_state = ASYNC_CONN_IDLE; in __scif_connect()
713 spin_unlock(&ep->lock); in __scif_connect()
715 err = scif_conn_func(ep); in __scif_connect()
948 struct scif_endpt *ep = (struct scif_endpt *)epd; in _scif_send() local
952 struct scif_qp *qp = ep->qp_info.qp; in _scif_send()
957 spin_lock(&ep->lock); in _scif_send()
958 while (sent_len != len && SCIFEP_CONNECTED == ep->state) { in _scif_send()
973 notif_msg.src = ep->port; in _scif_send()
975 notif_msg.payload[0] = ep->remote_ep; in _scif_send()
976 ret = _scif_nodeqp_send(ep->remote_dev, &notif_msg); in _scif_send()
988 spin_unlock(&ep->lock); in _scif_send()
991 wait_event_interruptible(ep->sendwq, in _scif_send()
992 (SCIFEP_CONNECTED != ep->state) || in _scif_send()
995 spin_lock(&ep->lock); in _scif_send()
1001 else if (!ret && SCIFEP_CONNECTED != ep->state) in _scif_send()
1002 ret = SCIFEP_DISCONNECTED == ep->state ? in _scif_send()
1004 spin_unlock(&ep->lock); in _scif_send()
1011 struct scif_endpt *ep = (struct scif_endpt *)epd; in _scif_recv() local
1015 struct scif_qp *qp = ep->qp_info.qp; in _scif_recv()
1019 spin_lock(&ep->lock); in _scif_recv()
1020 while (remaining_len && (SCIFEP_CONNECTED == ep->state || in _scif_recv()
1021 SCIFEP_DISCONNECTED == ep->state)) { in _scif_recv()
1032 if (ep->state == SCIFEP_CONNECTED) { in _scif_recv()
1045 notif_msg.src = ep->port; in _scif_recv()
1047 notif_msg.payload[0] = ep->remote_ep; in _scif_recv()
1048 ret = _scif_nodeqp_send(ep->remote_dev, in _scif_recv()
1061 if (ep->state == SCIFEP_DISCONNECTED) in _scif_recv()
1070 spin_unlock(&ep->lock); in _scif_recv()
1076 wait_event_interruptible(ep->recvwq, in _scif_recv()
1077 SCIFEP_CONNECTED != ep->state || in _scif_recv()
1081 spin_lock(&ep->lock); in _scif_recv()
1087 else if (!ret && ep->state != SCIFEP_CONNECTED) in _scif_recv()
1088 ret = ep->state == SCIFEP_DISCONNECTED ? in _scif_recv()
1090 spin_unlock(&ep->lock); in _scif_recv()
1106 struct scif_endpt *ep = (struct scif_endpt *)epd; in scif_user_send() local
1114 "SCIFAPI send (U): ep %p %s\n", ep, scif_ep_states[ep->state]); in scif_user_send()
1132 mutex_lock(&ep->sendlock); in scif_user_send()
1149 mutex_unlock(&ep->sendlock); in scif_user_send()
1167 struct scif_endpt *ep = (struct scif_endpt *)epd; in scif_user_recv() local
1175 "SCIFAPI recv (U): ep %p %s\n", ep, scif_ep_states[ep->state]); in scif_user_recv()
1193 mutex_lock(&ep->recvlock); in scif_user_recv()
1210 mutex_unlock(&ep->recvlock); in scif_user_recv()
1228 struct scif_endpt *ep = (struct scif_endpt *)epd; in scif_send() local
1232 "SCIFAPI send (K): ep %p %s\n", ep, scif_ep_states[ep->state]); in scif_send()
1239 if (!ep->remote_dev) in scif_send()
1248 mutex_lock(&ep->sendlock); in scif_send()
1253 mutex_unlock(&ep->sendlock); in scif_send()
1270 struct scif_endpt *ep = (struct scif_endpt *)epd; in scif_recv() local
1274 "SCIFAPI recv (K): ep %p %s\n", ep, scif_ep_states[ep->state]); in scif_recv()
1288 mutex_lock(&ep->recvlock); in scif_recv()
1293 mutex_unlock(&ep->recvlock); in scif_recv()
1300 poll_table *p, struct scif_endpt *ep) in _scif_poll_wait() argument
1309 spin_unlock(&ep->lock); in _scif_poll_wait()
1311 spin_lock(&ep->lock); in _scif_poll_wait()
1315 __scif_pollfd(struct file *f, poll_table *wait, struct scif_endpt *ep) in __scif_pollfd() argument
1320 "SCIFAPI pollfd: ep %p %s\n", ep, scif_ep_states[ep->state]); in __scif_pollfd()
1322 spin_lock(&ep->lock); in __scif_pollfd()
1325 if (ep->conn_async_state == ASYNC_CONN_INPROGRESS) { in __scif_pollfd()
1326 _scif_poll_wait(f, &ep->conn_pend_wq, wait, ep); in __scif_pollfd()
1327 if (ep->conn_async_state == ASYNC_CONN_INPROGRESS) { in __scif_pollfd()
1328 if (ep->state == SCIFEP_CONNECTED || in __scif_pollfd()
1329 ep->state == SCIFEP_DISCONNECTED || in __scif_pollfd()
1330 ep->conn_err) in __scif_pollfd()
1337 if (ep->state == SCIFEP_LISTENING) { in __scif_pollfd()
1338 _scif_poll_wait(f, &ep->conwq, wait, ep); in __scif_pollfd()
1339 if (ep->state == SCIFEP_LISTENING) { in __scif_pollfd()
1340 if (ep->conreqcnt) in __scif_pollfd()
1347 if (ep->state == SCIFEP_CONNECTED || ep->state == SCIFEP_DISCONNECTED) { in __scif_pollfd()
1349 _scif_poll_wait(f, &ep->recvwq, wait, ep); in __scif_pollfd()
1351 _scif_poll_wait(f, &ep->sendwq, wait, ep); in __scif_pollfd()
1352 if (ep->state == SCIFEP_CONNECTED || in __scif_pollfd()
1353 ep->state == SCIFEP_DISCONNECTED) { in __scif_pollfd()
1355 if (scif_rb_count(&ep->qp_info.qp->inbound_q, 1)) in __scif_pollfd()
1358 if (scif_rb_space(&ep->qp_info.qp->outbound_q)) in __scif_pollfd()
1361 if (ep->state == SCIFEP_DISCONNECTED) in __scif_pollfd()
1370 spin_unlock(&ep->lock); in __scif_pollfd()