Bug 241047 - iflib: fail to compile kernel on FreeBSD 12.1-BETA2: Fatal error: ifdi_if.h file not found.
Summary: iflib: fail to compile kernel on FreeBSD 12.1-BETA2: Fatal error: ifdi_if.h f...
Status: In Progress
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 12.1-RELEASE
Hardware: amd64 Any
: --- Affects Only Me
Assignee: Kevin Bowling
URL:
Keywords: needs-qa, regression
Depends on:
Blocks: 240700
  Show dependency treegraph
 
Reported: 2019-10-03 22:17 UTC by rashey
Modified: 2021-04-19 22:14 UTC (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description rashey 2019-10-03 22:17:59 UTC
Hi,

Two issues occurred to me on FreeBSD 12.1-BETA2.

The first issue is that an iflib device is statically compiled into GENERIC kernel while GENERIC configuration file for amd64 architecture does not contain the device in /usr/src/sys/amd64/conf/GENERIC, it makes a lot of confusion and causes an error during kernel compiling.

The second issue is that I can not compile kernel with iflib module because of the same error.

# uname -a
FreeBSD test 12.1-BETA2 FreeBSD 12.1-BETA2 r352780 GENERIC  amd64

# cat /usr/src/sys/amd64/conf/ROUTER
include         GENERIC
ident           ROUTER

makeoptions     MODULES_OVERRIDE="pf pflog iflib"

options         PF_DEFAULT_TO_DROP
options         ALTQ
options         ALTQ_HFSC
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_NOPCC

# rm -R /usr/obj/* ; cd /usr/src ; make KERNCONF=ROUTER buildkernel
...
cc -target x86_64-unknown-freebsd12.1 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin -c -O2 -pipe -fno-strict-aliasing  -g -nostdinc  -I. -I/usr/src/sys -I/usr/src/sys/
contrib/ck/include -I/usr/src/sys/contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h  -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD  -MF.depend.if_em.o -MTif_em.o -fdebug-
prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float  -fno-asynchronous-unwind-tables -ffreestanding
-fwrapv -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -W
missing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -Wno-error-pointer-sign -W
no-error-shift-negative-value -Wno-address-of-packed-member  -mno-aes -mno-avx  -std=iso9899:1999 -Werror  /usr/src/sys/dev/e1000/if_em.c -I/usr/src/sys/dev/e1000
In file included from /usr/src/sys/dev/e1000/if_em.c:30:
/usr/src/sys/dev/e1000/if_em.h:91:10: fatal error: 'ifdi_if.h' file not found
#include "ifdi_if.h"
         ^~~~~~~~~~~
1 error generated.
*** Error code 1

Stop.
make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/ROUTER
*** Error code 1

Stop.
make[1]: stopped in /usr/src
*** Error code 1

Stop.
make: stopped in /usr/src
Comment 1 Tommy P 2020-01-14 18:21:44 UTC
I'm also encountering this on 12.0 upgraded to 12.1:

--- if_em.o ---
In file included from /usr/src12.1/sys/dev/e1000/if_em.c:30:
/usr/src12.1/sys/dev/e1000/if_em.h:91:10: fatal error: 'ifdi_if.h' file not found
#include "ifdi_if.h"
         ^~~~~~~~~~~

The 'ifdi_if.h' does not exist within src (r356738) per:
    find /usr/src12.1 -type f -name 'ifdi_if.h'

Yet, specifying 'device iflib' in the kernel config does work while that entry does not exists in GENERIC nor needed in 12.0.
Comment 2 Tommy P 2020-01-14 18:47:22 UTC
I did some digging and found:

12.0 sys/conf/files:
    net/ifdi_if.m                   optional ether pci

12.1 sys/conf/files:
    net/ifdi_if.m                   optional ether pci iflib

I assume that 'device  iflib' is now required going forward within the kernel configuration file?
Comment 3 clay 2020-11-03 19:39:13 UTC
I have the same kernel compile issue for 12.2-RELEASE:
In file included from /usr/src/sys/dev/e1000/if_em.c:30:
/usr/src/sys/dev/e1000/if_em.h:96:10: fatal error: 'ifdi_if.h' file not found
#include "ifdi_if.h"
         ^~~~~~~~~~~
1 error generated.
*** Error code 1

Stop.
make[2]: stopped in /usr/obj/usr/src/amd64.amd64/sys/ROUTER
*** Error code 1
*** Error code 1

It's caused by:
device          em              # Intel PRO/1000 Gigabit Ethernet Family

Fixed by adding the iflib device:
device          iflib
device          em              # Intel PRO/1000 Gigabit Ethernet Family

Kernel compiled now without errors.
Something else that changed and affected me was that:
device          tun
has been deprecated and replaced with:
device          tuntap

This is not a bug, just a change in the kernel requiring a new device because em now has dependency iflib. It's a little annoying that these changes happen but they make sense in order to be able to lighten the kernel if you are not using one of the NIC's. It's documented fine in GENERIC:
# PCI/PCI-X/PCIe Ethernet NICs that use iflib infrastructure
Comment 4 Aleks 2021-01-05 16:59:30 UTC
cc -c -O2 -pipe -fno-strict-aliasing  -g -nostdinc  -I. -I../../.. -I../../../contrib/ck/include -I../../../contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common  -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD  -MF.depend.efirtc.o -MTefirtc.o -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float  -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -Wno-error-pointer-sign -Wno-error-shift-negative-value -Wno-address-of-packed-member  -mno-aes -mno-avx  -std=iso9899:1999 -Werror  ../../../dev/efidev/efirtc.c
ctfconvert -L VERSION -g efirtc.o
cc -c -O2 -pipe -fno-strict-aliasing  -g -nostdinc  -I. -I../../.. -I../../../contrib/ck/include -I../../../contrib/libfdt -D_KERNEL -DHAVE_KERNEL_OPTION_HEADERS -include opt_global.h -fno-common  -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -MD  -MF.depend.if_em.o -MTif_em.o -fdebug-prefix-map=./machine=/usr/src/sys/amd64/include -fdebug-prefix-map=./x86=/usr/src/sys/x86/include -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float  -fno-asynchronous-unwind-tables -ffreestanding -fwrapv -fstack-protector -gdwarf-2 -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wcast-qual -Wundef -Wno-pointer-sign -D__printf__=__freebsd_kprintf__ -Wmissing-include-dirs -fdiagnostics-show-option -Wno-unknown-pragmas -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -Wno-error-pointer-sign -Wno-error-shift-negative-value -Wno-address-of-packed-member  -mno-aes -mno-avx  -std=iso9899:1999 -Werror  ../../../dev/e1000/if_em.c -I../../../dev/e1000
In file included from ../../../dev/e1000/if_em.c:30:
../../../dev/e1000/if_em.h:91:10: fatal error: 'ifdi_if.h' file not found
#include "ifdi_if.h"
         ^~~~~~~~~~~
1 error generated.
*** Error code 1
Comment 5 Aleks 2021-01-05 17:01:08 UTC
# PCI/PCI-X/PCIe Ethernet NICs that use iflib infrastructure
device<><------>iflib
device<><------>em<----><------><------># Intel PRO/1000 Gigabit Ethernet Family
#device><------>ix<----><------><------># Intel PRO/10GbE PCIE PF Ethernet
#device><------>ixv<---><------><------># Intel PRO/10GbE PCIE VF Ethernet
Comment 6 Aleks 2021-01-05 17:08:58 UTC
FreeBSD 12.1-STABLE r362880 GENERIC  amd64
Comment 7 Kevin Bowling freebsd_committer 2021-04-19 04:26:30 UTC
It looks like the common theme here is you have custom kernels and need to add 'device iflib'.  Let me see if there is some way to handle this in config(9).
Comment 8 Warner Losh freebsd_committer 2021-04-19 15:20:30 UTC
I'll take a look at this to see if there's something we can do. There's a lot of ugly things, I'll see which one(s) need to be deployed here.
Comment 9 Warner Losh freebsd_committer 2021-04-19 22:14:06 UTC
https://reviews.freebsd.org/D29848
https://reviews.freebsd.org/D29849

Contain my notion on how to fix this.