On Tue, Sep 18, 2018 at 5:45 PM, Pavel Hrdina <phrd...@redhat.com> wrote:
> 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-exit. > typo: co-exit -> co-exist > > Signed-off-by: Pavel Hrdina <phrd...@redhat.com> > Reviewed-by: Fabiano Fidêncio <fiden...@redhat.com> > --- > 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 2a3ed0d42d..3465629005 100644 > --- a/src/Makefile.am > +++ b/src/Makefile.am > @@ -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 \ > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 75c59fbf89..eb302b3559 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -1576,6 +1576,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 a22265606c..1b236ca62b 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 > + * <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 > 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 > + * <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__ */ > -- > 2.17.1 > > -- > libvir-list mailing list > libvir-list@redhat.com > https://www.redhat.com/mailman/listinfo/libvir-list >
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list