eventdev: check timer adapter status before start
authorPavan Nikhilesh <pbhagavatula@marvell.com>
Sat, 16 Mar 2019 20:27:36 +0000 (20:27 +0000)
committerJerin Jacob <jerinj@marvell.com>
Tue, 2 Apr 2019 01:10:40 +0000 (03:10 +0200)
Check if timer adapter is already started before starting it.
Update the unit test accordingly.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
Acked-by: Erik Gabriel Carrillo <erik.g.carrillo@intel.com>
app/test/test_event_timer_adapter.c
lib/librte_eventdev/rte_event_timer_adapter.c
lib/librte_eventdev/rte_event_timer_adapter.h

index a45b7d1..d4b78e0 100644 (file)
@@ -1015,8 +1015,8 @@ adapter_start(void)
        TEST_ASSERT_SUCCESS(_timdev_setup(180 * NSECPERSEC,
                        NSECPERSEC / 10),
                        "Failed to start adapter");
-       TEST_ASSERT_SUCCESS(rte_event_timer_adapter_start(timdev),
-                       "Failed to repeatedly start adapter");
+       TEST_ASSERT_EQUAL(rte_event_timer_adapter_start(timdev), -EALREADY,
+                       "Timer adapter started without call to stop.");
 
        return TEST_SUCCESS;
 }
index 79070d4..575da04 100644 (file)
@@ -261,6 +261,12 @@ rte_event_timer_adapter_start(const struct rte_event_timer_adapter *adapter)
        ADAPTER_VALID_OR_ERR_RET(adapter, -EINVAL);
        FUNC_PTR_OR_ERR_RET(adapter->ops->start, -EINVAL);
 
+       if (adapter->data->started) {
+               EVTIM_LOG_ERR("event timer adapter %"PRIu8" already started",
+                             adapter->data->id);
+               return -EALREADY;
+       }
+
        ret = adapter->ops->start(adapter);
        if (ret < 0)
                return ret;
index cc4518d..1b446c3 100644 (file)
@@ -339,6 +339,7 @@ rte_event_timer_adapter_get_info(
  *   - -EINVAL if adapter identifier invalid
  *   - -ENOENT if software adapter but no service core mapped
  *   - -ENOTSUP if software adapter and more than one service core mapped
+ *   - -EALREADY if adapter has already been started
  *
  * @note
  *  The eventdev to which the event_timer_adapter is connected needs to