diff options
Diffstat (limited to 'platform/linux-generic/odp_traffic_mngr.c')
-rw-r--r-- | platform/linux-generic/odp_traffic_mngr.c | 19 |
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]; |