usando sirven que privativos para los instalar informatica funcionan estan ejemplos controladores como caracteristicas linux floating-point linux-device-driver fxsave

sirven - ¿Cuáles son las convenciones de codificación para usar punto flotante en los controladores de dispositivos Linux?



para que sirven los drivers (2)

Respuesta corta: el código del núcleo puede usar coma flotante si este uso está rodeado por kernel_fpu_begin() / kernel_fpu_end() . Estas funciones manejan guardar y restaurar el contexto de fpu. Además, llaman preempt_disable() / preempt_enable() , lo que significa que no hay ningún preempt_enable() , página, etc. en el código entre esas funciones. Busca los nombres de las funciones para más información.

Si lo entiendo correctamente, cada vez que se ejecuta un KM, está usando un contexto de hardware (o un conjunto de hilos o registros de hardware, como quiera llamarlo) que haya sido reemplazado por algún hilo de la aplicación.

No, un módulo kernel también se puede ejecutar en el contexto del usuario (por ejemplo, cuando el espacio de usuario llama a syscalls en un dispositivo provisto por el KM). Sin embargo, no tiene relación con el problema del flotador.

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.

No es por el compilador, sino por el código de cambio de contexto del kernel.

Esto está relacionado con esta pregunta .

No soy un experto en controladores de dispositivos Linux o módulos kernel, pero he estado leyendo "Controladores de dispositivos Linux" [O''Reilly] de Rubini & Corbet y varias fuentes en línea, pero no he podido encontrar cualquier cosa sobre este tema específico todavía.

¿Cuándo se le permite a un kernel o módulo de controlador usar registros de coma flotante?
Si es así, ¿quién es responsable de guardar y restaurar sus contenidos?
(Supongamos arquitectura x86-64)

Si lo entiendo correctamente, cada vez que se ejecuta un KM, está usando un contexto de hardware (o un conjunto de hilos o registros de hardware, como quiera llamarlo) que haya sido reemplazado por algún hilo de la 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 punto flotante tiene que guardar cuidadosamente y restaurar el estado de coma flotante? ¿Hay funciones estándar del kernel para hacer esto?

¿Están las convenciones de codificación para esto explicadas en cualquier lugar?
¿Son diferentes para los controladores SMP sin SMP?
¿Son diferentes para los kernels anteriores no preventivos y los kernels preventivos más nuevos?


La respuesta de Linus proporciona esta cita bastante clara para usar como guía:

En otras palabras: la regla es que realmente no deberías usar FP en el kernel.