int
virCgroupSetMemory(virCgroupPtr group, unsigned long long kb)
{
- unsigned long long maxkb = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
-
- if (kb > maxkb) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("Memory '%llu' must be less than %llu"),
- kb, maxkb);
- return -1;
- }
-
- if (kb == maxkb)
- return virCgroupSetValueI64(group,
- VIR_CGROUP_CONTROLLER_MEMORY,
- "memory.limit_in_bytes",
- -1);
- else
- return virCgroupSetValueU64(group,
- VIR_CGROUP_CONTROLLER_MEMORY,
- "memory.limit_in_bytes",
- kb << 10);
+ VIR_CGROUP_BACKEND_CALL(group, setMemory, -1, kb);
}
const char *path,
unsigned long long *wbps);
+typedef int
+(*virCgroupSetMemoryCB)(virCgroupPtr group,
+ unsigned long long kb);
+
struct _virCgroupBackend {
virCgroupBackendType type;
virCgroupGetBlkioDeviceReadBpsCB getBlkioDeviceReadBps;
virCgroupSetBlkioDeviceWriteBpsCB setBlkioDeviceWriteBps;
virCgroupGetBlkioDeviceWriteBpsCB getBlkioDeviceWriteBps;
+
+ virCgroupSetMemoryCB setMemory;
};
typedef struct _virCgroupBackend virCgroupBackend;
typedef virCgroupBackend *virCgroupBackendPtr;
}
+static int
+virCgroupV1SetMemory(virCgroupPtr group,
+ unsigned long long kb)
+{
+ unsigned long long maxkb = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
+
+ if (kb > maxkb) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("Memory '%llu' must be less than %llu"),
+ kb, maxkb);
+ return -1;
+ }
+
+ if (kb == maxkb)
+ return virCgroupSetValueI64(group,
+ VIR_CGROUP_CONTROLLER_MEMORY,
+ "memory.limit_in_bytes",
+ -1);
+ else
+ return virCgroupSetValueU64(group,
+ VIR_CGROUP_CONTROLLER_MEMORY,
+ "memory.limit_in_bytes",
+ kb << 10);
+}
+
+
virCgroupBackend virCgroupV1Backend = {
.type = VIR_CGROUP_BACKEND_TYPE_V1,
.getBlkioDeviceReadBps = virCgroupV1GetBlkioDeviceReadBps,
.setBlkioDeviceWriteBps = virCgroupV1SetBlkioDeviceWriteBps,
.getBlkioDeviceWriteBps = virCgroupV1GetBlkioDeviceWriteBps,
+
+ .setMemory = virCgroupV1SetMemory,
};