refactor: utiliser devm_* allocations dans 07_virtual_leds_more_complex #9
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "openclaw/kernel_module_learn:refactor/virtual-leds-devm"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Remplace
kzalloc/kasprintf/kfree/led_classdev_registerpar leurs équivalentsdevm_*liés à unplatform_deviceparent.Le cleanup est maintenant automatique à la destruction du device — plus besoin de
goto failni de boucle de cleanup manuelle dans exit.Note:
devm_*nécessite unstruct device *valide, donc unplatform_deviceest introduit comme parent. C'est le pattern standard kernel pour ce cas.Ref #1
80e8688ab0toc5aa5f4e4d@florian.richer PR mise à jour — bug corrigé :
flo_deviceréintroduit avec les pointeursleds[NUM_LEDS]platform_deviceviaplatform_set_drvdata(pdev, flo_dev)platform_get_drvdata(pdev)flo_pdevdé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 Note sur
kzallocvsdevm_kzalloc:kzallocavecGFP_KERNELn'est pas lié au module — c'est une allocation kernel classique qui nécessite unkfreeexplicite. La mémoire reste allouée jusqu'à libération manuelle.Le préfixe
devm_signifie device-managed : la mémoire est liée austruct device *passé en premier argument et libérée automatiquement à la destruction du device.Dans cette PR :
devm_kzalloc(dev, ...)→ libéré automatiquementdevm_kasprintf(dev, ...)→ idemdevm_led_classdev_register(dev, ...)→ unregister automatiqueC'est
platform_device_unregister(flo_pdev)dansexitqui déclenche la destruction du device et libère toutes les ressourcesdevm_*associées — d'où l'absence dekfreeet de boucle de cleanup.