Add get/set of cpu.shares to cgroup implementation This brings get/set of U64 out of the #if 0, which looks messier than it is. diff -r d18631472325 src/cgroup.c --- a/src/cgroup.c Tue Oct 07 08:19:56 2008 -0700 +++ b/src/cgroup.c Tue Oct 07 08:20:56 2008 -0700 @@ -224,26 +224,6 @@ return rc; } -#if 0 -/* This is included for completeness, but not yet used */ - -static int virCgroupSetValueI64(virCgroupPtr group, - const char *key, - int64_t value) -{ - char *strval = NULL; - int rc; - - if (asprintf(&strval, "%" PRIi64, value) == -1) - return -ENOMEM; - - rc = virCgroupSetValueStr(group, key, strval); - - VIR_FREE(strval); - - return rc; -} - static int virCgroupGetValueStr(virCgroupPtr group, const char *key, char **value) @@ -293,20 +273,21 @@ return rc; } -static int virCgroupGetValueU64(virCgroupPtr group, +#if 0 +/* This is included for completeness, but not yet used */ + +static int virCgroupSetValueI64(virCgroupPtr group, const char *key, - uint64_t *value) + int64_t value) { char *strval = NULL; - int rc = 0; + int rc; - rc = virCgroupGetValueStr(group, key, &strval); - if (rc != 0) - goto out; + if (asprintf(&strval, "%" PRIi64, value) == -1) + return -ENOMEM; - if (sscanf(strval, "%" SCNu64, value) != 1) - rc = -EINVAL; -out: + rc = virCgroupSetValueStr(group, key, strval); + VIR_FREE(strval); return rc; @@ -331,6 +312,25 @@ return rc; } #endif + +static int virCgroupGetValueU64(virCgroupPtr group, + const char *key, + uint64_t *value) +{ + char *strval = NULL; + int rc = 0; + + rc = virCgroupGetValueStr(group, key, &strval); + if (rc != 0) + goto out; + + if (sscanf(strval, "%" SCNu64, value) != 1) + rc = -EINVAL; +out: + VIR_FREE(strval); + + return rc; +} static int _virCgroupInherit(const char *path, const char *key) @@ -760,3 +760,13 @@ return rc; } + +int virCgroupSetCpuShares(virCgroupPtr group, unsigned long shares) +{ + return virCgroupSetValueU64(group, "cpu.shares", (uint64_t)shares); +} + +int virCgroupGetCpuShares(virCgroupPtr group, unsigned long *shares) +{ + return virCgroupGetValueU64(group, "cpu.shares", (uint64_t *)shares); +} diff -r d18631472325 src/cgroup.h --- a/src/cgroup.h Tue Oct 07 08:19:56 2008 -0700 +++ b/src/cgroup.h Tue Oct 07 08:20:56 2008 -0700 @@ -36,6 +36,9 @@ int major, int minor); +int virCgroupSetCpuShares(virCgroupPtr group, unsigned long shares); +int virCgroupGetCpuShares(virCgroupPtr group, unsigned long *shares); + int virCgroupRemove(virCgroupPtr group); void virCgroupFree(virCgroupPtr *group);