Returning a negative value for a boolean function seem to have the undesired effect of returning true. require_paranoia_below() is a boolean function, but the variable used to store the return value is an integer, receiving -1 or 0. This patch convert rc to bool, replace -1 by false, and 0 by true. This issue was found by the following Coccinelle semantic patch: <smpl> @@ identifier f, ret; constant C; typedef bool; @@ bool f (...){ <+... ret = -C; ... * return ret; ...+> } </smpl> Signed-off-by: Peter Senna Tschudin <peter.senna@xxxxxxxxx> --- I could not compile this specific file, but I did some testing on toy examples: t.c: _Bool main(void) { return -1; } $ powerpc64-linux-gnu-gcc -O2 -S -fomit-frame-pointer t.c t.s: ... .L.main: li 3,1 blr However if the function type is int instead of bool, it behaves as expected: t2.c: int main(void) { return -1; } $ powerpc64-linux-gnu-gcc -O2 -S -fomit-frame-pointer t2.c t2.s: ... .L.main: li 3,-1 blr So another solution would be to change the function type to int. tools/testing/selftests/powerpc/pmu/lib.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/powerpc/pmu/lib.c b/tools/testing/selftests/powerpc/pmu/lib.c index a07104c..2f17110 100644 --- a/tools/testing/selftests/powerpc/pmu/lib.c +++ b/tools/testing/selftests/powerpc/pmu/lib.c @@ -219,9 +219,9 @@ bool require_paranoia_below(int level) unsigned long current; char *end, buf[16]; FILE *f; - int rc; + bool rc; - rc = -1; + rc = false; f = fopen(PARANOID_PATH, "r"); if (!f) { @@ -244,7 +244,7 @@ bool require_paranoia_below(int level) if (current >= level) goto out; - rc = 0; + rc = true; out_close: fclose(f); out: -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html