Oh it is only on the trunk of GCC so to some extend it caught a regression in GCC :).
________________________________________ From: linaro-toolchain linaro-toolchain-bounces@lists.linaro.org on behalf of Andrew Pinski apinski@marvell.com Sent: Wednesday, September 8, 2021 2:36 PM To: Maxim Kuvyrkov; Linus Torvalds; Alex Deucher Cc: linaro-toolchain Subject: Re: [EXT] Re: [CI-NOTIFY]: TCWG Bisect tcwg_kernel/gnu-master-arm-mainline-allmodconfig - Build # 28 - Successful!
Filed as https://urldefense.proofpoint.com/v2/url?u=https-3A__gcc.gnu.org_PR102245&am... .
________________________________________ From: linaro-toolchain linaro-toolchain-bounces@lists.linaro.org on behalf of Andrew Pinski apinski@marvell.com Sent: Wednesday, September 8, 2021 2:31 PM To: Maxim Kuvyrkov; Linus Torvalds; Alex Deucher Cc: linaro-toolchain Subject: Re: [EXT] Re: [CI-NOTIFY]: TCWG Bisect tcwg_kernel/gnu-master-arm-mainline-allmodconfig - Build # 28 - Successful!
Ok, I am now able to reproduce it with:
#define shiftCB_DISABLE_FAULT_ON_UNMAPPED_ACCESS1 0 #define maskCB_DISABLE_FAULT_ON_UNMAPPED_ACCESS1 1L
#define REG_FIELD_MASK(a,b) (mask##b) #define REG_FIELD_SHIFT(a,b) (shift##b)
#define REG_SET_FIELD(orig_val, reg, field, field_val) \ (((orig_val) & ~REG_FIELD_MASK(reg, field)) | \ (REG_FIELD_MASK(reg, field) & ((field_val) << REG_FIELD_SHIFT(reg, field))))
int f(_Bool enable) { int tmp = 0; tmp = REG_SET_FIELD(tmp, VM_PRT_CNTL, CB_DISABLE_FAULT_ON_UNMAPPED_ACCESS1, enable); return tmp; }
This is definitely a false warning. I will be filing a bug upstream in a few minutes.
Thanks, Andrew
________________________________________ From: linaro-toolchain linaro-toolchain-bounces@lists.linaro.org on behalf of Andrew Pinski apinski@marvell.com Sent: Wednesday, September 8, 2021 1:29 PM To: Maxim Kuvyrkov; Linus Torvalds; Alex Deucher Cc: linaro-toolchain Subject: Re: [EXT] Re: [CI-NOTIFY]: TCWG Bisect tcwg_kernel/gnu-master-arm-mainline-allmodconfig - Build # 28 - Successful!
I think this is a false positive. It is doing: #define shift 2 #define mask (1ul<<(shift))
#define REG_FIELD_MASK(a,b) (mask) #define REG_FIELD_SHIFT(a,b) (shift)
#define REG_SET_FIELD(orig_val, reg, field, field_val) \ (((orig_val) & ~REG_FIELD_MASK(reg, field)) | \ (REG_FIELD_MASK(reg, field) & ((field_val) << REG_FIELD_SHIFT(reg, field))))
int f(_Bool enable) { int tmp = 0; tmp = REG_SET_FIELD(tmp, VM_PRT_CNTL, CB_DISABLE_FAULT_ON_UNMAPPED_ACCESS, enable); return tmp;
}
But I could not get GCC to warn. I think a toolchain person should look at the preprocessed source to see what is happening.
Thanks, Andrew Pinski
________________________________________ From: linaro-toolchain linaro-toolchain-bounces@lists.linaro.org on behalf of Maxim Kuvyrkov maxim.kuvyrkov@linaro.org Sent: Wednesday, September 8, 2021 2:30 AM To: Linus Torvalds; Alex Deucher Cc: linaro-toolchain Subject: [EXT] Re: [CI-NOTIFY]: TCWG Bisect tcwg_kernel/gnu-master-arm-mainline-allmodconfig - Build # 28 - Successful!
External Email
---------------------------------------------------------------------- Hi Linus,
As expected, kernel builds started failing in less-common configurations. In this particular case the culprit is amdgpu driver when built for 32-bit ARM in allmodconfig configuration using tip-of-trunk GCC.
Hi Alex, [picking your name from “git log drivers/gpu/drm/amd/amdgpu/amdgpu.h”],
Would you please take a look? Let me know if the problem doesn’t reproduce for you, and I’ll help to investigate.
00:22:45 In file included from drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c:29: 00:22:45 drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c: In function ‘gmc_v6_0_set_prt’: 00:22:45 drivers/gpu/drm/amd/amdgpu/amdgpu.h:1227:53: error: ‘<<’ in boolean context, did you mean ‘<’? [-Werror=int-in-bool-context] 00:22:45 1227 | (REG_FIELD_MASK(reg, field) & ((field_val) << REG_FIELD_SHIFT(reg, field)))) 00:22:45 | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 00:22:45 drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c:430:15: note: in expansion of macro ‘REG_SET_FIELD’ 00:22:45 430 | tmp = REG_SET_FIELD(tmp, VM_PRT_CNTL, 00:22:45 | ^~~~~~~~~~~~~ 00:22:45 cc1: all warnings being treated as errors 00:22:45 make[4]: *** [scripts/Makefile.build:277: drivers/gpu/drm/amd/amdgpu/gmc_v6_0.o] Error 1 00:40:28 make[4]: Target '__build' not remade because of errors. 00:40:28 make[3]: *** [scripts/Makefile.build:540: drivers/gpu/drm/amd/amdgpu] Error 2 00:41:17 make[3]: Target '__build' not remade because of errors. 00:41:17 make[2]: *** [scripts/Makefile.build:540: drivers/gpu/drm] Error 2 00:41:17 make[2]: Target '__build' not remade because of errors. 00:41:17 make[1]: *** [scripts/Makefile.build:540: drivers/gpu] Error 2 00:41:17 make[1]: Target '__build' not remade because of errors. 00:41:17 make: *** [Makefile:1872: drivers] Error 2 00:41:17 make: Target '__all' not remade because of errors.
Regards,
-- Maxim Kuvyrkov https://urldefense.proofpoint.com/v2/url?u=https-3A__www.linaro.org&d=Dw...
On 8 Sep 2021, at 11:40, ci_notify@linaro.org wrote:
Successfully identified regression in *linux* in CI configuration tcwg_kernel/gnu-master-arm-mainline-allmodconfig. So far, this commit has regressed CI configurations:
- tcwg_kernel/gnu-master-arm-mainline-allmodconfig
Culprit:
<cut> commit 3fe617ccafd6f5bb33c2391d6f4eeb41c1fd0151 Author: Linus Torvalds <torvalds@linux-foundation.org> Date: Sun Sep 5 11:24:05 2021 -0700
Enable '-Werror' by default for all kernel builds
... but make it a config option so that broken environments can disable it when required.
We really should always have a clean build, and will disable specific over-eager warnings as required, if we can't fix them. But while I fairly religiously enforce that in my own tree, it doesn't get enforced by various build robots that don't necessarily report warnings.
So this just makes '-Werror' a default compiler flag, but allows people to disable it for their configuration if they have some particular issues.
Occasionally, new compiler versions end up enabling new warnings, and it can take a while before we have them fixed (or the warnings disabled if that is what it takes), so the config option allows for that situation.
Hopefully this will mean that I get fewer pull requests that have new warnings that were not noticed by various automation we have in place.
Knock wood.
Signed-off-by: Linus Torvalds torvalds@linux-foundation.org
</cut>
Results regressed to (for first_bad == 3fe617ccafd6f5bb33c2391d6f4eeb41c1fd0151) # reset_artifacts: -10 # build_abe binutils: -9 # build_abe stage1: -5 # build_abe qemu: -2 # linux_n_obj: 21769 # First few build errors in logs:
from (for last_good == fd47ff55c9c31101fcc06d20cb381da3d4089bd5) # reset_artifacts: -10 # build_abe binutils: -9 # build_abe stage1: -5 # build_abe qemu: -2 # linux_n_obj: 29880 # linux build successful: all
Artifacts of last_good build: https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-... Artifacts of first_bad build: https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-... Build top page/logs: https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-...
Configuration details:
Reproduce builds:
<cut> mkdir investigate-linux-3fe617ccafd6f5bb33c2391d6f4eeb41c1fd0151 cd investigate-linux-3fe617ccafd6f5bb33c2391d6f4eeb41c1fd0151
git clone https://urldefense.proofpoint.com/v2/url?u=https-3A__git.linaro.org_toolchai...
mkdir -p artifacts/manifests curl -o artifacts/manifests/build-baseline.sh https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-... --fail curl -o artifacts/manifests/build-parameters.sh https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-... --fail curl -o artifacts/test.sh https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-... --fail chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites) ./jenkins-scripts/tcwg_kernel-build.sh @@ artifacts/manifests/build-baseline.sh
# Save baseline build state (which is then restored in artifacts/test.sh) mkdir -p ./bisect rsync -a --del --delete-excluded --exclude /bisect/ --exclude /artifacts/ --exclude /linux/ ./ ./bisect/baseline/
cd linux
# Reproduce first_bad build git checkout --detach 3fe617ccafd6f5bb33c2391d6f4eeb41c1fd0151 ../artifacts/test.sh
# Reproduce last_good build git checkout --detach fd47ff55c9c31101fcc06d20cb381da3d4089bd5 ../artifacts/test.sh
cd ..
</cut>
History of pending regressions and results: https://urldefense.proofpoint.com/v2/url?u=https-3A__git.linaro.org_toolchai...
Artifacts: https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-... Build log: https://urldefense.proofpoint.com/v2/url?u=https-3A__ci.linaro.org_job_tcwg-...
Full commit (up to 1000 lines):
<cut> commit 3fe617ccafd6f5bb33c2391d6f4eeb41c1fd0151 Author: Linus Torvalds <torvalds@linux-foundation.org> Date: Sun Sep 5 11:24:05 2021 -0700
Enable '-Werror' by default for all kernel builds
... but make it a config option so that broken environments can disable it when required.
We really should always have a clean build, and will disable specific over-eager warnings as required, if we can't fix them. But while I fairly religiously enforce that in my own tree, it doesn't get enforced by various build robots that don't necessarily report warnings.
So this just makes '-Werror' a default compiler flag, but allows people to disable it for their configuration if they have some particular issues.
Occasionally, new compiler versions end up enabling new warnings, and it can take a while before we have them fixed (or the warnings disabled if that is what it takes), so the config option allows for that situation.
Hopefully this will mean that I get fewer pull requests that have new warnings that were not noticed by various automation we have in place.
Knock wood.
Signed-off-by: Linus Torvalds torvalds@linux-foundation.org
Makefile | 3 +++ init/Kconfig | 14 ++++++++++++++ 2 files changed, 17 insertions(+)
diff --git a/Makefile b/Makefile index 6bc1c5b17a62..d45fc2edf186 100644 --- a/Makefile +++ b/Makefile @@ -785,6 +785,9 @@ stackp-flags-$(CONFIG_STACKPROTECTOR_STRONG) := -fstack-protector-strong
KBUILD_CFLAGS += $(stackp-flags-y)
+KBUILD_CFLAGS-$(CONFIG_WERROR) += -Werror +KBUILD_CFLAGS += $(KBUILD_CFLAGS-y)
ifdef CONFIG_CC_IS_CLANG KBUILD_CPPFLAGS += -Qunused-arguments # The kernel builds with '-std=gnu89' so use of GNU extensions is acceptable. diff --git a/init/Kconfig b/init/Kconfig index e708180e9a59..8cb97f141b70 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -137,6 +137,20 @@ config COMPILE_TEST here. If you are a user/distributor, say N here to exclude useless drivers to be distributed.
+config WERROR
bool "Compile the kernel with warnings as errors"
default y
help
A kernel build should not cause any compiler warnings, and this
enables the '-Werror' flag to enforce that rule by default.
However, if you have a new (or very old) compiler with odd and
unusual warnings, or you have some architecture with problems,
you may need to disable this config option in order to
successfully build the kernel.
If in doubt, say Y.
config UAPI_HEADER_TEST bool "Compile test UAPI headers" depends on HEADERS_INSTALL && CC_CAN_LINK
</cut>
_______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.linaro.org_mailma... _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.linaro.org_mailma... _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.linaro.org_mailma... _______________________________________________ linaro-toolchain mailing list linaro-toolchain@lists.linaro.org https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.linaro.org_mailma...