The iterator is checked for being less than or equal to need_cpus.
The 'n' variable is incremented need_cpus + 1 times.
Simplify the computation of need_cpus and make its value one larger,
to let it be used instead of 'n' and compared without the equal sign
in loop conditions.
Just index the sum_cpu_time array instead of using a helper variable.
Start the loop at start_cpu instead of continuing for all lower values.
---
src/util/vircgroup.c | 32 +++++++++-----------------------
1 file changed, 9 insertions(+), 23 deletions(-)
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index 2272bc6..74e0907 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -2904,8 +2904,6 @@ virCgroupGetPercpuStats(virCgroupPtr group,
char *pos;
char *buf = NULL;
unsigned long long *sum_cpu_time = NULL;
- unsigned long long *sum_cpu_pos;
- unsigned int n = 0;
virTypedParameterPtr ent;
int param_idx;
unsigned long long cpu_time;
@@ -2919,14 +2917,11 @@ virCgroupGetPercpuStats(virCgroupPtr group,
}
/* To parse account file, we need to know how many cpus are present. */
- total_cpus = nodeGetCPUCount();
- if (total_cpus < 0)
+ if ((total_cpus = nodeGetCPUCount()) < 0)
return rv;
- if (ncpus == 0) {
- rv = total_cpus;
- goto cleanup;
- }
+ if (ncpus == 0)
+ return total_cpus;
if (start_cpu >= total_cpus) {
virReportError(VIR_ERR_INVALID_ARG,
@@ -2944,18 +2939,13 @@ virCgroupGetPercpuStats(virCgroupPtr group,
param_idx = 0;
/* number of cpus to compute */
- if (start_cpu >= total_cpus - ncpus)
- need_cpus = total_cpus - 1;
- else
- need_cpus = start_cpu + ncpus - 1;
+ need_cpus = MIN(total_cpus, start_cpu + ncpus);
- for (i = 0; i <= need_cpus; 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"));
goto cleanup;
- } else {
- n++;
}
if (i < start_cpu)
continue;
@@ -2970,21 +2960,17 @@ virCgroupGetPercpuStats(virCgroupPtr group,
/* return percpu vcputime in index 1 */
param_idx++;
- if (VIR_ALLOC_N(sum_cpu_time, n) < 0)
+ if (VIR_ALLOC_N(sum_cpu_time, need_cpus) < 0)
goto cleanup;
- if (virCgroupGetPercpuVcpuSum(group, nvcpupids, sum_cpu_time, n) < 0)
+ if (virCgroupGetPercpuVcpuSum(group, nvcpupids, sum_cpu_time, need_cpus) < 0)
goto cleanup;
- sum_cpu_pos = sum_cpu_time;
- for (i = 0; i <= need_cpus; i++) {
- cpu_time = *(sum_cpu_pos++);
- if (i < start_cpu)
- continue;
+ for (i = start_cpu; i < need_cpus; i++) {
if (virTypedParameterAssign(¶ms[(i - start_cpu) * nparams +
param_idx],
VIR_DOMAIN_CPU_STATS_VCPUTIME,
VIR_TYPED_PARAM_ULLONG,
- cpu_time) < 0)
+ sum_cpu_time[i]) < 0)
goto cleanup;
}
--
1.8.3.2