Re: Cyrix 6x86MX and Centaur C6 CPUs in 2.1.102

Phil's Kernel Account (
Tue, 19 May 1998 18:13:24 -0400 (EDT)

On Mon, 18 May 1998, Linus Torvalds wrote:

#Well, consider it this way: I think it is conceptually just completely
#wrong to have a "capability" word, and then despite having a capability
#word have something horrible like this:

I won't argue on that point one bit. It is conceptually wrong to have a
capability word, yet ignore it.

#That kind of throws away the whole _point_ of using the capability word in
#the first place.

Very true, but sometimes, you don't really have a choice.

#If you want to distinguish between
# - has no cycle counter
# - has a broken cycle counter
# - has a cycle counter that works as documented
#then that part I have no argument with. HOWEVER, if so, you'd better make
#it a new capability or something, because I don't want to have "real"
#kernel code having to care. This is something that is very CPU dependent
#(and even stepping-dependent), and I don't want to have code all around
#the kernel checking for the "random stepping of the day bug".

But I don't want to distinguish between THOSE choices. I want to
distinguinsh between THESE choices
- has no cycle counter
- has a cycle counter that works as documented by Intel
- has a cycle counter that works as documented by Cyrix
- has a cycle counter that works as documented by Centaur

And honestly, I don't want to have to try and sort through 'random
stepping of the day' bugs either. Basically, what I'm proposing is a
simple set of checks to see if the cycle counter falls into one of the
above categories, while keeping it sane. If it's a Cx6x86MX before step
0, rev 3, it falls under 'documented by Cyrix.' If it's a Cx6x86 it falls
under 'Intel.' If it's a C6 Stepping 0, it falls under 'Centaur.'
Generalize. If it doesn't fall into 'Intel,' 'Cyrix,' or 'Centaur,' it
falls under broken.

Now, how do we generalize? Very easy. Gonna sorta-flow chart this one so
everyone can read. :)

if capability & 16
->x86_vendor == CyrixInstead
->if x86_model != 6x86MX-> normal
->if x86_model == 6x86MX
->if x86_stepping <= step0, rev2 (rev3 is ok, supposedly) -> 'Cyrix'
->x86_vendor == Centaur
->if x86_stepping == step0 -> 'Centaur'

Shouldn't be TOO hard to beautify the code to do that, honestly. It's a
series of five real checks. Check for Cyrix. Check for 6x86MX. Check for
stepping of 6x86MX. Check for Centaur. Check if it's Stepping 0. If it
doesn't match these criteria, continue as normal. :)

#Let's get this straight: I don't have anything against fixing problems
#with buggy CPU's, but workarounds for ugly problems have to at least be
#done right.

Well, if you can find a 'righter' way to do it, I'm all ears. Especially
since I can't use my left arm after bringing the new monitor in the house.

-Phil R. Jaenke ( /
TheGuyInCharge(tm), Ketyra Designs - We get paid to break stuff :)
Linux pkrea.ketyra.INT 2.0.33 #15 Sat Apr 18 00:40:21 EDT 1998 i586
Linux 2.0.33 #15 Fri Apr 17 00:22:13 EDT 1998 i586
- Linus says for 'brave people only.' I say 'keep a backup.' - :)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to