3737#include < rdma/rdma_cma.h>
3838#include < vma/dev/net_device_table_mgr.h>
3939#include " vma/dev/ring_allocation_logic.h"
40+ #include " vma/sock/fd_collection.h"
4041#include " vma/sock/sock-redirect.h" // calling orig_os_api.epoll()
4142#include " vma/util/verbs_extra.h"
4243
@@ -395,11 +396,11 @@ void event_handler_manager::stop_thread()
395396 m_epfd = -1 ;
396397}
397398
398- void event_handler_manager::update_epfd (int fd, int operation)
399+ void event_handler_manager::update_epfd (int fd, int operation, int events )
399400{
400401 epoll_event ev = {0 , {0 }};
401402
402- ev.events = EPOLLIN | EPOLLPRI ;
403+ ev.events = events ;
403404 ev.data .fd = fd;
404405 BULLSEYE_EXCLUDE_BLOCK_START
405406 if (orig_os_api.epoll_ctl (m_epfd, operation, fd, &ev) < 0 ) {
@@ -520,7 +521,7 @@ void event_handler_manager::priv_register_ibverbs_events(ibverbs_reg_info_t& inf
520521
521522 priv_prepare_ibverbs_async_event_queue (i);
522523
523- update_epfd (info.fd , EPOLL_CTL_ADD);
524+ update_epfd (info.fd , EPOLL_CTL_ADD, EPOLLIN | EPOLLPRI );
524525 evh_logdbg (" %d added to event_handler_map_t!" , info.fd );
525526 }
526527 BULLSEYE_EXCLUDE_BLOCK_START
@@ -582,7 +583,7 @@ void event_handler_manager::priv_unregister_ibverbs_events(ibverbs_reg_info_t& i
582583
583584 i->second .ibverbs_ev .ev_map .erase (j);
584585 if (n == 1 ) {
585- update_epfd (info.fd , EPOLL_CTL_DEL);
586+ update_epfd (info.fd , EPOLL_CTL_DEL, EPOLLIN | EPOLLPRI );
586587 m_event_handler_map.erase (i);
587588 evh_logdbg (" %d erased from event_handler_map_t!" , info.fd );
588589 }
@@ -607,7 +608,7 @@ void event_handler_manager::priv_register_rdma_cm_events(rdma_cm_reg_info_t& inf
607608 /* cppcheck-suppress uninitStructMember */
608609 m_event_handler_map[info.fd ] = map_value;
609610
610- update_epfd (info.fd , EPOLL_CTL_ADD);
611+ update_epfd (info.fd , EPOLL_CTL_ADD, EPOLLIN | EPOLLPRI );
611612 }
612613 else {
613614 BULLSEYE_EXCLUDE_BLOCK_START
@@ -651,7 +652,7 @@ void event_handler_manager::priv_unregister_rdma_cm_events(rdma_cm_reg_info_t& i
651652 iter_fd->second .rdma_cm_ev .map_rdma_cm_id .erase (iter_id);
652653 iter_fd->second .rdma_cm_ev .n_ref_count --;
653654 if (iter_fd->second .rdma_cm_ev .n_ref_count == 0 ) {
654- update_epfd (info.fd , EPOLL_CTL_DEL);
655+ update_epfd (info.fd , EPOLL_CTL_DEL, EPOLLIN | EPOLLPRI );
655656 m_event_handler_map.erase (iter_fd);
656657 evh_logdbg (" Removed channel <%d %p>" , info.fd , info.id );
657658 }
@@ -679,7 +680,7 @@ void event_handler_manager::priv_register_command_events(command_reg_info_t& inf
679680 /* coverity[uninit_use_in_call] */
680681 /* cppcheck-suppress uninitStructMember */
681682 m_event_handler_map[info.fd ] = map_value;
682- update_epfd (info.fd , EPOLL_CTL_ADD);
683+ update_epfd (info.fd , EPOLL_CTL_ADD, EPOLLIN | EPOLLPRI );
683684 }
684685
685686}
@@ -696,7 +697,7 @@ void event_handler_manager::priv_unregister_command_events(command_reg_info_t& i
696697 evh_logdbg (" This fd (%d) no longer COMMAND type fd" , info.fd );
697698 }
698699 else {
699- update_epfd (info.fd , EPOLL_CTL_DEL);
700+ update_epfd (info.fd , EPOLL_CTL_DEL, EPOLLIN | EPOLLPRI );
700701 }
701702}
702703
@@ -954,7 +955,10 @@ void* event_handler_manager::thread_loop()
954955
955956 event_handler_map_t ::iterator i = m_event_handler_map.find (fd);
956957 if (i == m_event_handler_map.end ()) {
957- evh_logdbg (" No event handler (fd=%d)" , fd);
958+ // No event handler - this is probably a poll_os event!
959+ if (!g_p_fd_collection->set_immediate_os_sample (fd)) {
960+ evh_logdbg (" No event handler (fd=%d)" , fd);
961+ }
958962 continue ;
959963 }
960964
0 commit comments