util: introduce vircgroupbackend files

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>
This commit is contained in:
Pavel Hrdina 2018-08-15 13:10:24 +02:00
parent 8b62008d2b
commit 1a2dbb5595
5 changed files with 116 additions and 0 deletions

View 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 \

View File

@ -1576,6 +1576,9 @@ virCgroupSetOwner;
virCgroupSupportsCpuBW;
virCgroupTerminateMachine;
# util/vircgroupbackend.h
virCgroupBackendGetAll;
virCgroupBackendRegister;
# util/virclosecallbacks.h
virCloseCallbacksGet;

View 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 \

View File

@ -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;
}

View File

@ -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__ */