| 310 | dsw_port_flush_out_buffers(struct dsw_evdev *dsw, struct dsw_port *source_port); |
| 311 | |
| 312 | static void |
| 313 | dsw_port_handle_pause_flows(struct dsw_evdev *dsw, struct dsw_port *port, |
| 314 | uint8_t originating_port_id, |
| 315 | struct dsw_queue_flow *paused_qfs, |
| 316 | uint8_t qfs_len) |
| 317 | { |
| 318 | struct dsw_ctl_msg cfm = { |
| 319 | .type = DSW_CTL_CFM, |
| 320 | .originating_port_id = port->id |
| 321 | }; |
| 322 | |
| 323 | /* There might be already-scheduled events belonging to the |
| 324 | * paused flow in the output buffers. |
| 325 | */ |
| 326 | dsw_port_flush_out_buffers(dsw, port); |
| 327 | |
| 328 | dsw_port_add_paused_flows(port, paused_qfs, qfs_len); |
| 329 | |
| 330 | /* Make sure any stores to the original port's in_ring is seen |
| 331 | * before the ctl message. |
| 332 | */ |
| 333 | rte_smp_wmb(); |
| 334 | |
| 335 | dsw_port_ctl_enqueue(&dsw->ports[originating_port_id], &cfm); |
| 336 | } |
| 337 | |
| 338 | struct dsw_queue_flow_burst { |
| 339 | struct dsw_queue_flow queue_flow; |
no test coverage detected