2013-06-15 10:15:30

by Riccardo Magliocchetti

[permalink] [raw]
Subject: [PATCH] perf: fix bench numa compilation

bench/numa.c: In function ‘worker_thread’:
bench/numa.c:1113:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
if (diff.tv_sec >= g->p.nr_secs) {
^
bench/numa.c:1161:6: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘u64’ [-Werror=format=]
process_nr, thread_nr, runtime_ns_max / bytes_done, val);
^

Signed-off-by: Riccardo Magliocchetti <[email protected]>
---
tools/perf/bench/numa.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

Diffed against 3.9.6 but should apply cleanly to latest git

diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
index 30d1c32..90ef4cc 100644
--- a/tools/perf/bench/numa.c
+++ b/tools/perf/bench/numa.c
@@ -1110,7 +1110,7 @@ static void *worker_thread(void *__tdata)
/* Check whether our max runtime timed out: */
if (g->p.nr_secs) {
timersub(&stop, &start0, &diff);
- if (diff.tv_sec >= g->p.nr_secs) {
+ if (diff.tv_sec >= (long int)g->p.nr_secs) {
g->stop_work = true;
break;
}
@@ -1157,7 +1157,7 @@ static void *worker_thread(void *__tdata)
runtime_ns_max += diff.tv_usec * 1000;

if (details >= 0) {
- printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016lx]\n",
+ printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016llx]\n",
process_nr, thread_nr, runtime_ns_max / bytes_done, val);
}
fflush(stdout);
--
1.8.3.1


2013-06-17 08:55:46

by Namhyung Kim

[permalink] [raw]
Subject: Re: [PATCH] perf: fix bench numa compilation

Hi Riccardo,

On Sat, 15 Jun 2013 12:15:14 +0200, Riccardo Magliocchetti wrote:
> bench/numa.c: In function ‘worker_thread’:
> bench/numa.c:1113:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
> if (diff.tv_sec >= g->p.nr_secs) {
> ^
> bench/numa.c:1161:6: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘u64’ [-Werror=format=]
> process_nr, thread_nr, runtime_ns_max / bytes_done, val);
> ^
>
> Signed-off-by: Riccardo Magliocchetti <[email protected]>
> ---
> tools/perf/bench/numa.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> Diffed against 3.9.6 but should apply cleanly to latest git
>
> diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
> index 30d1c32..90ef4cc 100644
> --- a/tools/perf/bench/numa.c
> +++ b/tools/perf/bench/numa.c
> @@ -1110,7 +1110,7 @@ static void *worker_thread(void *__tdata)
> /* Check whether our max runtime timed out: */
> if (g->p.nr_secs) {
> timersub(&stop, &start0, &diff);
> - if (diff.tv_sec >= g->p.nr_secs) {
> + if (diff.tv_sec >= (long int)g->p.nr_secs) {
> g->stop_work = true;
> break;
> }
> @@ -1157,7 +1157,7 @@ static void *worker_thread(void *__tdata)
> runtime_ns_max += diff.tv_usec * 1000;
>
> if (details >= 0) {
> - printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016lx]\n",
> + printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016llx]\n",
> process_nr, thread_nr, runtime_ns_max / bytes_done, val);
> }
> fflush(stdout);

It will fail to build on 64 bit machines:

bench/numa.c: In function ‘worker_thread’:
bench/numa.c:1161:6: error: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 5 has type ‘u64’ [-Werror=format]
cc1: all warnings being treated as errors
make: *** [bench/numa.o] Error 1


You can use PRIx64 or cast val to unsigned long long type explicitly.

Thanks,
Namhyung

2013-06-17 10:55:22

by Riccardo Magliocchetti

[permalink] [raw]
Subject: [PATCH] perf: fix bench numa compilation

Fix the following errors on gcc 4.8.1 / x86:

bench/numa.c: In function ‘worker_thread’:
bench/numa.c:1113:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
if (diff.tv_sec >= g->p.nr_secs) {
^
bench/numa.c:1161:6: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘u64’ [-Werror=format=]
process_nr, thread_nr, runtime_ns_max / bytes_done, val);
^

Signed-off-by: Riccardo Magliocchetti <[email protected]>
---
tools/perf/bench/numa.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

changes from v1:
- make it actually work on 64bit too as reported by Namhyung Kim

diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
index 30d1c32..bd501454 100644
--- a/tools/perf/bench/numa.c
+++ b/tools/perf/bench/numa.c
@@ -1110,7 +1110,7 @@ static void *worker_thread(void *__tdata)
/* Check whether our max runtime timed out: */
if (g->p.nr_secs) {
timersub(&stop, &start0, &diff);
- if (diff.tv_sec >= g->p.nr_secs) {
+ if (diff.tv_sec >= (long int)g->p.nr_secs) {
g->stop_work = true;
break;
}
@@ -1157,8 +1157,8 @@ static void *worker_thread(void *__tdata)
runtime_ns_max += diff.tv_usec * 1000;

if (details >= 0) {
- printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016lx]\n",
- process_nr, thread_nr, runtime_ns_max / bytes_done, val);
+ printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016llx]\n",
+ process_nr, thread_nr, runtime_ns_max / bytes_done, (unsigned long long)val);
}
fflush(stdout);
}
--
1.8.3.1

2013-06-19 17:23:18

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] perf: fix bench numa compilation

> - process_nr, thread_nr, runtime_ns_max / bytes_done, val);
> + printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016llx]\n",
> + process_nr, thread_nr, runtime_ns_max / bytes_done, (unsigned long long)val);

Shouldn't this use PRIu64?

2013-06-20 07:33:46

by Riccardo Magliocchetti

[permalink] [raw]
Subject: Re: [PATCH] perf: fix bench numa compilation

Hello,

Il 19/06/2013 19:23, Arnaldo Carvalho de Melo ha scritto:
>> - process_nr, thread_nr, runtime_ns_max / bytes_done, val);
>> + printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016llx]\n",
>> + process_nr, thread_nr, runtime_ns_max / bytes_done, (unsigned long long)val);
>
> Shouldn't this use PRIu64?

Will respin.

thanks,
riccardo

2013-06-20 07:39:51

by Riccardo Magliocchetti

[permalink] [raw]
Subject: [PATCH v3] perf: fix bench numa compilation

Fix the following errors on gcc 4.8.1 / x86:

bench/numa.c: In function ‘worker_thread’:
bench/numa.c:1113:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
if (diff.tv_sec >= g->p.nr_secs) {
^
bench/numa.c:1161:6: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘u64’ [-Werror=format=]
process_nr, thread_nr, runtime_ns_max / bytes_done, val);
^

Signed-off-by: Riccardo Magliocchetti <[email protected]>
---
tools/perf/bench/numa.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

Changes since v2:
- use PRIu64 as suggested by Arnaldo Carvalho da Melo

diff --git a/tools/perf/bench/numa.c b/tools/perf/bench/numa.c
index 30d1c32..f5c0834 100644
--- a/tools/perf/bench/numa.c
+++ b/tools/perf/bench/numa.c
@@ -21,6 +21,7 @@
#include <string.h>
#include <unistd.h>
#include <pthread.h>
+#include <inttypes.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <sys/wait.h>
@@ -1110,7 +1111,7 @@ static void *worker_thread(void *__tdata)
/* Check whether our max runtime timed out: */
if (g->p.nr_secs) {
timersub(&stop, &start0, &diff);
- if (diff.tv_sec >= g->p.nr_secs) {
+ if (diff.tv_sec >= (long int)g->p.nr_secs) {
g->stop_work = true;
break;
}
@@ -1157,7 +1158,7 @@ static void *worker_thread(void *__tdata)
runtime_ns_max += diff.tv_usec * 1000;

if (details >= 0) {
- printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016lx]\n",
+ printf(" #%2d / %2d: %14.2lf nsecs/op [val: %016"PRIu64"x]\n",
process_nr, thread_nr, runtime_ns_max / bytes_done, val);
}
fflush(stdout);
--
1.8.3.1