From 2396295b2654156d62165bc1d94e2a3f4d1e4733 Mon Sep 17 00:00:00 2001 Message-Id: <2396295b2654156d62165bc1d94e2a3f4d1e4733@dist-git> From: Pavel Hrdina Date: Mon, 1 Jul 2019 17:06:21 +0200 Subject: [PATCH] util: introduce vircgroupbackend files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We will need to extract current cgroup v1 implementation into separate backend because there will be new cgroup v2 implementation and both will have to co-exist. Reviewed-by: Fabiano Fidêncio Reviewed-by: Ján Tomko Signed-off-by: Pavel Hrdina (cherry picked from commit 1a2dbb5595871efa8de1ed258d94f0b60561a040) Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689297 Signed-off-by: Pavel Hrdina Message-Id: Reviewed-by: Ján Tomko --- src/Makefile.am | 1 + src/libvirt_private.syms | 3 ++ src/util/Makefile.inc.am | 2 ++ src/util/vircgroupbackend.c | 64 +++++++++++++++++++++++++++++++++++++ src/util/vircgroupbackend.h | 46 ++++++++++++++++++++++++++ 5 files changed, 116 insertions(+) create mode 100644 src/util/vircgroupbackend.c create mode 100644 src/util/vircgroupbackend.h diff --git a/src/Makefile.am b/src/Makefile.am index db8c8ebd1a..c4e797f5a2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -678,6 +678,7 @@ libvirt_setuid_rpc_client_la_SOURCES = \ util/virbitmap.c \ util/virbuffer.c \ util/vircgroup.c \ + util/vircgroupbackend.c \ util/vircommand.c \ util/virconf.c \ util/virdbus.c \ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8c4be84fd5..627eb5e587 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1591,6 +1591,9 @@ virCgroupSetOwner; virCgroupSupportsCpuBW; virCgroupTerminateMachine; +# util/vircgroupbackend.h +virCgroupBackendGetAll; +virCgroupBackendRegister; # util/virclosecallbacks.h virCloseCallbacksGet; diff --git a/src/util/Makefile.inc.am b/src/util/Makefile.inc.am index 2cef465208..a9185bd7b7 100644 --- a/src/util/Makefile.inc.am +++ b/src/util/Makefile.inc.am @@ -23,6 +23,8 @@ UTIL_SOURCES = \ util/virperf.h \ util/vircgroup.c \ util/vircgroup.h util/vircgrouppriv.h \ + util/vircgroupbackend.c \ + util/vircgroupbackend.h \ util/virclosecallbacks.c \ util/virclosecallbacks.h \ util/vircommand.c \ diff --git a/src/util/vircgroupbackend.c b/src/util/vircgroupbackend.c new file mode 100644 index 0000000000..e014bfc0e6 --- /dev/null +++ b/src/util/vircgroupbackend.c @@ -0,0 +1,64 @@ +/* + * vircgroupbackend.c: methods for cgroups backend + * + * Copyright (C) 2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ +#include + +#include "vircgroupbackend.h" +#include "virerror.h" +#include "virthread.h" + +#define VIR_FROM_THIS VIR_FROM_CGROUP + +VIR_ENUM_DECL(virCgroupBackend); +VIR_ENUM_IMPL(virCgroupBackend, VIR_CGROUP_BACKEND_TYPE_LAST, + "cgroup V1"); + +static virOnceControl virCgroupBackendOnce = VIR_ONCE_CONTROL_INITIALIZER; +static virCgroupBackendPtr virCgroupBackends[VIR_CGROUP_BACKEND_TYPE_LAST] = { 0 }; + +void +virCgroupBackendRegister(virCgroupBackendPtr backend) +{ + if (virCgroupBackends[backend->type]) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Cgroup backend '%s' already registered."), + virCgroupBackendTypeToString(backend->type)); + return; + } + + virCgroupBackends[backend->type] = backend; +} + + +static void +virCgroupBackendOnceInit(void) +{ +} + + +virCgroupBackendPtr * +virCgroupBackendGetAll(void) +{ + if (virOnce(&virCgroupBackendOnce, virCgroupBackendOnceInit) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Failed to initialize cgroup backend.")); + return NULL; + } + return virCgroupBackends; +} diff --git a/src/util/vircgroupbackend.h b/src/util/vircgroupbackend.h new file mode 100644 index 0000000000..db052485a8 --- /dev/null +++ b/src/util/vircgroupbackend.h @@ -0,0 +1,46 @@ +/* + * vircgroupbackend.h: methods for cgroups backend + * + * Copyright (C) 2018 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#ifndef __VIR_CGROUP_BACKEND_H__ +# define __VIR_CGROUP_BACKEND_H__ + +# include "internal.h" + +# include "vircgroup.h" + + +typedef enum { + VIR_CGROUP_BACKEND_TYPE_V1 = 0, + VIR_CGROUP_BACKEND_TYPE_LAST, +} virCgroupBackendType; + +struct _virCgroupBackend { + virCgroupBackendType type; +}; +typedef struct _virCgroupBackend virCgroupBackend; +typedef virCgroupBackend *virCgroupBackendPtr; + +void +virCgroupBackendRegister(virCgroupBackendPtr backend); + +virCgroupBackendPtr * +virCgroupBackendGetAll(void); + +#endif /* __VIR_CGROUP_BACKEND_H__ */ -- 2.22.0