From: Harry van Haaren Date: Fri, 12 Jan 2018 10:27:18 +0000 (+0000) Subject: service: add attribute for number of invocations X-Git-Tag: spdx-start~720 X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=fb033aceaf81bee4fcbd77d016bb590d9a27146f service: add attribute for number of invocations 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 --- diff --git a/lib/librte_eal/common/include/rte_service.h b/lib/librte_eal/common/include/rte_service.h index 460dbbfe54..85e964b055 100644 --- a/lib/librte_eal/common/include/rte_service.h +++ b/lib/librte_eal/common/include/rte_service.h @@ -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 diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index 1b54b7ec00..5f97d85175 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -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; } diff --git a/test/test/test_service_cores.c b/test/test/test_service_cores.c index e510643f5e..86b4073d21 100644 --- a/test/test/test_service_cores.c +++ b/test/test/test_service_cores.c @@ -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(); }