Esto se relaciona con this question.¿Cuáles son las convenciones de codificación para usar punto flotante en los controladores de dispositivos Linux?
No soy un experto en controladores de dispositivos Linux o módulos kernel, pero he estado leyendo "Controladores de dispositivos Linux" [O'Reilly] por Rubini & Corbet y varias fuentes en línea, pero no he podido encontrar algo sobre este tema específico aún.
¿Cuándo se le permite a un kernel o módulo de controlador usar registros de coma flotante?
En caso afirmativo, ¿quién es responsable de guardar y restaurar sus contenidos?
(Suponga que la arquitectura x86-64)
Si he entendido bien, cada vez que un kilómetro está ejecutando, se está utilizando un contexto de hardware (o subproceso de hardware o se registra en conjunto - lo que quieras llamarlo) que ha sido apropiado de algún hilo de aplicación. Si escribe su KM en c, el compilador asegurará correctamente que los registros de propósito general se guardan y restauran correctamente (de forma muy similar a como en una aplicación), pero eso no sucede automáticamente con los registros de coma flotante. De hecho, muchos KM no pueden suponer que el procesador tenga ninguna capacidad de coma flotante.
¿Estoy en lo cierto al adivinar que un KM que quiera usar coma flotante debe guardar cuidadosamente y restaurar el estado de punto flotante? ¿Hay funciones estándar del kernel para hacer esto?
¿Las convenciones de codificación están explicadas en cualquier lugar?
¿Son diferentes para los controladores SMP sin SMP?
¿Son diferentes para los kernels no preventivos más antiguos y los kernels preventivos más nuevos?