Hi John, Today's linux-next build (powerpc allyesconfig) failed like this: drivers/net/wireless/ath9k/hw.c: In function 'ath9k_hw_9280_spur_mitigate': drivers/net/wireless/ath9k/hw.c:4660: internal compiler error: in expand_ex= pr_real_1, at expr.c:9199 Clearly not our fault! :-) I have informed our toolchain person. This was using the Debian gcc-4.3. It also fails using the Debian 4.2 compiler but not the 4.1 one. For now, I will apply the following patch to just stop it building on PowerPC. --=20 Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/
Alexandros Couloumbis already opened a bug for this issue on mips, which also seems to be affected: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37014 It is a gcc bug, but we'll have to work around it in the ath9k driver. cu Adrian -- "Is there not promise of rain?" Ling Tan asked suddenly out of the darkness. There had been need of rain for many days. "Only a promise," Lao Er said. Pearl S. Buck - Dragon Seed --
Hi Adrian, Thanks for fishing that out Adrian. --=20 Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/
I imagine that we would be happy to do that. Anyone have a clue as to how? John -- John W. Linville linville@tuxdriver.com --
Hi John, On Tue, 5 Aug 2008 12:00:26 -0400 "John W. Linville" <linville@tuxdriver.co= w? I think that "not yet" is the answer :-( If we don't get a useful answer soon, we may just have to merge the driver with appropriately commented negative "depends on" in Kconfig for the arches it breaks. --=20 Cheers, Stephen Rothwell sfr@canb.auug.org.au http://www.canb.auug.org.au/~sfr/
Patch below, verified to fix the issue with the following compilers:
- powerpc 4.2.4
- powerpc latest 4.3 SVN
- powerpc latest 4.4 SVN
- mips 4.2.4
- mips 4.3.1
The patch has to be applied twice for fixing both copies of the
cu
Adrian
<-- snip -->
This patch works around an internal compiler error (gcc bug #37014) in
all gcc 4.2 compilers and the gcc 4.3 series up to at least 4.3.1
on at least powerpc and mips.
Many thanks to Andrew Pinski for analyzing the gcc bug.
Signed-off-by: Adrian Bunk <bunk@kernel.org>
---
d1ec5b9fba6c50c7e98a85776a3b95d3a3a3179b
diff --git a/drivers/net/wireless/ath9k/hw.c b/drivers/net/wireless/ath9k/hw.c
index 1f6f393..5edc56d 100644
--- a/drivers/net/wireless/ath9k/hw.c
+++ b/drivers/net/wireless/ath9k/hw.c
@@ -4801,7 +4801,11 @@
for (i = 0; i < 123; i++) {
if ((cur_vit_mask > lower) && (cur_vit_mask < upper)) {
- if ((abs(cur_vit_mask - bin)) < 75)
+
+ /* workaround for gcc bug #37014 */
+ volatile int tmp = abs(cur_vit_mask - bin);
+
+ if (tmp < 75)
mask_amt = 1;
else
mask_amt = 0;
--
