X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Feventdev%2Frte_event_timer_adapter.c;h=e5572e2add6d768892c79d02083a4fb1731ab543;hb=578402f2d5e81af23000e1aa7980b5383a0394be;hp=ae554070427918205971d564e934045b84448847;hpb=53548ad3007b732e964dfa9217cf5471862cbf15;p=dpdk.git diff --git a/lib/eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c index ae55407042..e5572e2add 100644 --- a/lib/eventdev/rte_event_timer_adapter.c +++ b/lib/eventdev/rte_event_timer_adapter.c @@ -24,7 +24,7 @@ #include "eventdev_pmd.h" #include "rte_event_timer_adapter.h" #include "rte_eventdev.h" -#include "rte_eventdev_trace.h" +#include "eventdev_trace.h" #define DATA_MZ_NAME_MAX_LEN 64 #define DATA_MZ_NAME_FORMAT "rte_event_timer_adapter_data_%d" @@ -33,7 +33,7 @@ RTE_LOG_REGISTER_SUFFIX(evtim_logtype, adapter.timer, NOTICE); RTE_LOG_REGISTER_SUFFIX(evtim_buffer_logtype, adapter.timer, NOTICE); RTE_LOG_REGISTER_SUFFIX(evtim_svc_logtype, adapter.timer.svc, NOTICE); -static struct rte_event_timer_adapter adapters[RTE_EVENT_TIMER_ADAPTER_NUM_MAX]; +static struct rte_event_timer_adapter *adapters; static const struct event_timer_adapter_ops swtim_ops; @@ -138,6 +138,17 @@ rte_event_timer_adapter_create_ext( int n, ret; struct rte_eventdev *dev; + if (adapters == NULL) { + adapters = rte_zmalloc("Eventdev", + sizeof(struct rte_event_timer_adapter) * + RTE_EVENT_TIMER_ADAPTER_NUM_MAX, + RTE_CACHE_LINE_SIZE); + if (adapters == NULL) { + rte_errno = ENOMEM; + return NULL; + } + } + if (conf == NULL) { rte_errno = EINVAL; return NULL; @@ -312,6 +323,17 @@ rte_event_timer_adapter_lookup(uint16_t adapter_id) int ret; struct rte_eventdev *dev; + if (adapters == NULL) { + adapters = rte_zmalloc("Eventdev", + sizeof(struct rte_event_timer_adapter) * + RTE_EVENT_TIMER_ADAPTER_NUM_MAX, + RTE_CACHE_LINE_SIZE); + if (adapters == NULL) { + rte_errno = ENOMEM; + return NULL; + } + } + if (adapters[adapter_id].allocated) return &adapters[adapter_id]; /* Adapter is already loaded */ @@ -358,7 +380,7 @@ rte_event_timer_adapter_lookup(uint16_t adapter_id) int rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter) { - int ret; + int i, ret; ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL); FUNC_PTR_OR_ERR_RET(adapter->ops->uninit, -EINVAL); @@ -382,6 +404,16 @@ rte_event_timer_adapter_free(struct rte_event_timer_adapter *adapter) adapter->data = NULL; adapter->allocated = 0; + ret = 0; + for (i = 0; i < RTE_EVENT_TIMER_ADAPTER_NUM_MAX; i++) + if (adapters[i].allocated) + ret = adapters[i].allocated; + + if (!ret) { + rte_free(adapters); + adapters = NULL; + } + rte_eventdev_trace_timer_adapter_free(adapter); return 0; } @@ -754,6 +786,9 @@ swtim_service_func(void *arg) sw->stats.adapter_tick_count++; } + rte_event_maintain(adapter->data->event_dev_id, + adapter->data->event_port_id, 0); + return 0; }