Re: compilation failure with CONFIG_VFIO_PCI_NVLINK2

From: Alexey Kardashevskiy
Date: Mon Jan 07 2019 - 02:25:23 EST




On 07/01/2019 13:58, Alexey Kardashevskiy wrote:
>
>
> On 04/01/2019 02:08, Laura Abbott wrote:
>> On 1/3/19 5:49 AM, Alexey Kardashevskiy wrote:
>>>
>>>
>>> On 03/01/2019 03:37, Laura Abbott wrote:
>>>> Hi,
>>>>
>>>> I got a compilation failure when building with CONFIG_VFIO_PCI_NVLINK2
>>>> enabled:
>>>>
>>>> + make -s 'HOSTCFLAGS=-O2 -g -pipe -Wall -Werror=format-security
>>>> -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions
>>>> -fstack-protector-strong -grecord-gcc-switches
>>>> -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
>>>> -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mcpu=power8
>>>> -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protection'
>>>> 'HOSTLDFLAGS=-Wl,-z,relro -Wl,--as-needed -Wl,-z,now
>>>> -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,--build-id=uuid'
>>>> ARCH=powerpc -j4 modules
>>>> BUILDSTDERR: In file included from drivers/vfio/pci/trace.h:102,
>>>> BUILDSTDERR:ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ from
>>>> drivers/vfio/pci/vfio_pci_nvlink2.c:29:
>>>> BUILDSTDERR: ./include/trace/define_trace.h:89:42: fatal error:
>>>> ./trace.h: No such file or directory
>>>> BUILDSTDERR:Â #include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
>>>> BUILDSTDERR:ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ ^
>>>> BUILDSTDERR: compilation terminated.
>>>> BUILDSTDERR: make[3]: *** [scripts/Makefile.build:277:
>>>> drivers/vfio/pci/vfio_pci_nvlink2.o] Error 1
>>>> BUILDSTDERR: make[2]: *** [scripts/Makefile.build:492: drivers/vfio/pci]
>>>> Error 2
>>>> BUILDSTDERR: make[1]: *** [scripts/Makefile.build:492: drivers/vfio]
>>>> Error 2
>>>> BUILDSTDERR: make: *** [Makefile:1053: drivers] Error 2
>>>> BUILDSTDERR: make: *** Waiting for unfinished jobs....
>>>>
>>>> I don't know enough about ftrace building to make a guess here.
>>>> Config is attacked.
>>>
>>> What gcc is this and what is the exact sha1 of the tree? gcc8 prints
>>> other error with your config in drivers/scsi/esas2r/esas2r_ioctl.c but
>>> not this one so I am curious.
>>>
>>
>> gcc (GCC) 8.2.1 20181215 (Red Hat 8.2.1-6)
>>
>> sha 8e143b90e4d45cca3dc53760d3cfab988bc74571
>
>
> Your config and this sha1 still make "make oldconfig" ask few questions
> and then it compiles just fine, are you sure about the config?
>
> These are questions on "make oldconfig":
>
> Kernel Live Patching (LIVEPATCH) [N/y/?] (NEW)
> Stack Protector buffer overflow detection (STACKPROTECTOR) [Y/n/?] (NEW)
> Strong Stack Protector (STACKPROTECTOR_STRONG) [Y/n/?] (NEW)
> Do NOT protect notrace function from kprobe events
> (KPROBE_EVENTS_ON_NOTRACE) [N/y/?] (NEW)


Ok, I figured it out. This is because you compile in tree while I
compile out of tree (with O=builddir) and the difference is that in my
case gcc gets these additional -I$(src) statements and in your case you
need to add them manually:

yours V=1:

gcc
-Wp,-MD,drivers/vfio/pci/.vfio_pci_nvlink2.o.d
-nostdinc
-isystem /usr/lib/gcc/powerpc64le-linux-gnu/7/include
-I./arch/powerpc/include
-I./arch/powerpc/include/generated
-I./include
-I./arch/powerpc/include/uapi
-I./arch/powerpc/include/generated/uapi
-I./include/uapi
-I./include/generated/uapi
-include ./include/linux/kconfig.h
-include ./include/linux/compiler_types.h
-D__KERNEL__
...


mine V=1 (has -I/home/aik/p/kernel/drivers/vfio/pci and
-Idrivers/vfio/pci):

/opt/cross/gcc-powerpc64le-linux-8.2.1-nolibc/bin/powerpc64le-linux-gcc
-Wp,-MD,drivers/vfio/pci/.vfio_pci_nvlink2.o.d
-nostdinc
-isystem
/opt/cross/gcc-powerpc64le-linux-8.2.1-nolibc/bin/../lib/gcc/powerpc64le-linux/8.2.1/include
-I/home/aik/p/kernel/arch/powerpc/include
-I./arch/powerpc/include/generated
-I/home/aik/p/kernel/include
-I./include
-I/home/aik/p/kernel/arch/powerpc/include/uapi
-I./arch/powerpc/include/generated/uapi
-I/home/aik/p/kernel/include/uapi
-I./include/generated/uapi
-include /home/aik/p/kernel/include/linux/kconfig.h
-include /home/aik/p/kernel/include/linux/compiler_types.h
-I/home/aik/p/kernel/drivers/vfio/pci
-Idrivers/vfio/pci
-D__KERNEL__
...


This is where it happens:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/scripts/Makefile.lib#n143


I'd rather prefer to fix this in scripts/Makefile.lib#n143 than doing
-I$(src) but this is what everybody does already and therefore I guess
"[PATCH] vfio_pci: Add local source directory as include" from
https://patchwork.kernel.org/patch/10748803/ is correct.


>
>
>
>>>>
>>>> Also, would it be possible to switch this option from def_bool to
>>>> bool? I can't turn it off directly when it's def_bool.
>>>
>>> Why? Honestly I'd rather fix the compile error.
>>>
>>>
>>
>> It's not just about this error, there may be other situations where
>> it would be good to have this turned off.
>
> Oh well I think I misunderstood what "def_bool" actually does (it does
> not make much sense without "if" conditions). I'll post a patch.

I've had a quick discussion here, and the point is that the distros are
going to enable this anyway and it is quite hard to think of a scenario
when we want VFIO_PCI and POWERNV but not this NVLINK2 support. What
scenario do you have in mind?



--
Alexey