Re: [PATCH] x86: do not allow to optimize flag_is_changeable_p()

From: H. Peter Anvin
Date: Mon Sep 29 2008 - 14:18:14 EST


Krzysztof Helt wrote:
From: Krzysztof Helt <krzysztof.h1@xxxxx>

The flag_is_changeable_p() is used by
has_cpuid_p() which can return different results
in the code sequence below:

if (!have_cpuid_p())
identify_cpu_without_cpuid(c);

/* cyrix could have cpuid enabled via c_identify()*/
if (!have_cpuid_p())
return;

Otherwise, the gcc 3.4.6 optimizes these two calls
into one which make the code not working correctly.
Cyrix cpus have the CPUID instruction enabled but
it is not detected due to the gcc optimization.
Thus the ARR registers (mtrr like) are not detected
on such a cpu.


I suspect we should also out-of-line this function. It's actually relatively sizable and certainly there is no point in inlining it.

-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/