From 8936a2f35dbbbbdbb8e7a694ab99161cacc93adf Mon Sep 17 00:00:00 2001 From: Tuomas Taipale Date: Tue, 20 Dec 2022 08:10:39 +0000 Subject: 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 Reviewed-by: Matias Elo --- platform/linux-generic/odp_packet_io.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'platform/linux-generic') 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) { -- cgit v1.2.3