]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: introduce vircgroupbackend files
authorPavel Hrdina <phrdina@redhat.com>
Wed, 15 Aug 2018 11:10:24 +0000 (13:10 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Tue, 25 Sep 2018 10:37:51 +0000 (12:37 +0200)
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 <fidencio@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
src/Makefile.am
src/libvirt_private.syms
src/util/Makefile.inc.am
src/util/vircgroupbackend.c [new file with mode: 0644]
src/util/vircgroupbackend.h [new file with mode: 0644]

index 2a3ed0d42d1f6292674f70cfc5932207ecb83fe0..34656290053b9ad0dd957c5f880c399b0d359543 100644 (file)
@@ -673,6 +673,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 \
index 09f0017bee8aab7145019bb5ce50ceb37aafbe8c..33aacd204c7777c3c2b2be98e31f304a4b91d6e9 100644 (file)
@@ -1576,6 +1576,9 @@ virCgroupSetOwner;
 virCgroupSupportsCpuBW;
 virCgroupTerminateMachine;
 
+# util/vircgroupbackend.h
+virCgroupBackendGetAll;
+virCgroupBackendRegister;
 
 # util/virclosecallbacks.h
 virCloseCallbacksGet;
index a22265606c51c3447c855589f72073755ceae326..1b236ca62b6a143af59cd4fb065a5721a6225427 100644 (file)
@@ -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 (file)
index 0000000..e014bfc
--- /dev/null
@@ -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
+ * <http://www.gnu.org/licenses/>.
+ */
+#include <config.h>
+
+#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 (file)
index 0000000..db05248
--- /dev/null
@@ -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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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__ */