On Tue, 17 Dec 2024 07:19:04 PST (-0800), rostedt@xxxxxxxxxxx wrote: > From: Steven Rostedt <rostedt@xxxxxxxxxxx> > > My tests run an allyesconfig build and it failed with the following errors: > > LD [M] samples/kfifo/dma-example.ko > ld.lld: error: undefined symbol: nec7210_board_reset >>>> referenced by fmh_gpib.c:1512 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1512) >>>> vmlinux.o:(fmh_gpib_detach) >>>> referenced by fmh_gpib.c:1637 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1637) >>>> vmlinux.o:(fmh_gpib_pci_detach) >>>> referenced by fmh_gpib.c:1342 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1342) >>>> vmlinux.o:(fmh_gpib_init) > > ld.lld: error: undefined symbol: nec7210_read >>>> referenced by fmh_gpib.c:46 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/fmh_gpib/fmh_gpib.c:46) >>>> vmlinux.o:(fmh_gpib_read) > > ld.lld: error: undefined symbol: nec7210_write >>>> referenced by fmh_gpib.c:54 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/fmh_gpib/fmh_gpib.c:54) >>>> vmlinux.o:(fmh_gpib_write) > > It appears that some modules call the function nec7210_board_reset() that > is defined in nec7210.c. In an allyesconfig build, these other modules are > built in. But the file that holds nec7210_board_reset() has: > > obj-m += nec7210.o > > Where that "-m" means it only gets built as a module. With the other > modules built in, they have no access to nec7210_board_reset() and the build > fails. > > This isn't the only function. After fixing that one, I hit another: > > ld.lld: error: undefined symbol: push_gpib_event >>>> referenced by fmh_gpib.c:1166 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1166) >>>> vmlinux.o:(fmh_gpib_internal_interrupt) >>>> referenced by nec7210.c:956 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/nec7210/nec7210.c:956) >>>> vmlinux.o:(nec7210_interrupt_have_status) >>>> referenced by nec7210.c:962 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/nec7210/nec7210.c:962) >>>> vmlinux.o:(nec7210_interrupt_have_status) > > ld.lld: error: undefined symbol: gpib_match_device_path >>>> referenced by fmh_gpib.c:1370 (/work/build/trace/nobackup/linux-test.git/drivers/staging/gpib/fmh_gpib/fmh_gpib.c:1370) >>>> vmlinux.o:(fmh_gpib_device_match) > > Where push_gpib_event() was also used outside of the file it was defined > in, and that file too only was built as a module. > > Since the directory that nec7210.c is only traversed when > CONFIG_GPIB_NEC7210 is set, and the directory with gpib_common.c is only > traversed when CONFIG_GPIB_COMMON is set, use those configs as the option to > build those modules. When it is an allyesconfig, then they will both be > built in and their functions will be available to the other modules that > are also built in. > > Fixes: 3ba84ac69b53e ("staging: gpib: Add nec7210 GPIB chip driver") > Fixes: 9dde4559e9395 ("staging: gpib: Add GPIB common core driver") > Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> > --- > drivers/staging/gpib/common/Makefile | 2 +- > drivers/staging/gpib/nec7210/Makefile | 2 +- > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/staging/gpib/common/Makefile b/drivers/staging/gpib/common/Makefile > index 0c4c77bea75b..460586edb574 100644 > --- a/drivers/staging/gpib/common/Makefile > +++ b/drivers/staging/gpib/common/Makefile > @@ -1,5 +1,5 @@ > > -obj-m += gpib_common.o > +obj-$(CONFIG_GPIB_COMMON) += gpib_common.o > > gpib_common-objs := gpib_os.o iblib.o > > diff --git a/drivers/staging/gpib/nec7210/Makefile b/drivers/staging/gpib/nec7210/Makefile > index 8d4d90f21109..64330f2e89d1 100644 > --- a/drivers/staging/gpib/nec7210/Makefile > +++ b/drivers/staging/gpib/nec7210/Makefile > @@ -1,4 +1,4 @@ > > -obj-m += nec7210.o > +obj-$(CONFIG_GPIB_NEC7210) += nec7210.o Reviewed-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx> Thanks, this was breaking my stuff too. I was just going to send a revert, but this seems better. I've got it stacked up locally for the testers, so no rush on my end.