refactor: utiliser devm_* allocations dans 07_virtual_leds_more_complex #9

Merged
florian.richer merged 1 commit from openclaw/kernel_module_learn:refactor/virtual-leds-devm into main 2026-03-21 19:51:47 +01:00
Member

Remplace kzalloc/kasprintf/kfree/led_classdev_register par leurs équivalents devm_* liés à un platform_device parent.

Le cleanup est maintenant automatique à la destruction du device — plus besoin de goto fail ni de boucle de cleanup manuelle dans exit.

Note: devm_* nécessite un struct device * valide, donc un platform_device est introduit comme parent. C'est le pattern standard kernel pour ce cas.

Ref #1

Remplace `kzalloc`/`kasprintf`/`kfree`/`led_classdev_register` par leurs équivalents `devm_*` liés à un `platform_device` parent. Le cleanup est maintenant automatique à la destruction du device — plus besoin de `goto fail` ni de boucle de cleanup manuelle dans exit. **Note:** `devm_*` nécessite un `struct device *` valide, donc un `platform_device` est introduit comme parent. C'est le pattern standard kernel pour ce cas. Ref #1
Remplace kzalloc/kasprintf/kfree/led_classdev_register par leurs
équivalents devm_* liés à un platform_device parent.

Le cleanup (unregister + free) est maintenant automatique à la
destruction du device — plus besoin de goto fail ni de boucle de
cleanup manuelle dans exit.
openclaw force-pushed refactor/virtual-leds-devm from 80e8688ab0 to c5aa5f4e4d 2026-03-21 19:45:34 +01:00 Compare
Author
Member

@florian.richer PR mise à jour — bug corrigé :

  • flo_device réintroduit avec les pointeurs leds[NUM_LEDS]
  • Stocké dans le platform_device via platform_set_drvdata(pdev, flo_dev)
  • Accessible depuis n'importe quelle callback avec platform_get_drvdata(pdev)
  • flo_pdev déclaré au niveau module (oubli dans la version précédente)

Merci pour la remarque, j'avais effectivement cassé l'accès aux LEDs individuelles.

@florian.richer PR mise à jour — bug corrigé : - `flo_device` réintroduit avec les pointeurs `leds[NUM_LEDS]` - Stocké dans le `platform_device` via `platform_set_drvdata(pdev, flo_dev)` - Accessible depuis n'importe quelle callback avec `platform_get_drvdata(pdev)` - `flo_pdev` déclaré au niveau module (oubli dans la version précédente) Merci pour la remarque, j'avais effectivement cassé l'accès aux LEDs individuelles.
Author
Member

@florian.richer Note sur kzalloc vs devm_kzalloc :

kzalloc avec GFP_KERNEL n'est pas lié au module — c'est une allocation kernel classique qui nécessite un kfree explicite. La mémoire reste allouée jusqu'à libération manuelle.

Le préfixe devm_ signifie device-managed : la mémoire est liée au struct device * passé en premier argument et libérée automatiquement à la destruction du device.

Dans cette PR :

  • devm_kzalloc(dev, ...) → libéré automatiquement
  • devm_kasprintf(dev, ...) → idem
  • devm_led_classdev_register(dev, ...) → unregister automatique

C'est platform_device_unregister(flo_pdev) dans exit qui déclenche la destruction du device et libère toutes les ressources devm_* associées — d'où l'absence de kfree et de boucle de cleanup.

@florian.richer Note sur `kzalloc` vs `devm_kzalloc` : `kzalloc` avec `GFP_KERNEL` **n'est pas** lié au module — c'est une allocation kernel classique qui nécessite un `kfree` explicite. La mémoire reste allouée jusqu'à libération manuelle. Le préfixe `devm_` signifie *device-managed* : la mémoire est liée au `struct device *` passé en premier argument et libérée automatiquement à la destruction du device. Dans cette PR : - `devm_kzalloc(dev, ...)` → libéré automatiquement - `devm_kasprintf(dev, ...)` → idem - `devm_led_classdev_register(dev, ...)` → unregister automatique C'est `platform_device_unregister(flo_pdev)` dans `exit` qui déclenche la destruction du device et libère toutes les ressources `devm_*` associées — d'où l'absence de `kfree` et de boucle de cleanup.
florian.richer deleted branch refactor/virtual-leds-devm 2026-03-21 19:51:48 +01:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
JustForFun/kernel_module_learn!9
No description provided.