service: add attribute for number of invocations
authorHarry van Haaren <harry.van.haaren@intel.com>
Fri, 12 Jan 2018 10:27:18 +0000 (10:27 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 12 Jan 2018 11:49:40 +0000 (12:49 +0100)
This commit adds a new attribute to the service cores attributes
API, which allows the application to retrieve the number of times
that a service-core called the service to perform its action.

Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
lib/librte_eal/common/include/rte_service.h
lib/librte_eal/common/rte_service.c
test/test/test_service_cores.c

index 460dbbf..85e964b 100644 (file)
@@ -399,6 +399,11 @@ int32_t rte_service_dump(FILE *f, uint32_t id);
  */
 #define RTE_SERVICE_ATTR_CYCLES 0
 
+/**
+ * Returns the count of invocations of this service function
+ */
+#define RTE_SERVICE_ATTR_CALL_COUNT 1
+
 /**
  * @warning
  * @b EXPERIMENTAL: this API may change without prior notice
index 1b54b7e..5f97d85 100644 (file)
@@ -695,6 +695,9 @@ rte_service_attr_get(uint32_t id, uint32_t attr_id, uint32_t *attr_value)
        case RTE_SERVICE_ATTR_CYCLES:
                *attr_value = s->cycles_spent;
                return 0;
+       case RTE_SERVICE_ATTR_CALL_COUNT:
+               *attr_value = s->calls;
+               return 0;
        default:
                return -EINVAL;
        }
index e510643..86b4073 100644 (file)
@@ -278,6 +278,12 @@ service_attr_get(void)
                        "Valid attr_get() call didn't return success");
        TEST_ASSERT_EQUAL(0, attr_value,
                        "attr_get() call didn't set correct cycles (zero)");
+       /* check correct call count */
+       const int attr_calls = RTE_SERVICE_ATTR_CALL_COUNT;
+       TEST_ASSERT_EQUAL(0, rte_service_attr_get(id, attr_calls, &attr_value),
+                       "Valid attr_get() call didn't return success");
+       TEST_ASSERT_EQUAL(0, attr_value,
+                       "attr_get() call didn't get call count (zero)");
 
        /* Call service to increment cycle count */
        TEST_ASSERT_EQUAL(0, rte_service_lcore_add(slcore_id),
@@ -298,6 +304,11 @@ service_attr_get(void)
 
        rte_service_lcore_stop(slcore_id);
 
+       TEST_ASSERT_EQUAL(0, rte_service_attr_get(id, attr_calls, &attr_value),
+                       "Valid attr_get() call didn't return success");
+       TEST_ASSERT_EQUAL(1, (attr_value > 0),
+                       "attr_get() call didn't get call count (zero)");
+
        TEST_ASSERT_EQUAL(0, rte_service_attr_reset_all(id),
                        "Valid attr_reset_all() return success");
 
@@ -305,6 +316,11 @@ service_attr_get(void)
                        "Valid attr_get() call didn't return success");
        TEST_ASSERT_EQUAL(0, attr_value,
                        "attr_get() call didn't set correct cycles (zero)");
+       /* ensure call count > zero */
+       TEST_ASSERT_EQUAL(0, rte_service_attr_get(id, attr_calls, &attr_value),
+                       "Valid attr_get() call didn't return success");
+       TEST_ASSERT_EQUAL(0, (attr_value > 0),
+                       "attr_get() call didn't get call count (zero)");
 
        return unregister_all();
 }