From: Michal Privoznik Date: Thu, 23 Apr 2026 10:05:44 +0000 (+0200) Subject: vircgroupv2: Freezer controller is implicit X-Git-Tag: v12.4.0-rc1~154 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fda330bb8a64e7fb89d46f49506a6fbd037a316b;p=thirdparty%2Flibvirt.git vircgroupv2: Freezer controller is implicit The freezer controller in CGroupsV2 is always present (under cgroup.freeze file). Make our vircgroupv2 backend aware of it. NB, because of the way our backends are ordered (v2 is prefered) the v1 freezer is never going to be used when CGroupsV2 are detected. Hence the change to tests. NB2, this also fixes output of virt-host-validate which complains that the 'freezer' controller is not present for LXC driver. Signed-off-by: Michal Privoznik Reviewed-by: Pavel Hrdina --- diff --git a/src/util/vircgroupv2.c b/src/util/vircgroupv2.c index eaf5ae98f6..3fbd67fbda 100644 --- a/src/util/vircgroupv2.c +++ b/src/util/vircgroupv2.c @@ -319,6 +319,10 @@ virCgroupV2DetectControllers(virCgroup *group, * exists with usage stats. */ group->unified.controllers |= 1 << VIR_CGROUP_CONTROLLER_CPUACCT; + /* Similarly, the freezer controller is always available via cgroup.freeze + * file. */ + group->unified.controllers |= 1 << VIR_CGROUP_CONTROLLER_FREEZER; + if (virCgroupV2DevicesAvailable(group)) group->unified.controllers |= 1 << VIR_CGROUP_CONTROLLER_DEVICES; @@ -480,6 +484,7 @@ virCgroupV2MakeGroup(virCgroup *parent, /* Controllers that are implicitly enabled if available. */ if (i == VIR_CGROUP_CONTROLLER_CPUACCT || + i == VIR_CGROUP_CONTROLLER_FREEZER || i == VIR_CGROUP_CONTROLLER_DEVICES) { continue; } diff --git a/tests/vircgroupdata/hybrid.parsed b/tests/vircgroupdata/hybrid.parsed index f755eed465..e92abacc7a 100644 --- a/tests/vircgroupdata/hybrid.parsed +++ b/tests/vircgroupdata/hybrid.parsed @@ -3,7 +3,7 @@ cpuacct cpuset /not/really/sys/fs/cgroup/cpuset memory devices -freezer /not/really/sys/fs/cgroup/freezer +freezer blkio net_cls /not/really/sys/fs/cgroup/net_cls perf_event /not/really/sys/fs/cgroup/perf_event diff --git a/tests/vircgrouptest.c b/tests/vircgrouptest.c index 0e7645af7a..eb85b6d012 100644 --- a/tests/vircgrouptest.c +++ b/tests/vircgrouptest.c @@ -529,6 +529,7 @@ static int testCgroupNewForSelfUnified(const void *args G_GNUC_UNUSED) (1 << VIR_CGROUP_CONTROLLER_CPUACCT) | (1 << VIR_CGROUP_CONTROLLER_MEMORY) | (1 << VIR_CGROUP_CONTROLLER_DEVICES) | + (1 << VIR_CGROUP_CONTROLLER_FREEZER) | (1 << VIR_CGROUP_CONTROLLER_BLKIO); if (virCgroupNewSelf(&cgroup) < 0) { @@ -547,13 +548,11 @@ static int testCgroupNewForSelfHybrid(const void *args G_GNUC_UNUSED) const char *empty[VIR_CGROUP_CONTROLLER_LAST] = { 0 }; const char *mounts[VIR_CGROUP_CONTROLLER_LAST] = { [VIR_CGROUP_CONTROLLER_CPUSET] = "/not/really/sys/fs/cgroup/cpuset", - [VIR_CGROUP_CONTROLLER_FREEZER] = "/not/really/sys/fs/cgroup/freezer", [VIR_CGROUP_CONTROLLER_NET_CLS] = "/not/really/sys/fs/cgroup/net_cls", [VIR_CGROUP_CONTROLLER_PERF_EVENT] = "/not/really/sys/fs/cgroup/perf_event", }; const char *placement[VIR_CGROUP_CONTROLLER_LAST] = { [VIR_CGROUP_CONTROLLER_CPUSET] = "/", - [VIR_CGROUP_CONTROLLER_FREEZER] = "/", [VIR_CGROUP_CONTROLLER_NET_CLS] = "/", [VIR_CGROUP_CONTROLLER_PERF_EVENT] = "/", }; @@ -562,6 +561,7 @@ static int testCgroupNewForSelfHybrid(const void *args G_GNUC_UNUSED) (1 << VIR_CGROUP_CONTROLLER_CPUACCT) | (1 << VIR_CGROUP_CONTROLLER_MEMORY) | (1 << VIR_CGROUP_CONTROLLER_DEVICES) | + (1 << VIR_CGROUP_CONTROLLER_FREEZER) | (1 << VIR_CGROUP_CONTROLLER_BLKIO); if (virCgroupNewSelf(&cgroup) < 0) { @@ -619,6 +619,7 @@ static int testCgroupNewForSelfSystemdUnified(const void *args G_GNUC_UNUSED) (1 << VIR_CGROUP_CONTROLLER_CPUACCT) | (1 << VIR_CGROUP_CONTROLLER_MEMORY) | (1 << VIR_CGROUP_CONTROLLER_DEVICES) | + (1 << VIR_CGROUP_CONTROLLER_FREEZER) | (1 << VIR_CGROUP_CONTROLLER_BLKIO); if (virCgroupNewSelf(&cgroup) < 0) {