| 961 | struct dsw_port *source_port); |
| 962 | |
| 963 | static void |
| 964 | dsw_port_handle_unpause_flows(struct dsw_evdev *dsw, struct dsw_port *port, |
| 965 | uint8_t originating_port_id, |
| 966 | struct dsw_queue_flow *paused_qfs, |
| 967 | uint8_t qfs_len) |
| 968 | { |
| 969 | uint16_t i; |
| 970 | struct dsw_ctl_msg cfm = { |
| 971 | .type = DSW_CTL_CFM, |
| 972 | .originating_port_id = port->id |
| 973 | }; |
| 974 | |
| 975 | dsw_port_remove_paused_flows(port, paused_qfs, qfs_len); |
| 976 | |
| 977 | rte_smp_rmb(); |
| 978 | |
| 979 | dsw_port_ctl_enqueue(&dsw->ports[originating_port_id], &cfm); |
| 980 | |
| 981 | for (i = 0; i < qfs_len; i++) { |
| 982 | struct dsw_queue_flow *qf = &paused_qfs[i]; |
| 983 | |
| 984 | if (dsw_schedule(dsw, qf->queue_id, qf->flow_hash) == port->id) |
| 985 | port->immigrations++; |
| 986 | } |
| 987 | |
| 988 | dsw_port_flush_no_longer_paused_events(dsw, port); |
| 989 | } |
| 990 | |
| 991 | static void |
| 992 | dsw_port_buffer_in_buffer(struct dsw_port *port, |
no test coverage detected