andreas-abel / nanoBench

A tool for running small microbenchmarks on recent Intel and AMD x86 CPUs.
http://www.uops.info
GNU Affero General Public License v3.0
435 stars 55 forks source link

Can't build on kernel 4.4 #8

Closed travisdowns closed 4 years ago

travisdowns commented 4 years ago

The kernel module fails to build on Ubuntu 16.04 with kernel 4.4:

cd kernel; make
make[1]: Entering directory '/home/travis/dev/nanoBench/kernel'
make -C /lib/modules/4.4.0-170-generic/build M=/home/travis/dev/nanoBench/kernel modules
make[2]: Entering directory '/usr/src/linux-headers-4.4.0-170-generic'
  CC [M]  /home/travis/dev/nanoBench/kernel/nb_km.o
/home/travis/dev/nanoBench/kernel/nb_km.c:18:10: fatal error: linux/set_memory.h: No such file or directory
 #include <linux/set_memory.h>
          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.

I think the set_memory functions were instead in asm/cacheflush.h on earlier kernels (I don't know exactly when the cutover happend).

Maybe there is a way to use the correct header, e.g., depending which header is available?

andreas-abel commented 4 years ago

It does compile now with kernel 4.4 in a virtual machine. However, I currently do not have access to an actual machine with that kernel to test if it works properly.

travisdowns commented 4 years ago

It works for me now, on the same machine where it failed before (with a few probably innocuous warnings):

travis@skylake-x:~/dev/nanoBench$ make
make -C user/
make[1]: Entering directory '/home/travis/dev/nanoBench/user'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/home/travis/dev/nanoBench/user'
cd kernel; make
make[1]: Entering directory '/home/travis/dev/nanoBench/kernel'
make -C /lib/modules/4.4.0-170-generic/build M=/home/travis/dev/nanoBench/kernel modules
make[2]: Entering directory '/usr/src/linux-headers-4.4.0-170-generic'
  CC [M]  /home/travis/dev/nanoBench/kernel/nb_km.o
/home/travis/dev/nanoBench/kernel/nb_km.c: In function ‘read_file_into_buffer’:
/home/travis/dev/nanoBench/kernel/nb_km.c:88:23: warning: passing argument 2 of ‘kernel_read’ makes integer from pointer without a cast [-Wint-conversion]
     kernel_read(filp, *buf, file_size, &pos);
                       ^~~~
In file included from include/linux/proc_fs.h:8,
                 from /home/travis/dev/nanoBench/kernel/nb_km.c:16:
include/linux/fs.h:2607:39: note: expected ‘loff_t’ {aka ‘long long int’} but argument is of type ‘char *’
 extern int kernel_read(struct file *, loff_t, char *, unsigned long);
                                       ^~~~~~
/home/travis/dev/nanoBench/kernel/nb_km.c:88:29: warning: passing argument 3 of ‘kernel_read’ makes pointer from integer without a cast [-Wint-conversion]
     kernel_read(filp, *buf, file_size, &pos);
                             ^~~~~~~~~
In file included from include/linux/proc_fs.h:8,
                 from /home/travis/dev/nanoBench/kernel/nb_km.c:16:
include/linux/fs.h:2607:47: note: expected ‘char *’ but argument is of type ‘size_t’ {aka ‘long unsigned int’}
 extern int kernel_read(struct file *, loff_t, char *, unsigned long);
                                               ^~~~~~
/home/travis/dev/nanoBench/kernel/nb_km.c:88:40: warning: passing argument 4 of ‘kernel_read’ makes integer from pointer without a cast [-Wint-conversion]
     kernel_read(filp, *buf, file_size, &pos);
                                        ^~~~
In file included from include/linux/proc_fs.h:8,
                 from /home/travis/dev/nanoBench/kernel/nb_km.c:16:
include/linux/fs.h:2607:55: note: expected ‘long unsigned int’ but argument is of type ‘loff_t *’ {aka ‘long long int *’}
 extern int kernel_read(struct file *, loff_t, char *, unsigned long);
                                                       ^~~~~~~~~~~~~
  CC [M]  /home/travis/dev/nanoBench/kernel/../common/nanoBench.o
  LD [M]  /home/travis/dev/nanoBench/kernel/nb.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/travis/dev/nanoBench/kernel/nb.mod.o
  LD [M]  /home/travis/dev/nanoBench/kernel/nb.ko
make[2]: Leaving directory '/usr/src/linux-headers-4.4.0-170-generic'
make[1]: Leaving directory '/home/travis/dev/nanoBench/kernel'
travis@skylake-x:~/dev/nanoBench$ sudo insmod kernel/nb.ko 
[sudo] password for travis: 
travis@skylake-x:~/dev/nanoBench$ 
travisdowns commented 4 years ago

Thanks for the quick turnaround!