total_cpus is the total number of CPUs on the host
need_cpus is the number of CPUs we need to look at
(need_cpus can be larger than ncpus, because we need to look
at CPUs before the startcpu too, even if we aren't reporting
their stats)
---
src/util/vircgroup.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 7a7f52b..de57276 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -2900,7 +2900,7 @@ virCgroupGetPercpuStats(virCgroupPtr group,
{
int rv = -1;
size_t i;
- int id, max_id;
+ int need_cpus, total_cpus;
char *pos;
char *buf = NULL;
unsigned long long *sum_cpu_time = NULL;
@@ -2919,19 +2919,19 @@ virCgroupGetPercpuStats(virCgroupPtr group,
}
/* To parse account file, we need to know how many cpus are present. */
- max_id = nodeGetCPUCount();
- if (max_id < 0)
+ total_cpus = nodeGetCPUCount();
+ if (total_cpus < 0)
return rv;
- if (ncpus == 0) { /* returns max cpu ID */
- rv = max_id;
+ if (ncpus == 0) {
+ rv = total_cpus;
goto cleanup;
}
- if (start_cpu > max_id) {
+ if (start_cpu > total_cpus) {
virReportError(VIR_ERR_INVALID_ARG,
_("start_cpu %d larger than maximum of %d"),
- start_cpu, max_id);
+ start_cpu, total_cpus);
goto cleanup;
}
@@ -2944,12 +2944,12 @@ virCgroupGetPercpuStats(virCgroupPtr group,
param_idx = 0;
/* number of cpus to compute */
- if (start_cpu >= max_id - ncpus)
- id = max_id - 1;
+ if (start_cpu >= total_cpus - ncpus)
+ need_cpus = total_cpus - 1;
else
- id = start_cpu + ncpus - 1;
+ need_cpus = start_cpu + ncpus - 1;
- for (i = 0; i <= id; i++) {
+ for (i = 0; i <= need_cpus; i++) {
if (virStrToLong_ull(pos, &pos, 10, &cpu_time) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("cpuacct parse error"));
@@ -2976,7 +2976,7 @@ virCgroupGetPercpuStats(virCgroupPtr group,
goto cleanup;
sum_cpu_pos = sum_cpu_time;
- for (i = 0; i <= id; i++) {
+ for (i = 0; i <= need_cpus; i++) {
cpu_time = *(sum_cpu_pos++);
if (i < start_cpu)
continue;
--
1.8.3.2