Bug 2361446

Summary: Kernel test lmbench bug/error; performance test "pass" prematurely (again?) and won't run
Product: [Fedora] Fedora Reporter: itrymybest80
Component: kernelAssignee: Kernel Maintainer List <kernel-maint>
Status: CLOSED NOTABUG QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 42CC: acaringi, adscvr, airlied, bskeggs, deadletterfile, gbcox, hdegoede, hpa, jforbes, josef, kernel-maint, linville, masami256, mchehab, ptalbert, robertgosewehr, steved, suraj.ghimire7
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2025-06-16 20:05:43 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description itrymybest80 2025-04-21 13:25:59 UTC
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

Comment 1 goz 2025-04-21 14:40:38 UTC
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).

Comment 2 Gerald Cox 2025-06-08 21:39:57 UTC
Confirmed.  Same problem with 6.15 kernel test day.

Comment 3 Justin M. Forbes 2025-06-16 20:05:43 UTC
This has nothing to do with kernel at all, it is a problem with the new gcc and lmbench

Comment 4 Gerald Cox 2025-06-17 17:37:16 UTC
 
(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!

Comment 5 Justin M. Forbes 2025-06-17 17:48:53 UTC
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.

Comment 6 Gerald Cox 2025-06-17 18:45:26 UTC
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.