On Thu, Jan 16, 2020 at 1:05 AM Toke Høiland-Jørgensen toke@redhat.com wrote:
Andrii Nakryiko andrii.nakryiko@gmail.com writes:
On Wed, Jan 15, 2020 at 2:06 PM Toke Høiland-Jørgensen toke@redhat.com wrote:
Andrii Nakryiko andrii.nakryiko@gmail.com writes:
On Wed, Jan 15, 2020 at 6:13 AM Toke Høiland-Jørgensen toke@redhat.com wrote:
From: Toke Høiland-Jørgensen toke@redhat.com
The runqslower tool refuses to build without a file to read vmlinux BTF from. The build fails with an error message to override the location by setting the VMLINUX_BTF variable if autodetection fails. However, the Makefile doesn't actually work with that override - the error message is still emitted.
Do you have example command with VMLINUX_BTF override that didn't work (and what error message was emitted)?
Before this patch:
$ cd ~/build/linux/tools/bpf/runqslower $ make Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop.
$ make VMLINUX_BTF=~/build/linux/vmlinux Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop.
Ok, so this is strange. Try make clean and run with V=1, it might help to debug this. This could happen if ~/build/linux/vmlinux doesn't exist, but I assume you double-checked that. It works for me just fine (Makefile won't do VMLINUX_BTF := assignment, if it's defined through make invocation, so your change should be a no-op in that regard):
$ make clean $ make VMLINUX_BTF=~/linux-build/default/vmlinux V=1 ... .output/sbin/bpftool btf dump file ~/linux-build/default/vmlinux format c > .output/vmlinux.h ...
Wonder what your output looks like?
$ make clean Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop. $ make VMLINUX_BTF=~/build/linux/vmlinux V=1 Makefile:18: *** "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly". Stop.
Take another look at the relevant part of the makefile:
ifneq ("$(wildcard /sys/kernel/btf/vmlinux)","") VMLINUX_BTF := /sys/kernel/btf/vmlinux else ifneq ("$(wildcard /boot/vmlinux-$(KERNEL_REL))","") VMLINUX_BTF := /boot/vmlinux-$(KERNEL_REL) else $(error "Can't detect kernel BTF, use VMLINUX_BTF to specify it explicitly") endif
That if/else doesn't actually consider the value of VMLINUX_BTF; so the override only works if one of the files being considered by the auto-detection actually exists... :)
Ah, right, unconditional $(error), completely missed that few times, thanks!
-Toke