Lines Matching defs:ufile

59  *      ufile	- Pointer to the event ufile
71 sol_uverbs_event_file_close(uverbs_ufile_uobj_t *ufile)
73 if (!ufile) {
81 ufile->is_async ? "yes" : "no");
91 rw_enter(&(ufile->uobj.uo_lock), RW_WRITER);
92 if (sol_ofs_uobj_remove(&uverbs_ufile_uo_tbl, &ufile->uobj)) {
93 rw_exit(&(ufile->uobj.uo_lock));
94 sol_ofs_uobj_deref(&ufile->uobj, uverbs_release_event_file);
96 rw_exit(&(ufile->uobj.uo_lock));
104 * ufile - The user file pointer of the event channel.
127 sol_uverbs_event_file_read(uverbs_ufile_uobj_t *ufile, struct uio *uiop,
137 "ufile = %p, is_async =%d, uio_resid=%d",
138 ufile, ufile->is_async, uiop->uio_resid);
142 mutex_enter(&ufile->lock);
149 if (ufile->ufile_notify_enabled == SOL_UVERBS2UCMA_CQ_NOTIFY_DISABLE &&
150 llist_empty(&ufile->event_list) != 0) {
152 mutex_exit(&ufile->lock);
158 if (!cv_wait_sig(&ufile->poll_wait, &ufile->lock)) {
159 mutex_exit(&ufile->lock);
166 while (llist_empty(&ufile->event_list)) {
168 mutex_exit(&ufile->lock);
174 if (!cv_wait_sig(&ufile->poll_wait, &ufile->lock)) {
175 mutex_exit(&ufile->lock);
182 entry = ufile->event_list.nxt;
189 if (ufile->is_async) {
201 llist_del(ufile->event_list.nxt);
208 mutex_exit(&ufile->lock);
227 * ufile - user file for desired completion channel event file
247 sol_uverbs_event_file_poll(uverbs_ufile_uobj_t *ufile, short events,
254 ufile, events);
257 if (!ufile) {
259 "ufile %p", ufile);
265 "ufile = %p, is_async =%d", ufile, ufile->is_async);
268 mutex_enter(&ufile->lock);
274 !llist_empty(&ufile->event_list)) {
289 *phpp = &ufile->poll_head;
292 mutex_exit(&ufile->lock);
315 uverbs_ufile_uobj_t *ufile;
320 ufile = kmem_zalloc(sizeof (*ufile), KM_NOSLEEP);
321 if (!ufile) {
326 ufile->ufile_notify_enabled = SOL_UVERBS2UCMA_CQ_NOTIFY_ENABLE;
327 sol_ofs_uobj_init(&ufile->uobj, 0, SOL_UVERBS_UFILE_UOBJ_TYPE);
328 rw_enter(&ufile->uobj.uo_lock, RW_WRITER);
330 if (sol_ofs_uobj_add(&uverbs_ufile_uo_tbl, &ufile->uobj) != 0) {
337 rw_exit(&ufile->uobj.uo_lock);
338 ufile->uobj.uo_uobj_sz = sizeof (uverbs_ufile_uobj_t);
339 sol_ofs_uobj_deref(&ufile->uobj, sol_ofs_uobj_free);
343 ufile->is_async = is_async ? 1 : 0;
344 llist_head_init(&ufile->event_list, NULL);
346 mutex_init(&ufile->lock, NULL, MUTEX_DRIVER, NULL);
347 cv_init(&ufile->poll_wait, NULL, CV_DRIVER, NULL);
349 ufile->uctxt = uctxt;
350 ufile->uobj.uo_live = 1;
351 rw_exit(&ufile->uobj.uo_lock);
352 return (ufile);
359 * ufile - Pointer to the ufile user object that is being freed.
372 uverbs_ufile_uobj_t *ufile = (uverbs_ufile_uobj_t *)uobj;
377 if (!ufile) {
385 ufile, ufile->is_async ? "yes" : "no");
390 mutex_enter(&ufile->lock);
392 entry = ufile->event_list.nxt;
394 while (entry != &ufile->event_list) {
400 evt, ufile);
408 mutex_exit(&ufile->lock);
410 cv_destroy(&ufile->poll_wait);
411 mutex_destroy(&ufile->lock);
823 uverbs_ufile_uobj_t *ufile = uctxt->async_evfile;
829 if (!ufile) {
831 "ufile %p", ufile);
835 mutex_enter(&ufile->lock);
838 mutex_exit(&ufile->lock);
851 llist_add_tail(&entry->ev_list, &ufile->event_list);
864 mutex_exit(&ufile->lock);
865 cv_signal(&ufile->poll_wait);
866 pollwakeup(&ufile->poll_head, POLLIN | POLLRDNORM);
874 * ufile - A pointer to the event file associated with a CQ.
887 uverbs_ufile_uobj_t *ufile, uverbs_ucq_uobj_t *ucq)
894 "RELEASE UCQ CHANNEL: uctxt=%p, ufile=%p, ucq=%p",
895 uctxt, ufile, ucq);
901 if (ufile) {
902 rw_enter(&ufile->uobj.uo_lock, RW_WRITER);
903 ufile->ufile_cq_cnt--;
904 if (ufile->ufile_cq_cnt) {
905 rw_exit(&ufile->uobj.uo_lock);
906 uverbs_release_ucq_uevents(ufile, ucq);
909 rw_exit(&ufile->uobj.uo_lock);
914 mutex_enter(&ufile->lock);
931 mutex_exit(&ufile->lock);
933 uverbs_release_ucq_uevents(ufile, ucq);
942 * ufile - A pointer to the asynchronous event file associated with a QP.
953 uverbs_release_ucq_uevents(uverbs_ufile_uobj_t *ufile, uverbs_ucq_uobj_t *ucq)
960 "RELEASE UCQ ASYNC EVENTS: ufile=%p, ucq=%p", ufile, ucq);
962 if (ufile) {
963 mutex_enter(&ufile->lock);
979 mutex_exit(&ufile->lock);
987 * ufile - A pointer to the asynchronous event file associated with a QP.
998 uverbs_release_uqp_uevents(uverbs_ufile_uobj_t *ufile, uverbs_uqp_uobj_t *uqp)
1005 "RELEASE UQP EVENTS: ufile=%p, uqp=%p", ufile, uqp);
1007 if (ufile) {
1008 mutex_enter(&ufile->lock);
1025 mutex_exit(&ufile->lock);
1033 * ufile - A pointer to the asynchronous event file associated with a
1045 uverbs_release_usrq_uevents(uverbs_ufile_uobj_t *ufile,
1053 "RELEASE USRQ EVENTS: ufile=%p, usrq=%p", ufile, usrq);
1055 if (ufile) {
1056 mutex_enter(&ufile->lock);
1072 mutex_exit(&ufile->lock);