Pode haver conflito de driver Linux com BIOS ou dispositivos de hardware (placa-mãe ASUS M5A99FX PRO 2)? Por exemplo, existe uma função no driver do Linux (drivers / hwmon / it87.c):
/*
* Must be called with data->update_lock held, except during initialization.
* We ignore the IT87 BUSY flag at this moment - it could lead to deadlocks,
* would slow down the IT87 access and should not be necessary.
*/
static int it87_read_value(struct it87_data *data, u8 reg)
{
outb_p(reg, data->addr + IT87_ADDR_REG_OFFSET);
return inb_p(data->addr + IT87_DATA_REG_OFFSET);
}
A próxima situação é possível? Um firmware, rodando no núcleo 0 no sistema multicore, grava no registro "data- > addr + IT87_ADDR_REG_OFFSET". Em seguida, o driver do Linux, executado no core 1, executa it87_read_value e, portanto, modifica o registro "data- > addr + IT87_ADDR_REG_OFFSET". Em seguida, o firmware tenta ler "data- > addr + IT87_DATA_REG_OFFSET" e obtém dados incorretos.
Além disso, o driver it87 suporta alarmes: "Se um alarme disparar, ele permanecerá acionado até que o registro do hardware seja lido pelo menos uma vez. Isso significa que a causa do alarme já pode ter desaparecido. Observe que na implementação atual, todos os registros de hardware são lidos sempre que qualquer dado é lido (a menos que seja menos de 1,5 segundos desde a última atualização). Isso significa que você pode facilmente perder alarmes de uma vez só. " (Kernel Linux, Documentação / hwmon / it87). É possível que o firmware perca um alarme se o driver do Linux ler o registro de alarme?
Parece que o chip de monitoramento de hardware é o IT8721F.
Além disso, a placa-mãe ASUS M5A99FX PRO 2 contém TPU (turbo processor unit) e EPU (unidade de processamento de energia). Esses chips interagem com o IT8721F e pode ocorrer uma situação semelhante à descrita?
É conhecido como o ASUS Ai Suite interage com o hardware? Existe uma interface ACPI específica para ler a temperatura, a velocidade da ventoinha e assim por diante, o que não é implementado no Linux?
Saída do comando "sensors" (módulo it87 carregado manualmente):
it8721-isa-0290
Adapter: ISA adapter
in0: +2.82 V (min = +1.96 V, max = +3.04 V)
in1: +2.84 V (min = +1.27 V, max = +2.78 V) ALARM
in2: +0.95 V (min = +3.02 V, max = +2.10 V) ALARM
+3.3V: +3.29 V (min = +2.71 V, max = +4.61 V)
in4: +1.02 V (min = +2.92 V, max = +2.41 V) ALARM
in5: +2.52 V (min = +3.04 V, max = +2.23 V) ALARM
in6: +1.92 V (min = +1.48 V, max = +1.75 V) ALARM
3VSB: +2.04 V (min = +1.94 V, max = +5.93 V)
Vbat: +3.29 V
fan1: 903 RPM (min = 22 RPM)
fan2: 0 RPM (min = 11 RPM) ALARM
fan3: 0 RPM (min = 10 RPM) ALARM
temp1: +33.0°C (low = -62.0°C, high = +109.0°C) sensor = thermistor
temp2: +32.0°C (low = -72.0°C, high = +60.0°C) sensor = thermistor
temp3: -128.0°C (low = -33.0°C, high = -125.0°C) sensor = disabled
intrusion0: OK
fan2 e fan3 estão ausentes, então 0 RPM está certo.
Eu não vi nenhum problema real enquanto o módulo "it87" está carregado e os dados de temperatura estão sendo lidos. Mas não tenho certeza de que tal problema não ocorra.
Tags drivers sensors bios motherboard linux