print last know how linux-kernel linux-device-driver race-condition sysfs

linux kernel - last - Mis atributos son demasiado rápidos, ¿qué debo hacer?



show version kernel linux (1)

En un controlador de dispositivo Linux, la creación de atributos sysfs en la probe es demasiado delicada, específicamente, experimenta una condición de carrera con el espacio de usuario . La solución recomendada es agregar sus atributos a varios grupos de atributos predeterminados para que puedan crearse automáticamente antes de la prueba. Para un controlador de dispositivo, struct device_driver contiene const struct attribute_group **groups para este propósito.

Sin embargo, struct attribute_group solo obtuvo un campo para atributos binarios en Linux 3.11 . Con los núcleos más antiguos (específicamente, 3.4), ¿cómo debe un controlador de dispositivo crear atributos binarios de sysfs antes de la prueba?


Citando (énfasis el mío) Greg Kroah-Hartman de su comentario a una solicitud de fusión (que fue fusionada por Linus como parte del ciclo de desarrollo 3.11):

Aquí hay algunos parches del núcleo del controlador para 3.11-rc2. No son realmente correcciones de errores, sino un montón de nuevas macros de ayuda para que los controladores creen correctamente los grupos de atributos, que los controladores y los subsistemas necesitan para solucionar una tonelada de problemas de carrera al crear incorrectamente archivos sysfs (binarios y normales) después de que se haya informado al espacio de usuario que el dispositivo está presente.

También aquí está la capacidad de crear archivos binarios como grupos de atributos, para resolver esa condición de carrera, que era imposible de hacer antes de esto , por lo que es mi culpa que los conductores se rompieran.

Así que parece que realmente no hay manera de resolver este problema en los núcleos antiguos.