aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic
diff options
context:
space:
mode:
authorTuomas Taipale <tuomas.taipale@nokia.com>2022-12-20 08:10:39 +0000
committerPetri Savolainen <petri.savolainen@nokia.com>2022-12-21 16:42:19 +0200
commit8936a2f35dbbbbdbb8e7a694ab99161cacc93adf (patch)
tree8a82e593c0119149bfc3311731098016f5547d98 /platform/linux-generic
parent6d7df9b105263c8d4f10acc62ea1e2b768b6e17e (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>
Diffstat (limited to 'platform/linux-generic')
-rw-r--r--platform/linux-generic/odp_packet_io.c19
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) {