I ran into what looks like a new lmbench bug while running the "performance" test as per the kernel test instructions. I'm also able to repeat the error(s) while running on the latest rawhide kernel. kernel-6.14.2-300.fc42.x86_64 kernel-6.14.3-300.fc42.x86_64 kernel-6.15.0-0.rc2.20250418gitfc96b232f8e7.25.fc43.x86_64 I also don't recall ever seeing this in Fedora 41 w/wo the 6.14 kernel(s) and not once with the 6.13 series while running your test. The performance test usually ends up taking 75-90 minutes on my system, but now it ends in 3 seconds. --- REDACTED@REDACTED:~/kernel-tests$ sudo ./runtests.sh -t performance Test suite called with performance lat_rpc.c:24:10: error: conflicting types for ‘client_rpc_xact_1’; have ‘char *(char *, CLIENT *)’ {aka ‘char *(char *, struct __rpc_client *)’} 24 | char *client_rpc_xact_1(char *argp, CLIENT *clnt); | ^~~~~~~~~~~~~~~~~ In file included from lat_rpc.c:19: bench.h:321:14: note: previous declaration of ‘client_rpc_xact_1’ with type ‘char *(void)’ 321 | extern char *client_rpc_xact_1(); | ^~~~~~~~~~~~~~~~~ lat_rpc.c: In function ‘main’: lat_rpc.c:136:33: warning: implicit declaration of function ‘lmbench_usage’ [-Wimplicit-function-declaration] 136 | lmbench_usage(ac, av, usage); | ^~~~~~~~~~~~~ lat_rpc.c: At top level: lat_rpc.c:176:1: error: conflicting types for ‘client_rpc_xact_1’; have ‘char *(char *, CLIENT *)’ {aka ‘char *(char *, struct __rpc_client *)’} 176 | client_rpc_xact_1(char *argp, CLIENT *clnt) | ^~~~~~~~~~~~~~~~~ bench.h:321:14: note: previous declaration of ‘client_rpc_xact_1’ with type ‘char *(void)’ 321 | extern char *client_rpc_xact_1(); | ^~~~~~~~~~~~~~~~~ lat_rpc.c: In function ‘rpc_xact_1’: lat_rpc.c:193:1: warning: old-style function definition [-Wold-style-definition] 193 | rpc_xact_1(msg, transp) | ^~~~~~~~~~ lat_rpc.c:196:1: error: number of arguments doesn’t match prototype 196 | { | ^ bench.h:320:14: error: prototype declaration 320 | extern char *rpc_xact_1(); | ^~~~~~~~~~ lat_rpc.c: In function ‘server_main’: lat_rpc.c:218:57: warning: passing argument 4 of ‘svc_register’ from incompatible pointer type [-Wincompatible-pointer-types] 218 | if (!svc_register(transp, XACT_PROG, XACT_VERS, xact_prog_1, IPPROTO_UDP)) { | ^~~~~~~~~~~ | | | void (*)(void) In file included from /usr/include/tirpc/rpc/svc.h:463, from /usr/include/tirpc/rpc/rpc.h:63, from bench.h:38: /usr/include/tirpc/rpc/svc_soc.h:70:21: note: expected ‘void (*)(struct svc_req *, SVCXPRT *)’ {aka ‘void (*)(struct svc_req *, struct __rpc_svcxprt *)’} but argument is of type ‘void (*)(void)’ 70 | void (*)(struct svc_req *, SVCXPRT *), int); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lat_rpc.c:202:13: note: ‘xact_prog_1’ declared here 202 | static void xact_prog_1(); | ^~~~~~~~~~~ lat_rpc.c:228:57: warning: passing argument 4 of ‘svc_register’ from incompatible pointer type [-Wincompatible-pointer-types] 228 | if (!svc_register(transp, XACT_PROG, XACT_VERS, xact_prog_1, IPPROTO_TCP)) { | ^~~~~~~~~~~ | | | void (*)(void) /usr/include/tirpc/rpc/svc_soc.h:70:21: note: expected ‘void (*)(struct svc_req *, SVCXPRT *)’ {aka ‘void (*)(struct svc_req *, struct __rpc_svcxprt *)’} but argument is of type ‘void (*)(void)’ 70 | void (*)(struct svc_req *, SVCXPRT *), int); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lat_rpc.c:202:13: note: ‘xact_prog_1’ declared here 202 | static void xact_prog_1(); | ^~~~~~~~~~~ lat_rpc.c: In function ‘xact_prog_1’: lat_rpc.c:240:1: warning: old-style function definition [-Wold-style-definition] 240 | xact_prog_1(rqstp, transp) | ^~~~~~~~~~~ lat_rpc.c:257:30: warning: assignment to ‘bool_t (*)(void)’ {aka ‘int (*)(void)’} from incompatible pointer type ‘bool_t (*)(XDR *, char *)’ {aka ‘int (*)(struct __rpc_xdr *, char *)’} [-Wincompatible-pointer-types] 257 | xdr_argument = xdr_char; | ^ In file included from /usr/include/tirpc/rpc/rpc.h:43: /usr/include/tirpc/rpc/xdr.h:316:17: note: ‘xdr_char’ declared here 316 | extern bool_t xdr_char(XDR *, char *); | ^~~~~~~~ lat_rpc.c:258:28: warning: assignment to ‘bool_t (*)(void)’ {aka ‘int (*)(void)’} from incompatible pointer type ‘bool_t (*)(XDR *, char *)’ {aka ‘int (*)(struct __rpc_xdr *, char *)’} [-Wincompatible-pointer-types] 258 | xdr_result = xdr_char; | ^ /usr/include/tirpc/rpc/xdr.h:316:17: note: ‘xdr_char’ declared here 316 | extern bool_t xdr_char(XDR *, char *); | ^~~~~~~~ lat_rpc.c:276:19: error: too many arguments to function ‘local’; expected 0, have 2 276 | result = (*local)(&argument, rqstp); | ~^~~~~~~ ~~~~~~~~~ gmake[2]: *** [Makefile:397: ../bin/x86_64-linux-gnu/lat_rpc] Error 1 make[1]: *** [Makefile:114: lmbench] Error 2 make: *** [Makefile:20: build] Error 2 lat_rpc.c:24:10: error: conflicting types for ‘client_rpc_xact_1’; have ‘char *(char *, CLIENT *)’ {aka ‘char *(char *, struct __rpc_client *)’} 24 | char *client_rpc_xact_1(char *argp, CLIENT *clnt); | ^~~~~~~~~~~~~~~~~ In file included from lat_rpc.c:19: bench.h:321:14: note: previous declaration of ‘client_rpc_xact_1’ with type ‘char *(void)’ 321 | extern char *client_rpc_xact_1(); | ^~~~~~~~~~~~~~~~~ lat_rpc.c: In function ‘main’: lat_rpc.c:136:33: warning: implicit declaration of function ‘lmbench_usage’ [-Wimplicit-function-declaration] 136 | lmbench_usage(ac, av, usage); | ^~~~~~~~~~~~~ lat_rpc.c: At top level: lat_rpc.c:176:1: error: conflicting types for ‘client_rpc_xact_1’; have ‘char *(char *, CLIENT *)’ {aka ‘char *(char *, struct __rpc_client *)’} 176 | client_rpc_xact_1(char *argp, CLIENT *clnt) | ^~~~~~~~~~~~~~~~~ bench.h:321:14: note: previous declaration of ‘client_rpc_xact_1’ with type ‘char *(void)’ 321 | extern char *client_rpc_xact_1(); | ^~~~~~~~~~~~~~~~~ lat_rpc.c: In function ‘rpc_xact_1’: lat_rpc.c:193:1: warning: old-style function definition [-Wold-style-definition] 193 | rpc_xact_1(msg, transp) | ^~~~~~~~~~ lat_rpc.c:196:1: error: number of arguments doesn’t match prototype 196 | { | ^ bench.h:320:14: error: prototype declaration 320 | extern char *rpc_xact_1(); | ^~~~~~~~~~ lat_rpc.c: In function ‘server_main’: lat_rpc.c:218:57: warning: passing argument 4 of ‘svc_register’ from incompatible pointer type [-Wincompatible-pointer-types] 218 | if (!svc_register(transp, XACT_PROG, XACT_VERS, xact_prog_1, IPPROTO_UDP)) { | ^~~~~~~~~~~ | | | void (*)(void) In file included from /usr/include/tirpc/rpc/svc.h:463, from /usr/include/tirpc/rpc/rpc.h:63, from bench.h:38: /usr/include/tirpc/rpc/svc_soc.h:70:21: note: expected ‘void (*)(struct svc_req *, SVCXPRT *)’ {aka ‘void (*)(struct svc_req *, struct __rpc_svcxprt *)’} but argument is of type ‘void (*)(void)’ 70 | void (*)(struct svc_req *, SVCXPRT *), int); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lat_rpc.c:202:13: note: ‘xact_prog_1’ declared here 202 | static void xact_prog_1(); | ^~~~~~~~~~~ lat_rpc.c:228:57: warning: passing argument 4 of ‘svc_register’ from incompatible pointer type [-Wincompatible-pointer-types] 228 | if (!svc_register(transp, XACT_PROG, XACT_VERS, xact_prog_1, IPPROTO_TCP)) { | ^~~~~~~~~~~ | | | void (*)(void) /usr/include/tirpc/rpc/svc_soc.h:70:21: note: expected ‘void (*)(struct svc_req *, SVCXPRT *)’ {aka ‘void (*)(struct svc_req *, struct __rpc_svcxprt *)’} but argument is of type ‘void (*)(void)’ 70 | void (*)(struct svc_req *, SVCXPRT *), int); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lat_rpc.c:202:13: note: ‘xact_prog_1’ declared here 202 | static void xact_prog_1(); | ^~~~~~~~~~~ lat_rpc.c: In function ‘xact_prog_1’: lat_rpc.c:240:1: warning: old-style function definition [-Wold-style-definition] 240 | xact_prog_1(rqstp, transp) | ^~~~~~~~~~~ lat_rpc.c:257:30: warning: assignment to ‘bool_t (*)(void)’ {aka ‘int (*)(void)’} from incompatible pointer type ‘bool_t (*)(XDR *, char *)’ {aka ‘int (*)(struct __rpc_xdr *, char *)’} [-Wincompatible-pointer-types] 257 | xdr_argument = xdr_char; | ^ In file included from /usr/include/tirpc/rpc/rpc.h:43: /usr/include/tirpc/rpc/xdr.h:316:17: note: ‘xdr_char’ declared here 316 | extern bool_t xdr_char(XDR *, char *); | ^~~~~~~~ lat_rpc.c:258:28: warning: assignment to ‘bool_t (*)(void)’ {aka ‘int (*)(void)’} from incompatible pointer type ‘bool_t (*)(XDR *, char *)’ {aka ‘int (*)(struct __rpc_xdr *, char *)’} [-Wincompatible-pointer-types] 258 | xdr_result = xdr_char; | ^ /usr/include/tirpc/rpc/xdr.h:316:17: note: ‘xdr_char’ declared here 316 | extern bool_t xdr_char(XDR *, char *); | ^~~~~~~~ lat_rpc.c:276:19: error: too many arguments to function ‘local’; expected 0, have 2 276 | result = (*local)(&argument, rqstp); | ~^~~~~~~ ~~~~~~~~~ gmake[2]: *** [Makefile:397: ../bin/x86_64-linux-gnu/lat_rpc] Error 1 make[1]: *** [Makefile:114: lmbench] Error 2 make: *** [Makefile:23: results] Error 2 ./performance/lmbench3 PASS Test suite complete PASS
Confirm that I've also been seeing these same errors when running the Performance test suite for a while now on F42, regardless of kernel version (with 6.14/6.15 anyway, don't think I've tested any 6.13 kernels recently).
Confirmed. Same problem with 6.15 kernel test day.
This has nothing to do with kernel at all, it is a problem with the new gcc and lmbench
(In reply to Justin M. Forbes from comment #3) > This has nothing to do with kernel at all, it is a problem with the new gcc > and lmbench Fair enough, but we still need to get this fixed. Do you know who is responsible for kernel test days? Either lmbench needs to get fixed, the documentation revised to not reference the performance tests or kernel test days discontinued if they are no longer needed. Thanks!
I am, though I am also not sure who put in the documentation for running the performance tests. I have never recommended it because performance tests are fairly useless unless conducted in a very controlled and specific manor to compare versions. Will see if I can chase down the documentation. there.
Thanks for the quick reply Justin. I also asked a question about this on discussion. If you don't believe the performance tests are worthwhile, then yeah, probably should get that removed from the doc.