|
Descripción técnica errata Actualizado nov 20 1997
Problema: La
instrucción CMPXCHG8B compara un 8 valor de byte en EDX y EAX con un 8 valor de byte en la memoria (el
destino operando). La única destino válido operándoos para esta instrucción son memoria
operándoos. Si el destino operando es un registro el procesador deben generar una
excepción Opcode no válido, la ejecución del CMPXCHG8B la instrucción debe ser detenido y el
procesador debe ejecutar el gestor excepción Opcode no válido. Esta errata se produce si el
bloqueo se utiliza con el prefijo CMPXCHG8B instrucción con una versión (no válido) registro destino
operando. En este caso, el procesador no comience la ejecución de la
excepción Opcode gestor no válido debido a que el bus está bloqueado. Esto resulta en un bloqueo del sistema.
Implicación: Si una versión (no es válido) registro destino
operando se utiliza con el CMPXCHG8B instrucción y las bloquear prefijo, es probable que el sistema se bloquee.
No hay datos de la memoria corrompido y el usuario puede realizar un reinicio del sistema para regresar a
operación normal. Tenga en cuenta que el código no válido secuencia necesaria para esta errata para que
ocurra generalmente no es generado en el curso de la programación ni tampoco tiene una secuencia
generados por software disponible comercialmente.
Esta errata se aplica solamente a
los procesadores Pentium®, los procesadores Pentium con tecnología MMX™, Pentium
y OverDrive® procesadores Pentium OverDrive con la tecnología MMX. Procesadores Pentium Pro,
procesadores Pentium II y i486™ y anterior no se ven afectados.
Solución: Existen dos soluciones transitorias para esta errata para
los sistemas operativos de modo protegido. Ambas soluciones transitorias genera un error de página no válido cuando la
excepción Opcode se produce. En ambos casos, el error de página contará con los servicios antes de que el
Opcode excepción no válido y que, por tanto, prevenir que el bloqueo condición situación. Los
detalles de implementación presenta varía en función del sistema operativo. Utilice uno de los siguientes:
- La primera parte de esta solución transitoria establece los primeros 7 entradas (0-6) de la interrupción
Descriptor Tabla (IDT) en una página no escritura. Cuando la excepción Opcode no válido
(excepción 6) ocurre debido a la instrucción CMPXCHG8B combinado con un registro no válido
destino (y sólo entonces), el procesador, se genera un error de página si no tiene
acceso de escritura a la página que contiene 6 de la entrada de IDT. La segunda parte de esta solución transitoria
modifica el fallo de página Handler para reconocer y de forma correcta Dispatch inválido Opcode
excepciones que ahora están direcciona a través del fallo de página gestor.
Parte I, IDT al acceder la página
- Marca la página que contiene los primeros siete entradas (0-6) de la IDT como se lee sólo al
establecer bit 1 de la página entrada de la tabla a cero. También establecer CR0.WP (16 bits) a 1. Ahora que la
excepción no válido Opcode combinado se produce en la instrucción CMPXCHG8B, se
activen un fallo de página debido a que no tiene acceso de escritura a la página que contiene 6 de
la entrada de IDT. Este error de página evita que el bus bloquear condición y da el SO control completo
para procesar la excepción operando no válido, como corresponda. Tenga en cuenta que excepción 6 es la
excepción Opcode no válida, de manera que con este esquema un SO tiene control completo de cualquier programa
ejecutar una instrucción CMPXCHG8B no válido.
- Opcional: Si las actualizaciones a las entradas 7-255, de IDT producen en el curso de
funcionamiento normal, en la página se debe evitar fallos en escribe a estas IDT entradas. Los posibles fallas
se pueden evitar al alineación de la IDT a través de una página 4KB límites tal que la primera siete
entradas (0-6) de la IDT en la primera página sólo de lectura y el resto entradas están en
una lectura y escritura página.
Parte II, fallo de página
Handler modificaciones
- Modificar el fallo de página Handler para calcular excepción causó el error de página con
la tolerancia dirección CR2. Si el código de error en la pila indica que se produjo la excepción
de anillo 0 y si la dirección corresponde a la no válido Opcode excepción, pop el
código de error apagado la pila y salta a la excepción Opcode gestor no válido. De lo contrario
continuar con el fallo de página normal gestor.
O
- Esta solución transitoria tiene dos partes. Primero, la interrupción Descriptor Tabla (IDT) esté alineada
tal que cualquier excepción no válido Opcode causará un fallo de página (debido a la página no se
está presente). Segundo, el error de página Handler es modificado para que reconozca y de forma correcta enviar
la excepción Opcode no válido y de ciertas otras excepciones que están direccionan a través del
fallo de página gestor.
Parte I, IDT alineación:
- Alinee la interrupción Descriptor Tabla (IDT) tal que cubre un límite 4KB página
coloca la primera entrada a partir 56 bytes a partir de la final del primer 4KB página. Este lugares
los primeros siete entradas (0-6) en la primera página 4 KB, y el resto entradas en la
segunda página.
- La página que contiene los primeros siete entradas de IDT no debe tener una asignación en la SO
tablas de página. Esto hará que cualquier de excepciones 0-6 para generar una página no está presente fallo. Un
fallo de página evita que el bus bloquear condición y da el SO control completo a fin de procesar
estas excepciones, como corresponda. Tenga en cuenta que excepción 6 es la excepción Opcode no válida, de manera que
con este esquema un SO tiene control completo de cualquier programa ejecutar una
instrucción CMPXCHG8B no válido.
Parte II, fallo de página Handler modificaciones:
- Reconocer accesos a la primera página del IDT mediante la prueba el error dirección CR2.
Esta página no presente posibles fallas en otras direcciones puede ser procesadas normalmente.
- Página no está presente posibles fallas en la primera página del IDT, el SO debe reconocer y
Dispatch la excepción que causó la página no está presente fallo. Antes de continuar, prueba
la tolerancia dirección CR2 a fin de determinar si es que está en el rango de direcciones a las
excepciones correspondientes 0-6.
- Calcular excepción causó la página no está presente la tolerancia a partir de la tolerancia dirección
CR2.
- En función del sistema operativo, cierto nivel de privilegios verifica puede ser necesario, junto
con ajustes para la interrupción pila.
- Salta a la correspondiente normal Handler para la excepción.
Ambas soluciones transitorias sólo debe implementarse en los procesadores Intel que devuelven familia=5
a través de la instrucción de CPUID.
75/90/100/120/133/150/166/200 MHz
procesadores Pentium® y 120/133/150/166/200/233 MHz procesadores Pentium con tecnología MMX™
|
No. |
B1 |
B3 |
B5 |
C2 |
Ma1 |
Cb1 |
Mcb1 |
cC0 |
Ma4 |
Mcc0 |
E0 |
Xa3 |
Mxa3 |
Xb1 |
Mxb1 |
Mya0 |
Las erratas |
| 81 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
no válido
combinado operando con instrucción CMPXCHG8B |
|
60 MHz 66 MHz y procesadores Pentium®
|
No. |
B1 |
C1 |
D1 |
Las erratas |
| 52 |
X |
X |
X |
no válido
combinado operando con instrucción CMPXCHG8B |
|
63/83/120/125/133/150/166 MHz
OverDrive® procesadores Pentium® y 125/150/166/180/200 MHz Pentium procesadores OverDrive
con tecnología MMX™
|
No. |
B1 |
B2 |
C0 |
Ta0 |
Ac0 |
Oxa3 |
Oxb1 |
Las erratas |
| 70 |
X |
X |
X |
X |
X |
X |
X |
no válido
combinado operando con instrucción CMPXCHG8B |
|
Esto se aplica a:
|