diff options
Diffstat (limited to 'src/plugins/odp/node.c')
-rwxr-xr-x | src/plugins/odp/node.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/plugins/odp/node.c b/src/plugins/odp/node.c index 8eb1b0cb..fea8bf6a 100755 --- a/src/plugins/odp/node.c +++ b/src/plugins/odp/node.c @@ -75,6 +75,8 @@ odp_packet_queue_mode (odp_packet_if_t * oif, odp_packet_t pkt_tbl[], odp_event_t evt_tbl[req_pkts]; u64 sched_wait; odp_queue_t rxq = ODP_QUEUE_INVALID; + odp_thrmask_t mask; + if (pktio == ODP_PKTIO_INVALID) { @@ -90,6 +92,12 @@ odp_packet_queue_mode (odp_packet_if_t * oif, odp_packet_t pkt_tbl[], return 0; } } + else + { + odp_thrmask_zero (&mask); + odp_thrmask_set (&mask, odp_thread_id ()); + odp_schedule_group_join (oif->sched_group, &mask); + } while (req_pkts) { @@ -110,6 +118,11 @@ odp_packet_queue_mode (odp_packet_if_t * oif, odp_packet_t pkt_tbl[], req_pkts -= i; } + if (oif->m.rx_mode != APPL_MODE_PKT_QUEUE) + { + odp_schedule_group_leave (oif->sched_group, &mask); + } + /* convert events to packets, discarding any non-packet events */ for (i = 0; i < num_evts; i++) { @@ -215,8 +228,7 @@ odp_packet_device_input_fn (vlib_main_t * vm, vlib_node_runtime_t * node, do { - if ((oif->m.rx_mode == (APPL_MODE_PKT_QUEUE)) || - (oif->m.rx_mode == (APPL_MODE_PKT_SCHED))) + if (oif->m.rx_mode != APPL_MODE_PKT_BURST) { n_left = odp_packet_queue_mode (oif, pkt_tbl, queue_id, n_left_to_next); |