| 1444 | } |
| 1445 | |
| 1446 | static int |
| 1447 | sfc_flow_parse_rss(struct sfc_adapter *sa, |
| 1448 | const struct rte_flow_action_rss *action_rss, |
| 1449 | struct rte_flow *flow) |
| 1450 | { |
| 1451 | struct sfc_flow_spec_filter *spec_filter = &flow->spec.filter; |
| 1452 | struct sfc_flow_rss_conf conf; |
| 1453 | uint16_t sw_qid_min; |
| 1454 | struct sfc_rxq *rxq; |
| 1455 | int rc; |
| 1456 | |
| 1457 | spec_filter->template.efs_flags |= EFX_FILTER_FLAG_RX_RSS; |
| 1458 | |
| 1459 | rc = sfc_flow_rss_parse_conf(sa, action_rss, &conf, &sw_qid_min); |
| 1460 | if (rc != 0) |
| 1461 | return -rc; |
| 1462 | |
| 1463 | rxq = sfc_rxq_ctrl_by_ethdev_qid(sa, sw_qid_min); |
| 1464 | spec_filter->template.efs_dmaq_id = rxq->hw_index; |
| 1465 | |
| 1466 | spec_filter->rss_ctx = sfc_flow_rss_ctx_reuse(sa, &conf, sw_qid_min, |
| 1467 | action_rss->queue); |
| 1468 | if (spec_filter->rss_ctx != NULL) |
| 1469 | return 0; |
| 1470 | |
| 1471 | rc = sfc_flow_rss_ctx_add(sa, &conf, sw_qid_min, action_rss->queue, |
| 1472 | &spec_filter->rss_ctx); |
| 1473 | if (rc != 0) |
| 1474 | return -rc; |
| 1475 | |
| 1476 | return 0; |
| 1477 | } |
| 1478 | |
| 1479 | static int |
| 1480 | sfc_flow_spec_flush(struct sfc_adapter *sa, struct sfc_flow_spec *spec, |
no test coverage detected