There's no point producing a long chain of zeroes when the previously
calculated total value was zero. To guard against mistakenly skipping
non-zero individual fields, widen "sum" to "unsigned long long".
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/tools/misc/xenperf.c
+++ b/tools/misc/xenperf.c
@@ -76,7 +76,7 @@ int main(int argc, char *argv[])
DECLARE_HYPERCALL_BUFFER(xc_perfc_val_t, pcv);
xc_perfc_val_t *val;
int num_desc, num_val;
- unsigned int sum, reset = 0, full = 0, pretty = 0;
+ unsigned int reset = 0, full = 0, pretty = 0;
char hypercall_name[36];
if ( argc > 1 )
@@ -158,14 +158,15 @@ int main(int argc, char *argv[])
val = pcv;
for ( i = 0; i < num_desc; i++ )
{
+ unsigned long long sum = 0;
+
printf ("%-35s ", pcd[i].name);
- sum = 0;
for ( j = 0; j < pcd[i].nr_vals; j++ )
sum += val[j];
- printf ("T=%10u ", (unsigned int)sum);
+ printf("T=%10llu ", sum);
- if ( full || (pcd[i].nr_vals <= 4) )
+ if ( sum && (full || (pcd[i].nr_vals <= 4)) )
{
if ( pretty && (strcmp(pcd[i].name, "hypercalls") == 0) )
{