diff options
author | Tuomas Taipale <tuomas.taipale@nokia.com> | 2022-12-20 08:10:39 +0000 |
---|---|---|
committer | Petri Savolainen <petri.savolainen@nokia.com> | 2022-12-21 16:42:19 +0200 |
commit | 8936a2f35dbbbbdbb8e7a694ab99161cacc93adf (patch) | |
tree | 8a82e593c0119149bfc3311731098016f5547d98 | |
parent | 6d7df9b105263c8d4f10acc62ea1e2b768b6e17e (diff) |
linux-gen: pktio: fix input queue count with classifier
When classifier is in use, only one packet I/O input queue should be
configured. Currently, one packet I/O level input queue is configured
but driver level input queue count will be whatever is passed via
`odp_pktin_queue_param_t::num_queues` in `odp_pktin_queue_config()`.
Fix this by always overriding the parameter to correct value when
applicable.
Signed-off-by: Tuomas Taipale <tuomas.taipale@nokia.com>
Reviewed-by: Matias Elo <matias.elo@nokia.com>
-rw-r--r-- | platform/linux-generic/odp_packet_io.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c index 22b6bc916..663b31759 100644 --- a/platform/linux-generic/odp_packet_io.c +++ b/platform/linux-generic/odp_packet_io.c @@ -2166,8 +2166,7 @@ void odp_pktio_extra_stats_print(odp_pktio_t pktio) _ODP_PRINT("\n"); } -int odp_pktin_queue_config(odp_pktio_t pktio, - const odp_pktin_queue_param_t *param) +int odp_pktin_queue_config(odp_pktio_t pktio, const odp_pktin_queue_param_t *param) { pktio_entry_t *entry; odp_pktin_mode_t mode; @@ -2175,7 +2174,7 @@ int odp_pktin_queue_config(odp_pktio_t pktio, uint32_t num_queues, i; int rc; odp_queue_t queue; - odp_pktin_queue_param_t default_param; + odp_pktin_queue_param_t default_param, local_param; if (param == NULL) { odp_pktin_queue_param_init(&default_param); @@ -2204,7 +2203,19 @@ int odp_pktin_queue_config(odp_pktio_t pktio, return -1; } - num_queues = param->classifier_enable ? 1 : param->num_queues; + if (param->classifier_enable) { + num_queues = 1; + + if (param->num_queues != num_queues) { + /* When classifier is enabled, ensure that only one input queue will be + * configured by driver. */ + memcpy(&local_param, param, sizeof(odp_pktin_queue_param_t)); + local_param.num_queues = num_queues; + param = &local_param; + } + } else { + num_queues = param->num_queues; + } rc = odp_pktio_capability(pktio, &capa); if (rc) { |