aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/odp_traffic_mngr.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/odp_traffic_mngr.c')
-rw-r--r--platform/linux-generic/odp_traffic_mngr.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/platform/linux-generic/odp_traffic_mngr.c b/platform/linux-generic/odp_traffic_mngr.c
index 9bea659e9..9a64a0aab 100644
--- a/platform/linux-generic/odp_traffic_mngr.c
+++ b/platform/linux-generic/odp_traffic_mngr.c
@@ -2603,6 +2603,9 @@ static int tm_capabilities(odp_tm_capabilities_t capabilities[],
cap_ptr = &capabilities[0];
memset(cap_ptr, 0, sizeof(odp_tm_capabilities_t));
+ if (odp_global_ro.init_param.mem_model == ODP_MEM_MODEL_PROCESS)
+ return 1;
+
cap_ptr->max_tm_queues = ODP_TM_MAX_TM_QUEUES;
cap_ptr->max_levels = ODP_TM_MAX_LEVELS;
cap_ptr->tm_queue_shaper_supported = true;
@@ -3060,6 +3063,11 @@ odp_tm_t odp_tm_create(const char *name,
return ODP_TM_INVALID;
}
+ if (odp_global_ro.init_param.mem_model == ODP_MEM_MODEL_PROCESS) {
+ ODP_ERR("TM is not supported in process mode\n");
+ return ODP_TM_INVALID;
+ }
+
/* We only support global pkt priority mode */
if (requirements->pkt_prio_mode != ODP_TM_PKT_PRIO_MODE_PRESERVE) {
ODP_ERR("Unsupported Packet priority mode\n");
@@ -4640,6 +4648,17 @@ int odp_tm_enq_multi_lso(odp_tm_queue_t tm_queue, const odp_packet_t packets[],
goto error;
}
+ if (odp_unlikely(num_pkt == 1)) {
+ /* Segmentation not needed */
+ if (odp_tm_enq_multi(tm_queue, &pkt, 1) != 1) {
+ ODP_DBG("TM enqueue failed on packet %i\n", i);
+
+ goto error;
+ }
+
+ continue;
+ }
+
/* Create packets */
odp_packet_t pkt_out[num_pkt];