On Fri, Jul 14, 2023 at 3:33 PM Jiri Slaby <jirislaby@xxxxxxxxxx> wrote: > > Hi, > > if I create an s390 defconfig: > mkdir /tmp/s390/ > make O=/tmp/s390/ ARCH=s390 CROSS_COMPILE=s390x-suse-linux- defconfig > > And then if I try for a couple times: > make O=/tmp/s390/ -j17 ARCH=s390 CROSS_COMPILE=s390x-suse-linux- > drivers/s390/char/con3270.o > > Most of the time, I get: > make[1]: Entering directory '/tmp/s390' > GEN Makefile > CALL /home/latest/linux/scripts/checksyscalls.sh > CC drivers/s390/char/con3270.o > CC drivers/s390/char/con3270.o > > I.e. it is built twice. > > Sometimes, I also get an error: > fixdep: error opening file: drivers/s390/char/.con3270.o.d: No such file > or directory > make[4]: *** [/home/latest/linux/scripts/Makefile.build:243: > drivers/s390/char/con3270.o] Error 2 > make[4]: *** Deleting file 'drivers/s390/char/con3270.o' > make[3]: *** [/home/latest/linux/scripts/Makefile.build:477: drivers] > > Obviously due to some race. > > Any ideas what is going on? The reason is because ARCH=s390 descends into drivers/s390/ in a non-standard way. See arch/s390/Makefile line 122. This is a corner case in single builds, and I do not know how to make it work. I really hope arch maintainers will follow the standard obj-y syntax unless there is a strong reason to opt out. The following patch will fix the issue. diff --git a/arch/s390/Makefile b/arch/s390/Makefile index 5ed242897b0d..a53a36ee0731 100644 --- a/arch/s390/Makefile +++ b/arch/s390/Makefile @@ -119,7 +119,6 @@ export KBUILD_CFLAGS_DECOMPRESSOR OBJCOPYFLAGS := -O binary libs-y += arch/s390/lib/ -drivers-y += drivers/s390/ boot := arch/s390/boot syscalls := arch/s390/kernel/syscalls diff --git a/drivers/Makefile b/drivers/Makefile index 7241d80a7b29..a7459e77df37 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -195,3 +195,5 @@ obj-$(CONFIG_PECI) += peci/ obj-$(CONFIG_HTE) += hte/ obj-$(CONFIG_DRM_ACCEL) += accel/ obj-$(CONFIG_CDX_BUS) += cdx/ + +obj-$(CONFIG_S390) += s390/ -- Best Regards Masahiro Yamada