From: Ivan Kruglov Date: Mon, 7 Jul 2025 08:41:55 +0000 (-0700) Subject: core: move cpuset_build_json() to varlink-common X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fbfc4394383764fc1104b7025b0003fde93bd3a1;p=thirdparty%2Fsystemd.git core: move cpuset_build_json() to varlink-common --- diff --git a/src/core/varlink-cgroup.c b/src/core/varlink-cgroup.c index db75560ae81..d26542f0324 100644 --- a/src/core/varlink-cgroup.c +++ b/src/core/varlink-cgroup.c @@ -4,7 +4,6 @@ #include "bpf-program.h" #include "cgroup.h" -#include "cpu-set-util.h" #include "json-util.h" #include "in-addr-prefix-util.h" #include "ip-protocol-list.h" @@ -12,32 +11,7 @@ #include "set.h" #include "unit.h" #include "varlink-cgroup.h" - -static int cpu_set_build_json(sd_json_variant **ret, const char *name, void *userdata) { - _cleanup_free_ uint8_t *array = NULL; - CPUSet *cpuset = ASSERT_PTR(userdata); - size_t allocated; - int r; - - assert(ret); - assert(name); - - if (!cpuset->set) - goto empty; - - r = cpu_set_to_dbus(cpuset, &array, &allocated); - if (r < 0) - return log_debug_errno(r, "Failed to call cpu_set_to_dbus(): %m"); - - if (allocated == 0) - goto empty; - - return sd_json_variant_new_array_bytes(ret, array, allocated); - -empty: - *ret = NULL; - return 0; -} +#include "varlink-common.h" static int tasks_max_build_json(sd_json_variant **ret, const char *name, void *userdata) { CGroupTasksMax *tasks_max = ASSERT_PTR(userdata); @@ -280,8 +254,8 @@ int unit_cgroup_context_build_json(sd_json_variant **ret, const char *name, void JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("StartupCPUWeight", c->startup_cpu_weight, CGROUP_WEIGHT_INVALID), JSON_BUILD_PAIR_FINITE_USEC("CPUQuotaPerSecUSec", c->cpu_quota_per_sec_usec), JSON_BUILD_PAIR_FINITE_USEC("CPUQuotaPeriodUSec", c->cpu_quota_period_usec), - JSON_BUILD_PAIR_CALLBACK_NON_NULL("AllowedCPUs", cpu_set_build_json, &c->cpuset_cpus), - JSON_BUILD_PAIR_CALLBACK_NON_NULL("StartupAllowedCPUs", cpu_set_build_json, &c->startup_cpuset_cpus), + JSON_BUILD_PAIR_CALLBACK_NON_NULL("AllowedCPUs", cpuset_build_json, &c->cpuset_cpus), + JSON_BUILD_PAIR_CALLBACK_NON_NULL("StartupAllowedCPUs", cpuset_build_json, &c->startup_cpuset_cpus), /* Memory Accounting and Control */ SD_JSON_BUILD_PAIR_BOOLEAN("MemoryAccounting", c->memory_accounting), @@ -300,8 +274,8 @@ int unit_cgroup_context_build_json(sd_json_variant **ret, const char *name, void JSON_BUILD_PAIR_UNSIGNED_NOT_EQUAL("MemoryZSwapMax", c->memory_zswap_max, CGROUP_LIMIT_MAX), JSON_BUILD_PAIR_CONDITION_UNSIGNED(c->startup_memory_zswap_max_set, "StartupMemoryZSwapMax", c->startup_memory_zswap_max), SD_JSON_BUILD_PAIR_BOOLEAN("MemoryZSwapWriteback", c->memory_zswap_writeback), - JSON_BUILD_PAIR_CALLBACK_NON_NULL("AllowedMemoryNodes", cpu_set_build_json, &c->cpuset_mems), - JSON_BUILD_PAIR_CALLBACK_NON_NULL("StartupAllowedMemoryNodes", cpu_set_build_json, &c->startup_cpuset_mems), + JSON_BUILD_PAIR_CALLBACK_NON_NULL("AllowedMemoryNodes", cpuset_build_json, &c->cpuset_mems), + JSON_BUILD_PAIR_CALLBACK_NON_NULL("StartupAllowedMemoryNodes", cpuset_build_json, &c->startup_cpuset_mems), /* Process Accounting and Control */ SD_JSON_BUILD_PAIR_BOOLEAN("TasksAccounting", c->tasks_accounting), @@ -475,7 +449,7 @@ static int effective_cpuset_build_json(sd_json_variant **ret, const char *name, if (r < 0) return log_debug_errno(r, "Failed to get cpu set '%s': %m", cpuset_name); - return cpu_set_build_json(ret, name, &cpus); + return cpuset_build_json(ret, name, &cpus); } static inline int effective_cpus_build_json(sd_json_variant **ret, const char *name, void *userdata) { diff --git a/src/core/varlink-common.c b/src/core/varlink-common.c index eb3fafa2fa9..37d82e3fe0f 100644 --- a/src/core/varlink-common.c +++ b/src/core/varlink-common.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include "cpu-set-util.h" #include "json-util.h" #include "rlimit-util.h" #include "varlink-common.h" @@ -51,3 +52,28 @@ int rlimit_table_build_json(sd_json_variant **ret, const char *name, void *userd return 0; } + +int cpuset_build_json(sd_json_variant **ret, const char *name, void *userdata) { + _cleanup_free_ uint8_t *array = NULL; + CPUSet *cpuset = ASSERT_PTR(userdata); + size_t allocated; + int r; + + assert(ret); + + if (!cpuset->set) + goto empty; + + r = cpu_set_to_dbus(cpuset, &array, &allocated); + if (r < 0) + return log_debug_errno(r, "Failed to serialize cpu set to dbus: %m"); + + if (allocated == 0) + goto empty; + + return sd_json_variant_new_array_bytes(ret, array, allocated); + +empty: + *ret = NULL; + return 0; +} diff --git a/src/core/varlink-common.h b/src/core/varlink-common.h index 45b47cb6612..58984e35851 100644 --- a/src/core/varlink-common.h +++ b/src/core/varlink-common.h @@ -5,3 +5,4 @@ int rlimit_build_json(sd_json_variant **ret, const char *name, void *userdata); int rlimit_table_build_json(sd_json_variant **ret, const char *name, void *userdata); +int cpuset_build_json(sd_json_variant **ret, const char *name, void *userdata);