From 891f07e54e5424264e124bebcf2e1dc4ec3e153c Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Mon, 21 Aug 2017 13:58:07 +0100 Subject: [PATCH] service: use id in unregister This commit reworks the unregister API to accept an integer. Signed-off-by: Harry van Haaren Acked-by: Pavan Nikhilesh --- lib/librte_eal/bsdapp/eal/rte_eal_version.map | 2 +- .../common/include/rte_service_component.h | 4 +-- lib/librte_eal/common/rte_service.c | 25 +++++-------------- .../linuxapp/eal/rte_eal_version.map | 2 +- test/test/test_service_cores.c | 10 +++----- 5 files changed, 13 insertions(+), 30 deletions(-) diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map index b1aedac909..a7aa4813c0 100644 --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map @@ -213,6 +213,7 @@ EXPERIMENTAL { rte_eal_hotplug_add; rte_eal_hotplug_remove; rte_service_component_register; + rte_service_component_unregister; rte_service_dump; rte_service_get_by_id; rte_service_get_by_name; @@ -233,6 +234,5 @@ EXPERIMENTAL { rte_service_runstate_set; rte_service_set_stats_enable; rte_service_start_with_defaults; - rte_service_unregister; } DPDK_17.08; diff --git a/lib/librte_eal/common/include/rte_service_component.h b/lib/librte_eal/common/include/rte_service_component.h index 6ef3ee456e..af632c6e1d 100644 --- a/lib/librte_eal/common/include/rte_service_component.h +++ b/lib/librte_eal/common/include/rte_service_component.h @@ -103,7 +103,7 @@ int32_t rte_service_component_register(const struct rte_service_spec *spec, * @warning * @b EXPERIMENTAL: this API may change without prior notice * - * Unregister a service. + * Unregister a service component. * * The service being removed must be stopped before calling this function. * @@ -111,7 +111,7 @@ int32_t rte_service_component_register(const struct rte_service_spec *spec, * @retval -EBUSY The service is currently running, stop the service before * calling unregister. No action has been taken. */ -int32_t rte_service_unregister(struct rte_service_spec *service); +int32_t rte_service_component_unregister(uint32_t id); /** * @warning diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index bf2fd4bf93..e650d96745 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -260,35 +260,22 @@ rte_service_component_register(const struct rte_service_spec *spec, } int32_t -rte_service_unregister(struct rte_service_spec *spec) +rte_service_component_unregister(uint32_t id) { - struct rte_service_spec_impl *s = NULL; - struct rte_service_spec_impl *spec_impl = - (struct rte_service_spec_impl *)spec; - uint32_t i; - uint32_t service_id; - for (i = 0; i < RTE_SERVICE_NUM_MAX; i++) { - if (&rte_services[i] == spec_impl) { - s = spec_impl; - service_id = i; - break; - } - } - - if (!s) - return -EINVAL; + struct rte_service_spec_impl *s; + SERVICE_VALID_GET_OR_ERR_RET(id, s, -EINVAL); rte_service_count--; rte_smp_wmb(); s->internal_flags &= ~(SERVICE_F_REGISTERED); + /* clear the run-bit in all cores */ for (i = 0; i < RTE_MAX_LCORE; i++) - lcore_states[i].service_mask &= ~(UINT64_C(1) << service_id); + lcore_states[i].service_mask &= ~(UINT64_C(1) << id); - memset(&rte_services[service_id], 0, - sizeof(struct rte_service_spec_impl)); + memset(&rte_services[id], 0, sizeof(struct rte_service_spec_impl)); return 0; } diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map index 1e65671912..ffbc65553b 100644 --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map @@ -218,6 +218,7 @@ EXPERIMENTAL { rte_eal_hotplug_add; rte_eal_hotplug_remove; rte_service_component_register; + rte_service_component_unregister; rte_service_dump; rte_service_get_by_id; rte_service_get_by_name; @@ -238,6 +239,5 @@ EXPERIMENTAL { rte_service_runstate_set; rte_service_set_stats_enable; rte_service_start_with_defaults; - rte_service_unregister; } DPDK_17.08; diff --git a/test/test/test_service_cores.c b/test/test/test_service_cores.c index d52fe490fd..e650b20104 100644 --- a/test/test/test_service_cores.c +++ b/test/test/test_service_cores.c @@ -131,17 +131,13 @@ static int unregister_all(void) { uint32_t i; - struct rte_service_spec *dead = (struct rte_service_spec *)0xdead; - TEST_ASSERT_EQUAL(-EINVAL, rte_service_unregister(0), - "Unregistered NULL pointer"); - TEST_ASSERT_EQUAL(-EINVAL, rte_service_unregister(dead), - "Unregistered invalid pointer"); + TEST_ASSERT_EQUAL(-EINVAL, rte_service_component_unregister(1000), + "Unregistered invalid service id"); uint32_t c = rte_service_get_count(); for (i = 0; i < c; i++) { - struct rte_service_spec *s = rte_service_get_by_id(i); - TEST_ASSERT_EQUAL(0, rte_service_unregister(s), + TEST_ASSERT_EQUAL(0, rte_service_component_unregister(i), "Error unregistering a valid service"); } -- 2.20.1