[FUG-BR]_Dúvida_-_NO_FOOF_HACK

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Sáb Abr 8 18:44:49 BRT 2006


Thiago Esteves de Oliveira wrote:
> On Sat, 08 Apr 2006 17:45:55 -0300, Rainer Alves <rainer.alves em gmail.com>  
> wrote:
> 
> 
>>Thiago Esteves de Oliveira wrote:
>>
>>>  Li o NOTES/NO_FOOF_HACK, ok,  mas gostaria de saber se a opção
>>>NO_FOOF_HACK deve ser usada
>>>apenas em "i586(s)" como dito no NOTES, pois já vi servidores "i686(s)",
>>>com esta opção abilitada na
>>>compilação do kernel.
>>
>>A primeira edição do Pentium (de séculos atrás) tinha um bug que causava
>>o travamento da CPU se ela recebesse uma sequência de instruções que
>>iniciava com os byte codes 'F0 0F' (em hexadecimal, daí o nome).
>>Esse 'NO_F00F_HACK' nada mais é do que uma proteção do kernel, que gera
>>um erro de instrução ilegal ao detectá-las.
>>A opção só faz sentido se você usar o Pentium 1 (i586), habilitá-la em
>>qualquer outro kernel é desperdício já que a Intel corrigiu o bug no
>>design dos Pentiums seguintes.
>>
>>--
>>Rainer Alves

Na verdade, e' exatamente o contrario hehe.

O F00F_HACK e uma serie de codigos pra evitar o problema muito bem 
explicado pelo Rainer, a principal correcao e o codigo a seguir

#if defined(I586_CPU) && !defined(NO_F00F_HACK)
                         if (i == -2) {
                                 /*
                                  * The f00f hack workaround has 
triggered, so
                                  * treat the fault as an illegal 
instruction
                                  * (T_PRIVINFLT) instead of a page fault.
                                  */
                                 type = frame.tf_trapno = T_PRIVINFLT;

                                 /* Proceed as in that case. */
                                 ucode = type;
                                 i = SIGILL;
                                 break;
                         }
#endif

Que fica no sys/i386/i386/trap.c.

Portanto, note que o F00F_HACK *ja existe* em toda e qualquer situacao 
que voce tenha I586 no kernel. Nao e' necessario adiciona-lo para te-lo. 
A opcao do NOTES faz o contrario, ela OMITE o F00F_HACK, por isso 
chama-se "NO_F00F_HACK", "sem F0 0F hack" que ja existe por padrao, 
tendo I586 no kernel.

Portanto a opcao so deve ser usada se voce *NAO* usar I586 (por exemplo, 
mantem apenas classe de CPU I686 no kernel) ou se voce mantem seu kernel 
apto a processar instrucoes de classe i586 mas tem certeza que jamais 
serao processadores Pentium nessa classe, por exemplo, AMD K6 2, CYRIX e 
afins, que sao 586 mas nao sofrem desse bug (bug exclusivo dos Pentium).

Note que na primeira situacao (nao manter i586 no kernel) colocar a 
opcao NO_F00F_HACK e' redundante (note o && do if defined).


-- 
Patrick Tracanelli

FreeBSD Brasil LTDA.
(31) 3281-9633 / 3281-3547
316601 em sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"

_______________________________________________
freebsd mailing list
freebsd em fug.com.br
http://lists.fug.com.br/listinfo.cgi/freebsd-fug.com.br


Mais detalhes sobre a lista de discussão freebsd