Re: [tip:x86/fpu] x86: Add new static_cpu_has() function using alternatives

From: H. Peter Anvin
Date: Tue May 18 2010 - 16:43:46 EST


On 05/18/2010 01:10 PM, Eric Dumazet wrote:
> Le mercredi 12 mai 2010 Ã 01:06 +0000, tip-bot for H. Peter Anvin a
> Ãcrit :
>> Commit-ID: a3c8acd04376d604370dcb6cd2143c9c14078a50
>> Gitweb: http://git.kernel.org/tip/a3c8acd04376d604370dcb6cd2143c9c14078a50
>> Author: H. Peter Anvin <hpa@xxxxxxxxx>
>> AuthorDate: Tue, 11 May 2010 17:47:07 -0700
>> Committer: H. Peter Anvin <hpa@xxxxxxxxx>
>> CommitDate: Tue, 11 May 2010 17:47:07 -0700
>>
>> x86: Add new static_cpu_has() function using alternatives
>>
>> For CPU-feature-specific code that touches performance-critical paths,
>> introduce a static patching version of [boot_]cpu_has(). This is run
>> at alternatives time and is therefore not appropriate for most
>> initialization code, but on the other hand initialization code is
>> generally not performance critical.
>>
>> On gcc 4.5+ this uses the new "asm goto" feature.
>
> Might be time to change Documentation/Changes about gcc requirements ...
>

Well, this failure is in the fallback code. What this seems to imply is
that gcc 3.4.6 doesn't know how to propagate what is already known to be
constant in an inline into an immediate. This is a pretty big fail, and
yes, if it really is this broken it might just be time to declare gcc
3.4 dead.

> # make
> CHK include/linux/version.h
> CHK include/generated/utsrelease.h
> CALL scripts/checksyscalls.sh
> CHK include/generated/compile.h
> CC arch/x86/kernel/process_32.o
> /usr/src/linux-2.6/arch/x86/include/asm/cpufeature.h: In function
> `prepare_to_copy':
> /usr/src/linux-2.6/arch/x86/include/asm/cpufeature.h:315: warning: asm
> operand 1 probably doesn't match constraints
> /usr/src/linux-2.6/arch/x86/include/asm/cpufeature.h:315: error:
> impossible constraint in `asm'
> /usr/src/linux-2.6/arch/x86/include/asm/cpufeature.h:313: warning:
> 'flag' might be used uninitialized in this function
> make[2]: *** [arch/x86/kernel/process_32.o] Error 1
> make[1]: *** [arch/x86/kernel] Error 2
> make: *** [arch/x86] Error 2
> # gcc -v
> Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.6/specs
> Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
> --infodir=/usr/share/info --enable-shared --enable-threads=posix
> --disable-checking --with-system-zlib --enable-__cxa_atexit
> --disable-libunwind-exceptions --enable-java-awt=gtk
> --host=i386-redhat-linux
> Thread model: posix
> gcc version 3.4.6 20060404 (Red Hat 3.4.6-10)
>

-hpa
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/