|
Errata descripción técnica actualizado nov. 20 1997
Problema: La
instrucción CMPXCHG8B compara un 8 valor de byte en EDX eax y con un 8 valor de byte en la memoria (el destino
operando). La única información válida Operándoos destino de esta instrucción son memoria
operándoos. Si el destino operando es un registro el procesador deben generar un
opcode no válida excepción y ejecución de las CMPXCHG8B la instrucción debe ser detenido y el
procesador debe ejecutar el opcode no válida excepción handler. Esta errata ocurre si el bloqueo
prefix se utiliza con la instrucción CMPXCHG8B con una versión (no válido)registro destino
operando. En este caso, del procesador no comience la ejecución del inválido opcode
excepción handler debido a que el bus está bloqueado. Esto resulta en un sistema se bloquee.
Implicación: si una versión (no válido)registro destino
operando es se utiliza con la instrucción CMPXCHG8B y el prefijo LOCK, es posible que el sistema se bloquee.
No hay datos de la memoria se encuentra dañado y el usuario puede realizar un sistema restablecer para volver al funcionamiento normal.
Nota que el código no válido secuencia necesaria para esta errata que ocurran
no es normalmente generada en el curso de la programación ni tampoco tiene una secuencia
generados por disponible en el mercado software.
Esta errata solamente se aplica a Pentium®
procesadores, Pentium con tecnología MMX™, pentium OverDrive®
procesadores Pentium y procesadores OverDrive con la tecnología MMX. Procesadores Pentium Pro, procesadores Pentium II
y i486™ y anteriores no se ven afectados.
Solución: Existen dos soluciones para esta errata en
modo protegido los sistemas operativos. Solución tanto genera un fallo de página cuando el
opcode no válida excepción se produce. En ambos casos, el fallo de página Prestará servicios antes de que el
opcode no válida excepción e impedir así la condición cerrojo situación. La implementación
detalles variar dependiendo 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 un ambiente sin escritura página. Cuando el opcode no válida excepción
(excepción 6) ocurre debido a los combinado CMPXCHG8B instrucción con un registro no válida
destino (y sólo entonces), el procesador, se genera un fallo de página si no tiene
acceso de escritura en la página que contiene entrada 6 de la idt. La segunda parte de esta solución transitoria
modifica el fallo de página handler para reconocer correctamente y despachar del inválido opcode
excepciones que ya están direcciona a través del fallo de página handler.
Parte I, idt acceso 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 tabla en cero. Igualmente, el CR0.wp (16 bits) a 1. Ahora cuando el
opcode no válida excepción se produce en el combinado CMPXCHG8B instrucción, el procesador funcionará
activen un fallo de página ya que no tienen acceso de escritura en la página que contiene entrada 6 de la
idt. Este fallo de página evita que el bus cerrojo condición y da al sistema operativo control completo
para procesar los operando no válida excepción, como corresponda. Tenga en cuenta que excepción 6 es el
opcode no válida excepción, de manera que con este esquema un sistema operativo ha control completo de cualquier programa
ejecutar una no válida CMPXCHG8B instrucción.
- OPCIONAL: si las actualizaciones a las entradas 7 y 255 del idt se presentan durante el curso de funcionamiento normal
, página fallos se debe evitar en escribe en estas entradas idt. Los fallos
se pueden evitar al alineación de la idt a través de una página 4KB límite tal que la primera siete
entradas (0-6) de la idt en la primera sólo lectura página y el resto entradas se en una
lectura y escritura página.
Parte II, fallo de página
modificaciones handler
- Modificar el fallo de página handler para calcular excepción que causó el fallo de página utilizando
la dirección fault en CR2. Si el código de error en la pila indica se produjo la excepción
de anillo 0 y si la dirección corresponde a la opcode no válida excepción, pop el
código de error en el pila y ir a la invalidez opcode excepción handler. De lo contrario
continuar con la página normal fault handler.
O
- Esta solución transitoria tiene dos partes. Primero, la interrupción descriptor tabla (IDT) esté alineada
que permita a cualquier no válida opcode excepción se producirá un fallo de página (debido a la página no se
está presente). Segundo, el fallo de página handler es modificada para que reconozca correctamente y despachar
del inválido opcode excepción y ciertas otras excepciones que ya están direcciona a través del
fallo de página handler.
Parte I, idt alineación:
- Alinee la interrupción descriptor tabla (IDT) tal que cubre un página 4KB límite al ubicar a la
primera entrada partida 56 bytes de la terminación de la primera página 4KB. Esto coloca
los primeros siete entradas (0-6) en la primera página 4KB, y el resto entradas en la
segunda página.
- La página que contiene los primeros siete entradas de la idt no debe tener una asignación en la
página SO tablas. Esto causa que cualquiera de excepciones 0-6 a generar una página no está presente fallo. Un
fallo de página evita que el bus cerrojo condición y da al sistema operativo control completo para procesar estos
excepciones, como corresponda. Tenga en cuenta que excepción 6 es el opcode no válida excepción, de manera que
con este esquema un sistema operativo ha control completo de cualquier programa ejecutar una no válida CMPXCHG8B
instrucción.
Parte II, fallo de página handler modificaciones:
- Reconocer accesos a la primera página de la idt por las pruebas de los fault dirección en CR2.
Esta página no está presente fallos en otras direcciones se puede procesar normalmente.
- Para esta página no está presente fallos de la primera página de la idt, el sistema operativo debe reconocer y
despachar la excepción que causó la página no está presente fallo. Antes de continuar, prueba
la dirección fault en CR2 a fin de determinar si es que está en el rango de direcciones correspondientes a las excepciones
0-6.
- Calcular excepción que causó la página no está presente la tolerancia a partir de la dirección fault en
CR2.
- Según el sistema operativo, cierto nivel de privilegios comprueba se podría requerir, junto
con ajustes para la interrupción pila.
- Ir a la normal handler para la adecuada excepción.
Ambas soluciones sólo debe implementarse en procesadores Intel que devuelven familia=5
a través de la instrucción de CPUID.
75/90/100/120/133/150/166/200 MHz Pentium®
procesadores 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 |
Erratas |
| 81 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
No válida operando
combinado con instrucción CMPXCHG8B |
|
60 MHz y 66 MHz Pentium® procesadores
|
No. |
B1 |
C1 |
D1 |
Erratas |
| 52 |
X |
X |
X |
No válida operando
combinado con instrucción CMPXCHG8B |
|
63/83/120/125/133/150/166 MHz Pentium®
OverDrive® los procesadores y 125/150/166/180/200 MHz Pentium procesadores OverDrive
con tecnología MMX™
|
No. |
B1 |
B2 |
C0 |
Ta0 |
Ac0 |
Oxa3 |
Oxb1 |
Erratas |
| 70 |
X |
X |
X |
X |
X |
X |
X |
No válida operando
combinado con instrucción CMPXCHG8B |
|
Esto se aplica a:
|