Módulos del kernel de Linux: cuándo usar try_module_get / module_put

Estaba leyendo el LKMPG (Ver Sección 4.1.4. Desregistrar un dispositivo ) y no me quedó claro cuándo usar eltry_module_get / module_put funciones Algunos de los ejemplos de LKMPG los usan, otros no.

Para añadir a la confusión,try_module_get Aparece 282 veces en 193 archivos en la fuente 2.6.24, pero enControladores de dispositivos Linux (LDD3) yControladores de dispositivos Linux esenciales, aparecen en ni siquiera un solo ejemplo de código.

Pensé que tal vez estaban atados a los viejos.register_chrdev interfaz (sustituida en 2.6 por la interfaz cdev), pero solo aparecen juntas en los mismos archivos 8 veces:

find -type f -name *.c | xargs grep -l try_module_get | sort -u | xargs grep -l register_chrdev | sort -u | grep -c .

Entonces, ¿cuándo es apropiado usar estas funciones y están relacionadas con el uso de una interfaz particular o un conjunto de circunstancias?

Editar

Cargué elsched.c Ejemplo del LKMPG y probé el siguiente experimento:

anon@anon:~/kernel-source/lkmpg/2.6.24$ tail /proc/sched -f &
Timer called 5041 times so far
[1] 14594

anon@anon:~$ lsmod | grep sched
sched                   2868  1 

anon@anon:~$ sudo rmmod sched
ERROR: Module sched is in use

Esto me lleva a creer que el kernel ahora tiene su propia contabilidad y que las entradas y salidas pueden estar obsoletas. ¿Alguien puede verificar esto?