@@ -347,12 +347,12 @@ sockinfo_udp::sockinfo_udp(int fd, int domain)
347347 , m_port_map_lock(" sockinfo_udp::m_ports_map_lock" )
348348 , m_port_map_index(0 )
349349 , m_p_last_dst_entry(nullptr )
350- , m_tos(0 )
351350 , m_n_sysvar_rx_poll_yield_loops(safe_mce_sys().rx_poll_yield_loops)
352351 , m_n_sysvar_rx_udp_poll_os_ratio(safe_mce_sys().rx_udp_poll_os_ratio)
353352 , m_n_sysvar_rx_ready_byte_min_limit(safe_mce_sys().rx_ready_byte_min_limit)
354353 , m_n_sysvar_rx_cq_drain_rate_nsec(safe_mce_sys().rx_cq_drain_rate_nsec)
355354 , m_n_sysvar_rx_delta_tsc_between_cq_polls(safe_mce_sys().rx_delta_tsc_between_cq_polls)
355+ , m_tos(0 )
356356 , m_sockopt_mapped(false )
357357 , m_is_connected(false )
358358 , m_multicast(false )
@@ -2264,72 +2264,27 @@ int sockinfo_udp::rx_verify_available_data()
22642264 return ret;
22652265}
22662266
2267- void sockinfo_udp::register_callback (xlio_recv_callback_t callback, void *context)
2268- {
2269- m_rx_callback = callback;
2270- m_rx_callback_context = context;
2271- }
2272-
2273- /* *
2274- * Performs inspection by registered user callback
2275- *
2276- */
2277- inline xlio_recv_callback_retval_t sockinfo_udp::inspect_by_user_cb (mem_buf_desc_t *p_desc)
2278- {
2279- xlio_info_t pkt_info;
2280-
2281- pkt_info.struct_sz = sizeof (pkt_info);
2282- pkt_info.packet_id = (void *)p_desc;
2283- pkt_info.src = p_desc->rx .src .get_p_sa ();
2284- pkt_info.dst = p_desc->rx .dst .get_p_sa ();
2285- pkt_info.socket_ready_queue_pkt_count = m_n_rx_pkt_ready_list_count;
2286- pkt_info.socket_ready_queue_byte_count = m_rx_ready_byte_count;
2287-
2288- if (m_n_tsing_flags & SOF_TIMESTAMPING_RAW_HARDWARE) {
2289- pkt_info.hw_timestamp = p_desc->rx .timestamps .hw ;
2290- }
2291- if (p_desc->rx .timestamps .sw .tv_sec ) {
2292- pkt_info.sw_timestamp = p_desc->rx .timestamps .sw ;
2293- }
2294-
2295- // fill io vector array with data buffer pointers
2296- iovec iov[p_desc->rx .n_frags ];
2297- int nr_frags = 0 ;
2298-
2299- for (mem_buf_desc_t *tmp = p_desc; tmp; tmp = tmp->p_next_desc ) {
2300- iov[nr_frags++] = tmp->rx .frag ;
2301- }
2302-
2303- // call user callback
2304- return m_rx_callback (m_fd, nr_frags, iov, &pkt_info, m_rx_callback_context);
2305- }
2306-
23072267/* *
23082268 * Performs packet processing and store packet
23092269 * in ready queue.
23102270 */
2311- inline void sockinfo_udp::update_ready (mem_buf_desc_t *p_desc, void *pv_fd_ready_array,
2312- xlio_recv_callback_retval_t cb_ret)
2271+ inline void sockinfo_udp::update_ready (mem_buf_desc_t *p_desc, void *pv_fd_ready_array)
23132272{
2314- // In ZERO COPY case we let the user's application manage the ready queue
2315- if (cb_ret != XLIO_PACKET_HOLD) {
2316- m_lock_rcv.lock ();
2317- // Save rx packet info in our ready list
2318- m_rx_pkt_ready_list.push_back (p_desc);
2319- m_n_rx_pkt_ready_list_count++;
2320- m_rx_ready_byte_count += p_desc->rx .sz_payload ;
2321- if (unlikely (m_p_socket_stats)) {
2322- m_p_socket_stats->n_rx_ready_byte_count += p_desc->rx .sz_payload ;
2323- m_p_socket_stats->n_rx_ready_pkt_count ++;
2324- m_p_socket_stats->counters .n_rx_ready_pkt_max =
2325- std::max ((uint32_t )m_n_rx_pkt_ready_list_count,
2326- m_p_socket_stats->counters .n_rx_ready_pkt_max );
2327- m_p_socket_stats->counters .n_rx_ready_byte_max = std::max (
2328- (uint32_t )m_rx_ready_byte_count, m_p_socket_stats->counters .n_rx_ready_byte_max );
2329- }
2330- m_sock_wakeup_pipe.do_wakeup ();
2331- m_lock_rcv.unlock ();
2273+ m_lock_rcv.lock ();
2274+ // Save rx packet info in our ready list
2275+ m_rx_pkt_ready_list.push_back (p_desc);
2276+ m_n_rx_pkt_ready_list_count++;
2277+ m_rx_ready_byte_count += p_desc->rx .sz_payload ;
2278+ if (unlikely (m_p_socket_stats)) {
2279+ m_p_socket_stats->n_rx_ready_byte_count += p_desc->rx .sz_payload ;
2280+ m_p_socket_stats->n_rx_ready_pkt_count ++;
2281+ m_p_socket_stats->counters .n_rx_ready_pkt_max = std::max (
2282+ (uint32_t )m_n_rx_pkt_ready_list_count, m_p_socket_stats->counters .n_rx_ready_pkt_max );
2283+ m_p_socket_stats->counters .n_rx_ready_byte_max = std::max (
2284+ (uint32_t )m_rx_ready_byte_count, m_p_socket_stats->counters .n_rx_ready_byte_max );
23322285 }
2286+ m_sock_wakeup_pipe.do_wakeup ();
2287+ m_lock_rcv.unlock ();
23332288
23342289 NOTIFY_ON_EVENTS (this , EPOLLIN);
23352290
@@ -2482,17 +2437,10 @@ bool sockinfo_udp::rx_input_cb(mem_buf_desc_t *p_desc, void *pv_fd_ready_array)
24822437
24832438 process_timestamps (p_desc);
24842439
2485- xlio_recv_callback_retval_t cb_ret = XLIO_PACKET_RECV;
2486- if (m_rx_callback && ((cb_ret = inspect_by_user_cb (p_desc)) == XLIO_PACKET_DROP)) {
2487- si_udp_logfunc (" rx packet discarded - by user callback" );
2488- return false ;
2489- }
2490- // Yes, we want to keep this packet!
2491- // And we must increment ref_counter before pushing this packet into the ready queue
2492- // to prevent race condition with the 'if( (--ref_count) <= 0)' in ib_comm_mgr
2440+ // We must increment ref_counter before pushing this packet into the ready queue
24932441 p_desc->inc_ref_count ();
24942442 save_strq_stats (p_desc->rx .strides_num );
2495- update_ready (p_desc, pv_fd_ready_array, cb_ret );
2443+ update_ready (p_desc, pv_fd_ready_array);
24962444 if (unlikely (m_p_socket_stats)) {
24972445 m_p_socket_stats->counters .n_rx_bytes += p_desc->rx .sz_payload ;
24982446 m_p_socket_stats->counters .n_rx_data_pkts ++;
0 commit comments