From patchwork Tue Aug 15 12:32:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Van Haaren, Harry" X-Patchwork-Id: 27617 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 9BB1F9958; Tue, 15 Aug 2017 14:33:11 +0200 (CEST) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 9F3617D8E for ; Tue, 15 Aug 2017 14:32:57 +0200 (CEST) Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Aug 2017 05:32:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.41,377,1498546800"; d="scan'208";a="139790202" Received: from silpixa00398672.ir.intel.com ([10.237.223.128]) by fmsmga005.fm.intel.com with ESMTP; 15 Aug 2017 05:32:56 -0700 From: Harry van Haaren To: dev@dpdk.org Cc: Harry van Haaren Date: Tue, 15 Aug 2017 13:32:38 +0100 Message-Id: <1502800360-15782-7-git-send-email-harry.van.haaren@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1502800360-15782-1-git-send-email-harry.van.haaren@intel.com> References: <1502800360-15782-1-git-send-email-harry.van.haaren@intel.com> Subject: [dpdk-dev] [PATCH 6/8] service: rework unregister api to use integers X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This commit reworks the unregister API to accept an integer. Signed-off-by: Harry van Haaren --- .../common/include/rte_service_component.h | 2 +- lib/librte_eal/common/rte_service.c | 25 ++++++---------------- test/test/test_service_cores.c | 10 +++------ 3 files changed, 10 insertions(+), 27 deletions(-) diff --git a/lib/librte_eal/common/include/rte_service_component.h b/lib/librte_eal/common/include/rte_service_component.h index 5ba5cdf..70cca69 100644 --- a/lib/librte_eal/common/include/rte_service_component.h +++ b/lib/librte_eal/common/include/rte_service_component.h @@ -111,7 +111,7 @@ int32_t rte_service_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_unregister(uint32_t id); /** * @warning diff --git a/lib/librte_eal/common/rte_service.c b/lib/librte_eal/common/rte_service.c index 308ec6f..7299514 100644 --- a/lib/librte_eal/common/rte_service.c +++ b/lib/librte_eal/common/rte_service.c @@ -259,35 +259,22 @@ rte_service_register(const struct rte_service_spec *spec, uint32_t *id_ptr) } int32_t -rte_service_unregister(struct rte_service_spec *spec) +rte_service_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/test/test/test_service_cores.c b/test/test/test_service_cores.c index 4ece080..43ad027 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_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_unregister(i), "Error unregistering a valid service"); }