get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/136847/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 136847,
    "url": "http://patches.dpdk.org/api/patches/136847/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20240216102348.480407-3-mattias.ronnblom@ericsson.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20240216102348.480407-3-mattias.ronnblom@ericsson.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240216102348.480407-3-mattias.ronnblom@ericsson.com",
    "date": "2024-02-16T10:23:47",
    "name": "[RFC,v4,3/4] service: use multi-word bitset to represent service flags",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "0617e9bccd1d3c9154bf509b8416fca25bd0ad63",
    "submitter": {
        "id": 1077,
        "url": "http://patches.dpdk.org/api/people/1077/?format=api",
        "name": "Mattias Rönnblom",
        "email": "mattias.ronnblom@ericsson.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20240216102348.480407-3-mattias.ronnblom@ericsson.com/mbox/",
    "series": [
        {
            "id": 30953,
            "url": "http://patches.dpdk.org/api/series/30953/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30953",
            "date": "2024-01-31T13:13:01",
            "name": "[RFC,v3] eal: add bitset type",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/30953/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/136847/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/136847/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id A299E43B30;\n\tFri, 16 Feb 2024 11:31:49 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8B1674064A;\n\tFri, 16 Feb 2024 11:31:49 +0100 (CET)",
            "from EUR01-HE1-obe.outbound.protection.outlook.com\n (mail-he1eur01on2073.outbound.protection.outlook.com [40.107.13.73])\n by mails.dpdk.org (Postfix) with ESMTP id 4B389402DD\n for <dev@dpdk.org>; Fri, 16 Feb 2024 11:31:48 +0100 (CET)",
            "from AS8P189CA0006.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:31f::33)\n by AM7PR07MB6358.eurprd07.prod.outlook.com (2603:10a6:20b:134::8)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.31; Fri, 16 Feb\n 2024 10:31:46 +0000",
            "from AM2PEPF0001C70F.eurprd05.prod.outlook.com\n (2603:10a6:20b:31f:cafe::19) by AS8P189CA0006.outlook.office365.com\n (2603:10a6:20b:31f::33) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7292.26 via Frontend\n Transport; Fri, 16 Feb 2024 10:31:46 +0000",
            "from oa.msg.ericsson.com (192.176.1.74) by\n AM2PEPF0001C70F.mail.protection.outlook.com (10.167.16.203) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.7292.25 via Frontend Transport; Fri, 16 Feb 2024 10:31:46 +0000",
            "from seliicinfr00050.seli.gic.ericsson.se (153.88.142.248) by\n smtp-central.internal.ericsson.com (100.87.178.69) with Microsoft SMTP Server\n id 15.2.1258.12; Fri, 16 Feb 2024 11:31:45 +0100",
            "from breslau.. (seliicwb00002.seli.gic.ericsson.se [10.156.25.100])\n by seliicinfr00050.seli.gic.ericsson.se (Postfix) with ESMTP id\n 9EBA61C0084; Fri, 16 Feb 2024 11:31:45 +0100 (CET)"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=WBigcws+lQyqJyYTGwf4f6FpiJv2wrgNCbQCDeRF9eD4pnlORl4eL28MHqPUMfwtJLq+VqT8Th+64XwLUnVjhuq/R0a9tRYNx/wLhAkiOoL4486+OcXXJ99Vl8NkAI6Zylii+/VqsYQglOCeTZDDB7MeUWbzpFnJ45OOtUMUJQBczVEpmdK3COBK3IHJUgc2OxPHJ2dh4or3+QDltgYcbBNRoG7G0gCLt++3Hq3Ni8ja9PcNXDzZaVCnOuXLfF3+WjyJc1VY5tP5Axsj6UsuxD0DoxF5aS/mh8du6x5y8v7Z1EXL8VFdZvJbNEeVffEuIcRBe88S6zJMm3V7+nTEMw==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=LF27ZtakQd1w3JbLIS/PV/zEOprNrFh4tTBt8lW4GMY=;\n b=Qd3LPrKLfyhxrhnx6tT5nxfEJV3saae0xdogUjuzjrkqoulaeurPmw27AmynxpTRonQdloUk6pSREnoDju53IY/bZ91Njw7KmH1CHvpS3z0Qfvv4wq2ykzJfbAoEkuT2Frw9rbUU/UZDOPZ8cb1xwrsEQFlbv5s4X4xQRSznb+d7NM6tz58c9i/DkvQWj+R63GUwht6ZEP+KYsGQkafhG3/jpCGq/P+ZlFV/++JSWoMdmth29CvQ58Lc4cmrg9FZlybThQgqaRG+M1bPAHgxjin9Th0v+QsjdbmYalo7k5CddqRmEmlrt4oS2zVQmw31NbSg4CS4QZIiHBcWs05fJA==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com;\n dkim=none (message not signed); arc=none (0)",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=LF27ZtakQd1w3JbLIS/PV/zEOprNrFh4tTBt8lW4GMY=;\n b=bqMpwDrtfbfWJj4ZGrNCISbrP+7Putn0KMFihCDexGLOlOTkuxjuNDoioyg56WbKims7i5dgLgnaVqgv5F0cA2gn9DW8GZRYnwXyrIOeg6WNviWTlIaa6hkTXBqp7RIElG399U21x4MZ/Vs1FJ6/M8rJ6NI6BeAlcObEGOWEJc82VNVlxqqapZWJLfk6GejqPW7SRaYa5osT0Z1mWfdHfG9rXMIcF7ONTcDTaQId9MGqaXGKZN1tVHXR44P/S75LI6aHNZow4/62oiwv5h5TZeJfdPqajgLyx/3nWqMMvkft4ALtenvTl/zXPmIIauZL4slsqrgw0hF7IeXNNL3ZYw==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 192.176.1.74)\n smtp.mailfrom=ericsson.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=ericsson.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of ericsson.com designates\n 192.176.1.74 as permitted sender)\n receiver=protection.outlook.com;\n client-ip=192.176.1.74; helo=oa.msg.ericsson.com; pr=C",
        "From": "=?utf-8?q?Mattias_R=C3=B6nnblom?= <mattias.ronnblom@ericsson.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<hofors@lysator.liu.se>,\n =?utf-8?q?Morten_Br=C3=B8rup?= <mb@smartsharesystems.com>,\n Tyler Retzlaff <roretzla@linux.microsoft.com>,\n Stephen Hemminger <stephen@networkplumber.org>,\n Harry van Haaren <harry.van.haaren@intel.com>, =?utf-8?q?Mattias_R=C3=B6nnb?=\n\t=?utf-8?q?lom?= <mattias.ronnblom@ericsson.com>",
        "Subject": "[RFC v4 3/4] service: use multi-word bitset to represent service\n flags",
        "Date": "Fri, 16 Feb 2024 11:23:47 +0100",
        "Message-ID": "<20240216102348.480407-3-mattias.ronnblom@ericsson.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20240216102348.480407-1-mattias.ronnblom@ericsson.com>",
        "References": "<20240131131301.418361-1-mattias.ronnblom@ericsson.com>\n <20240216102348.480407-1-mattias.ronnblom@ericsson.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "AM2PEPF0001C70F:EE_|AM7PR07MB6358:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "fb97e5c3-22c2-4193-2858-08dc2eda7a13",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n xtUxRX084LeoNUeF4umWOkcXCh11L69BHVrVCoe74S745zPGerAx+tXQL8KcG8aHXIloHdOhNJ7aFWDV8g4Csz5Xx2YEqxaNtTFqHa5DJJbLFg0fM6LH2PMwyMF17shViM0T5xong0lFWwF1TaMfTcknPKvusFK5der24/vKLwJQnahzE1AQvP3BzQ7KLCykZQsJtXxFggbL4SRKkegIDSJFQYqpzAqXXLgAX4fp3lbfgfxGoMq/xM1uQWJrKsSkhiituhm45+AUm3B6xJe1ifwEZubRvvGhztQ4NlKqH9KfLclDf5vIplpG1Tz2+ZEXV3ORBHwBscRnhHX0IS2vIBTJCJbfb4QCw87gaDyOuFJI7S7iCpp6scDOBpef0JDaMLUlxJOW+ASvxg9e1eFKFlhESxX0VC75EMSS7vz9h66K+TlAkkchUjI3zEN/N4HkUlUp/TUGyXTzKxzM3+i7eOH7FitmG/8m1zreuPagvgDHEoLT89ctbTcD7DEppVmFjjaWeoaYZYi3IkgIc4Hx2ddIa3SzGcCy+tw3U00MYk7FdsMdJHG2ga0r8Z3PyqGvey0KhSrnESPWfKPa72McrHW0dH5XP222lMNksPqNkvsmHrFru8av2T0CwCI2n3m5DWTUkiCjCeL403lkkrL3pMoRW9aNBt18swhSlqTzvGc=",
        "X-Forefront-Antispam-Report": "CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net;\n CAT:NONE;\n SFS:(13230031)(4636009)(346002)(396003)(39860400002)(376002)(136003)(230922051799003)(64100799003)(1800799012)(451199024)(186009)(82310400011)(36860700004)(46966006)(40470700004)(4326008)(8936002)(8676002)(6916009)(5660300002)(2906002)(2616005)(41300700001)(26005)(1076003)(36756003)(478600001)(107886003)(82960400001)(356005)(82740400003)(7636003)(83380400001)(66574015)(6266002)(336012)(86362001)(70206006)(70586007)(316002)(54906003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "ericsson.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Feb 2024 10:31:46.4966 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n fb97e5c3-22c2-4193-2858-08dc2eda7a13",
        "X-MS-Exchange-CrossTenant-Id": "92e84ceb-fbfd-47ab-be52-080c6b87953f",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74];\n Helo=[oa.msg.ericsson.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n AM2PEPF0001C70F.eurprd05.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM7PR07MB6358",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Use a multi-word bitset to track which services are mapped to which\nlcores, allowing the RTE_SERVICE_NUM_MAX compile-time constant to be >\n64.\n\nReplace array-of-bytes service-currently-active flags with a more\ncompact multi-word bitset-based representation, reducing memory\nfootprint somewhat.\n\nSigned-off-by: Mattias Rönnblom <mattias.ronnblom@ericsson.com>\n---\n lib/eal/common/rte_service.c | 70 ++++++++++++++----------------------\n 1 file changed, 27 insertions(+), 43 deletions(-)",
    "diff": "diff --git a/lib/eal/common/rte_service.c b/lib/eal/common/rte_service.c\nindex d959c91459..ac96ecaca8 100644\n--- a/lib/eal/common/rte_service.c\n+++ b/lib/eal/common/rte_service.c\n@@ -11,6 +11,7 @@\n \n #include <eal_trace_internal.h>\n #include <rte_lcore.h>\n+#include <rte_bitset.h>\n #include <rte_branch_prediction.h>\n #include <rte_common.h>\n #include <rte_cycles.h>\n@@ -63,11 +64,11 @@ struct service_stats {\n /* the internal values of a service core */\n struct core_state {\n \t/* map of services IDs are run on this core */\n-\tuint64_t service_mask;\n+\tRTE_BITSET_DECLARE(mapped_services, RTE_SERVICE_NUM_MAX);\n \tRTE_ATOMIC(uint8_t) runstate; /* running or stopped */\n \tRTE_ATOMIC(uint8_t) thread_active; /* indicates when thread is in service_run() */\n \tuint8_t is_service_core; /* set if core is currently a service core */\n-\tuint8_t service_active_on_lcore[RTE_SERVICE_NUM_MAX];\n+\tRTE_BITSET_DECLARE(service_active_on_lcore, RTE_SERVICE_NUM_MAX);\n \tRTE_ATOMIC(uint64_t) loops;\n \tRTE_ATOMIC(uint64_t) cycles;\n \tstruct service_stats service_stats[RTE_SERVICE_NUM_MAX];\n@@ -81,11 +82,6 @@ static uint32_t rte_service_library_initialized;\n int32_t\n rte_service_init(void)\n {\n-\t/* Hard limit due to the use of an uint64_t-based bitmask (and the\n-\t * clzl intrinsic).\n-\t */\n-\tRTE_BUILD_BUG_ON(RTE_SERVICE_NUM_MAX > 64);\n-\n \tif (rte_service_library_initialized) {\n \t\tEAL_LOG(NOTICE,\n \t\t\t\"service library init() called, init flag %d\",\n@@ -296,7 +292,7 @@ rte_service_component_unregister(uint32_t id)\n \n \t/* clear the run-bit in all cores */\n \tfor (i = 0; i < RTE_MAX_LCORE; i++)\n-\t\tlcore_states[i].service_mask &= ~(UINT64_C(1) << id);\n+\t\trte_bitset_clear(lcore_states[i].mapped_services, id);\n \n \tmemset(&rte_services[id], 0, sizeof(struct rte_service_spec_impl));\n \n@@ -410,7 +406,7 @@ service_runner_do_callback(struct rte_service_spec_impl *s,\n \n /* Expects the service 's' is valid. */\n static int32_t\n-service_run(uint32_t i, struct core_state *cs, uint64_t service_mask,\n+service_run(uint32_t i, struct core_state *cs, const uint64_t *mapped_services,\n \t    struct rte_service_spec_impl *s, uint32_t serialize_mt_unsafe)\n {\n \tif (!s)\n@@ -424,12 +420,12 @@ service_run(uint32_t i, struct core_state *cs, uint64_t service_mask,\n \t\t\tRUNSTATE_RUNNING ||\n \t    rte_atomic_load_explicit(&s->app_runstate, rte_memory_order_acquire) !=\n \t\t\tRUNSTATE_RUNNING ||\n-\t    !(service_mask & (UINT64_C(1) << i))) {\n-\t\tcs->service_active_on_lcore[i] = 0;\n+\t    !rte_bitset_test(mapped_services, i)) {\n+\t\trte_bitset_clear(cs->service_active_on_lcore, i);\n \t\treturn -ENOEXEC;\n \t}\n \n-\tcs->service_active_on_lcore[i] = 1;\n+\trte_bitset_set(cs->service_active_on_lcore, i);\n \n \tif ((service_mt_safe(s) == 0) && (serialize_mt_unsafe == 1)) {\n \t\tif (!rte_spinlock_trylock(&s->execute_lock))\n@@ -454,7 +450,7 @@ rte_service_may_be_active(uint32_t id)\n \t\treturn -EINVAL;\n \n \tfor (i = 0; i < lcore_count; i++) {\n-\t\tif (lcore_states[ids[i]].service_active_on_lcore[id])\n+\t\tif (rte_bitset_test(lcore_states[ids[i]].service_active_on_lcore, id))\n \t\t\treturn 1;\n \t}\n \n@@ -474,7 +470,9 @@ rte_service_run_iter_on_app_lcore(uint32_t id, uint32_t serialize_mt_unsafe)\n \t */\n \trte_atomic_fetch_add_explicit(&s->num_mapped_cores, 1, rte_memory_order_relaxed);\n \n-\tint ret = service_run(id, cs, UINT64_MAX, s, serialize_mt_unsafe);\n+\tRTE_BITSET_DECLARE(all_services, RTE_SERVICE_NUM_MAX);\n+\trte_bitset_set_all(all_services, RTE_SERVICE_NUM_MAX);\n+\tint ret = service_run(id, cs, all_services, s, serialize_mt_unsafe);\n \n \trte_atomic_fetch_sub_explicit(&s->num_mapped_cores, 1, rte_memory_order_relaxed);\n \n@@ -485,7 +483,6 @@ static int32_t\n service_runner_func(void *arg)\n {\n \tRTE_SET_USED(arg);\n-\tuint8_t i;\n \tconst int lcore = rte_lcore_id();\n \tstruct core_state *cs = &lcore_states[lcore];\n \n@@ -497,20 +494,11 @@ service_runner_func(void *arg)\n \t */\n \twhile (rte_atomic_load_explicit(&cs->runstate, rte_memory_order_acquire) ==\n \t\t\tRUNSTATE_RUNNING) {\n+\t\tssize_t id;\n \n-\t\tconst uint64_t service_mask = cs->service_mask;\n-\t\tuint8_t start_id;\n-\t\tuint8_t end_id;\n-\n-\t\tif (service_mask == 0)\n-\t\t\tcontinue;\n-\n-\t\tstart_id = rte_ctz64(service_mask);\n-\t\tend_id = 64 - rte_clz64(service_mask);\n-\n-\t\tfor (i = start_id; i < end_id; i++) {\n+\t\tRTE_BITSET_FOREACH_SET(id, cs->mapped_services, RTE_SERVICE_NUM_MAX) {\n \t\t\t/* return value ignored as no change to code flow */\n-\t\t\tservice_run(i, cs, service_mask, service_get(i), 1);\n+\t\t\tservice_run(id, cs, cs->mapped_services, service_get(id), 1);\n \t\t}\n \n \t\trte_atomic_store_explicit(&cs->loops, cs->loops + 1, rte_memory_order_relaxed);\n@@ -519,8 +507,7 @@ service_runner_func(void *arg)\n \t/* Switch off this core for all services, to ensure that future\n \t * calls to may_be_active() know this core is switched off.\n \t */\n-\tfor (i = 0; i < RTE_SERVICE_NUM_MAX; i++)\n-\t\tcs->service_active_on_lcore[i] = 0;\n+\trte_bitset_clear_all(cs->service_active_on_lcore, RTE_SERVICE_NUM_MAX);\n \n \t/* Use SEQ CST memory ordering to avoid any re-ordering around\n \t * this store, ensuring that once this store is visible, the service\n@@ -586,7 +573,7 @@ rte_service_lcore_count_services(uint32_t lcore)\n \tif (!cs->is_service_core)\n \t\treturn -ENOTSUP;\n \n-\treturn rte_popcount64(cs->service_mask);\n+\treturn rte_bitset_count_set(cs->mapped_services, RTE_SERVICE_NUM_MAX);\n }\n \n int32_t\n@@ -639,25 +626,23 @@ service_update(uint32_t sid, uint32_t lcore, uint32_t *set, uint32_t *enabled)\n \t\t\t!lcore_states[lcore].is_service_core)\n \t\treturn -EINVAL;\n \n-\tuint64_t sid_mask = UINT64_C(1) << sid;\n \tif (set) {\n-\t\tuint64_t lcore_mapped = lcore_states[lcore].service_mask &\n-\t\t\tsid_mask;\n+\t\tuint64_t lcore_mapped = rte_bitset_test(lcore_states[lcore].mapped_services, sid);\n \n \t\tif (*set && !lcore_mapped) {\n-\t\t\tlcore_states[lcore].service_mask |= sid_mask;\n+\t\t\trte_bitset_set(lcore_states[lcore].mapped_services, sid);\n \t\t\trte_atomic_fetch_add_explicit(&rte_services[sid].num_mapped_cores,\n \t\t\t\t1, rte_memory_order_relaxed);\n \t\t}\n \t\tif (!*set && lcore_mapped) {\n-\t\t\tlcore_states[lcore].service_mask &= ~(sid_mask);\n+\t\t\trte_bitset_clear(lcore_states[lcore].mapped_services, sid);\n \t\t\trte_atomic_fetch_sub_explicit(&rte_services[sid].num_mapped_cores,\n \t\t\t\t1, rte_memory_order_relaxed);\n \t\t}\n \t}\n \n \tif (enabled)\n-\t\t*enabled = !!(lcore_states[lcore].service_mask & (sid_mask));\n+\t\t*enabled = rte_bitset_test(lcore_states[lcore].mapped_services, sid);\n \n \treturn 0;\n }\n@@ -699,11 +684,11 @@ set_lcore_state(uint32_t lcore, int32_t state)\n int32_t\n rte_service_lcore_reset_all(void)\n {\n-\t/* loop over cores, reset all to mask 0 */\n+\t/* loop over cores, reset all mapped services */\n \tuint32_t i;\n \tfor (i = 0; i < RTE_MAX_LCORE; i++) {\n \t\tif (lcore_states[i].is_service_core) {\n-\t\t\tlcore_states[i].service_mask = 0;\n+\t\t\trte_bitset_clear_all(lcore_states[i].mapped_services, RTE_SERVICE_NUM_MAX);\n \t\t\tset_lcore_state(i, ROLE_RTE);\n \t\t\t/* runstate act as guard variable Use\n \t\t\t * store-release memory order here to synchronize\n@@ -731,7 +716,7 @@ rte_service_lcore_add(uint32_t lcore)\n \tset_lcore_state(lcore, ROLE_SERVICE);\n \n \t/* ensure that after adding a core the mask and state are defaults */\n-\tlcore_states[lcore].service_mask = 0;\n+\trte_bitset_clear_all(lcore_states[lcore].mapped_services, RTE_SERVICE_NUM_MAX);\n \t/* Use store-release memory order here to synchronize with\n \t * load-acquire in runstate read functions.\n \t */\n@@ -814,12 +799,11 @@ rte_service_lcore_stop(uint32_t lcore)\n \n \tuint32_t i;\n \tstruct core_state *cs = &lcore_states[lcore];\n-\tuint64_t service_mask = cs->service_mask;\n \n \tfor (i = 0; i < RTE_SERVICE_NUM_MAX; i++) {\n-\t\tint32_t enabled = service_mask & (UINT64_C(1) << i);\n-\t\tint32_t service_running = rte_service_runstate_get(i);\n-\t\tint32_t only_core = (1 ==\n+\t\tbool enabled = rte_bitset_test(cs->mapped_services, i);\n+\t\tbool service_running = rte_service_runstate_get(i);\n+\t\tbool only_core = (1 ==\n \t\t\trte_atomic_load_explicit(&rte_services[i].num_mapped_cores,\n \t\t\t\trte_memory_order_relaxed));\n \n",
    "prefixes": [
        "RFC",
        "v4",
        "3/4"
    ]
}